aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/compliance_control_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/compliance_control_spec.rb')
-rw-r--r--spec/models/compliance_control_spec.rb76
1 files changed, 48 insertions, 28 deletions
diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb
index 50c2b7b8d..db73dab21 100644
--- a/spec/models/compliance_control_spec.rb
+++ b/spec/models/compliance_control_spec.rb
@@ -1,39 +1,59 @@
RSpec.describe ComplianceControl, type: :model do
- let(:compliance_control) { create :compliance_control }
+ context 'standard validation' do
- it 'should have a valid factory' do
- expect(compliance_control).to be_valid
- end
+ let(:compliance_control) { build_stubbed :compliance_control }
- it { should belong_to :compliance_control_set }
- it { should belong_to :compliance_control_block }
+ it 'should have a valid factory' do
+ expect(compliance_control).to be_valid
+ end
- it 'should validate_presence_of criticity' do
- compliance_control.criticity = nil
- expect(compliance_control).not_to be_valid
- end
+ it { should belong_to :compliance_control_set }
+ it { should belong_to :compliance_control_block }
- it 'should validate_presence_of name' do
- compliance_control.name = nil
- expect(compliance_control).not_to be_valid
- end
- it 'should validate_presence_of code' do
- compliance_control.code = nil
- expect(compliance_control).not_to be_valid
- end
+ it { should validate_presence_of :criticity }
+ it 'should validate_presence_of :name' do
+ expect( build :compliance_control, name: '' ).to_not be_valid
+ end
+ it { should validate_presence_of :code }
+ it { should validate_presence_of :origin_code }
- it 'should validate_presence_of origin_code' do
- compliance_control.origin_code = nil
- expect(compliance_control).not_to be_valid
end
- #TODO dont know why the 'shortcuts' below to validates presence dont work
- # That's why we dont it 'manually'
- # it { should validate_presence_of :criticity }
- # it { should validate_presence_of :name }
- # it { should validate_presence_of :code }
- # it { should validate_presence_of :origin_code }
-
+ context 'validates that direct and indirect (via control_block) control_set are not different instances' do
+
+ it 'not attached to control_block -> valid' do
+ compliance_control = create :compliance_control, compliance_control_block_id: nil
+ expect(compliance_control).to be_valid
+ end
+
+ it 'attached to a control_block belonging to the same control_set -> valid' do
+ compliance_control_block = create :compliance_control_block
+ compliance_control = create :compliance_control,
+ compliance_control_block_id: compliance_control_block.id,
+ compliance_control_set_id: compliance_control_block.compliance_control_set.id # DO NOT change the last . to _
+ # We need to be sure that is is not nil
+ expect(compliance_control).to be_valid
+ end
+
+ it 'attached to a control_block **not** belonging to the same control_set -> invalid' do
+ compliance_control_block = create :compliance_control_block
+ compliance_control = build :compliance_control,
+ compliance_control_block_id: compliance_control_block.id,
+ compliance_control_set_id: create( :compliance_control_set ).id
+ expect(compliance_control).to_not be_valid
+
+ direct_name = compliance_control.compliance_control_set.name
+ indirect_name = compliance_control_block.compliance_control_set.name
+ expected_message = "Le contrôle ne peut pas être associé à un jeu de contrôle (id: #{direct_name}) différent de celui de son groupe (id: #{indirect_name})"
+
+ selected_error_message =
+ compliance_control
+ .errors
+ .messages[:coherent_control_set]
+ .first
+ expect( selected_error_message ).to eq(expected_message)
+ end
+ end
end