diff options
Diffstat (limited to 'spec/models/compliance_control_spec.rb')
| -rw-r--r-- | spec/models/compliance_control_spec.rb | 76 | 
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 | 
