From 939c4ec667febecab978008ff7c6f524a7059d30 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 5 Nov 2021 11:52:48 +0000 Subject: [PATCH] fix some tests --- app/admin/case_logs.rb | 3 +- app/models/case_log.rb | 12 ++--- app/validations/household_validations.rb | 44 +++++++++---------- app/validations/property_validations.rb | 2 +- app/validations/soft_validations.rb | 8 ++-- config/initializers/active_admin.rb | 4 +- db/schema.rb | 22 ++++------ spec/controllers/case_logs_controller_spec.rb | 8 ++-- spec/factories/case_log.rb | 2 +- spec/features/case_log_spec.rb | 24 +++++----- spec/models/case_log_spec.rb | 16 +++---- 11 files changed, 70 insertions(+), 75 deletions(-) diff --git a/app/admin/case_logs.rb b/app/admin/case_logs.rb index cd303787e..f14d33a3a 100644 --- a/app/admin/case_logs.rb +++ b/app/admin/case_logs.rb @@ -1,9 +1,8 @@ ActiveAdmin.register CaseLog do - # See permitted parameters documentation: # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters permit_params do - permitted = [:status, :tenant_code, :person_1_age, :person_1_gender, :tenant_ethnic_group, :tenant_nationality, :previous_housing_situation, :armed_forces, :person_1_economic_status, :household_number_of_other_members, :person_2_relationship, :person_2_age, :person_2_gender, :person_2_economic_status, :person_3_relationship, :person_3_age, :person_3_gender, :person_3_economic_status, :person_4_relationship, :person_4_age, :person_4_gender, :person_4_economic_status, :person_5_relationship, :person_5_age, :person_5_gender, :person_5_economic_status, :person_6_relationship, :person_6_age, :person_6_gender, :person_6_economic_status, :person_7_relationship, :person_7_age, :person_7_gender, :person_7_economic_status, :person_8_relationship, :person_8_age, :person_8_gender, :person_8_economic_status, :homelessness, :reason_for_leaving_last_settled_home, :benefit_cap_spare_room_subsidy, :armed_forces_active, :armed_forces_injured, :armed_forces_partner, :medical_conditions, :pregnancy, :accessibility_requirements, :condition_effects, :tenancy_code, :tenancy_start_date, :starter_tenancy, :fixed_term_tenancy, :tenancy_type, :letting_type, :letting_provider, :property_location, :previous_postcode, :property_relet, :property_vacancy_reason, :property_reference, :property_unit_type, :property_building_type, :property_number_of_bedrooms, :property_void_date, :property_major_repairs, :property_major_repairs_date, :property_number_of_times_relet, :property_wheelchair_accessible, :net_income, :net_income_frequency, :net_income_uc_proportion, :housing_benefit, :rent_frequency, :basic_rent, :service_charge, :personal_service_charge, :support_charge, :total_charge, :outstanding_amount, :time_lived_in_la, :time_on_la_waiting_list, :previous_la, :property_postcode, :reasonable_preference, :reasonable_preference_reason, :cbl_letting, :chr_letting, :cap_letting, :outstanding_rent_or_charges, :other_reason_for_leaving_last_settled_home, :accessibility_requirements_fully_wheelchair_accessible_housing, :accessibility_requirements_wheelchair_access_to_essential_rooms, :accessibility_requirements_level_access_housing, :accessibility_requirements_other_disability_requirements, :accessibility_requirements_no_disability_requirements, :accessibility_requirements_do_not_know, :accessibility_requirements_prefer_not_to_say, :condition_effects_vision, :condition_effects_hearing, :condition_effects_mobility, :condition_effects_dexterity, :condition_effects_stamina, :condition_effects_learning, :condition_effects_memory, :condition_effects_mental_health, :condition_effects_social_or_behavioral, :condition_effects_other, :condition_effects_prefer_not_to_say, :reasonable_preference_reason_homeless, :reasonable_preference_reason_unsatisfactory_housing, :reasonable_preference_reason_medical_grounds, :reasonable_preference_reason_avoid_hardship, :reasonable_preference_reason_do_not_know, :other_tenancy_type, :override_net_income_validation, :net_income_known] + permitted = %i[status tenant_code age1 sex1 tenant_ethnic_group tenant_nationality previous_housing_situation armed_forces ecstat1 hhmemb relat2 age2 sex2 ecstat2 relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 relat7 age7 person_7_gender ecstat7 relat8 age8 sex8 ecstat8 homelessness reason_for_leaving_last_settled_home benefit_cap_spare_room_subsidy armed_forces_active armed_forces_injured armed_forces_partner medical_conditions pregnancy accessibility_requirements condition_effects tenancy_code tenancy_start_date starter_tenancy fixed_term_tenancy tenancy_type letting_type letting_provider property_location previous_postcode property_relet property_vacancy_reason property_reference property_unit_type property_building_type property_number_of_bedrooms property_void_date property_major_repairs property_major_repairs_date property_number_of_times_relet property_wheelchair_accessible net_income net_income_frequency net_income_uc_proportion housing_benefit rent_frequency basic_rent service_charge personal_service_charge support_charge total_charge outstanding_amount time_lived_in_la time_on_la_waiting_list previous_la property_postcode reasonable_preference reasonable_preference_reason cbl_letting chr_letting cap_letting outstanding_rent_or_charges other_reason_for_leaving_last_settled_home accessibility_requirements_fully_wheelchair_accessible_housing accessibility_requirements_wheelchair_access_to_essential_rooms accessibility_requirements_level_access_housing accessibility_requirements_other_disability_requirements accessibility_requirements_no_disability_requirements accessibility_requirements_do_not_know accessibility_requirements_prefer_not_to_say condition_effects_vision condition_effects_hearing condition_effects_mobility condition_effects_dexterity condition_effects_stamina condition_effects_learning condition_effects_memory condition_effects_mental_health condition_effects_social_or_behavioral condition_effects_other condition_effects_prefer_not_to_say reasonable_preference_reason_homeless reasonable_preference_reason_unsatisfactory_housing reasonable_preference_reason_medical_grounds reasonable_preference_reason_avoid_hardship reasonable_preference_reason_do_not_know other_tenancy_type override_net_income_validation net_income_known] permitted end diff --git a/app/models/case_log.rb b/app/models/case_log.rb index bb51d9298..ac37461da 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -36,7 +36,7 @@ end class CaseLog < ApplicationRecord include Discard::Model - include SoftValidations + include SoftValidations include DbEnums default_scope -> { kept } scope :not_completed, -> { where.not(status: "completed") } @@ -187,12 +187,12 @@ private dynamically_not_required << "incfreq" end - start_range = (household_number_of_other_members || 0) + 2 + start_range = (hhmemb || 0) + 2 (start_range..8).each do |n| - dynamically_not_required << "person_#{n}_age" - dynamically_not_required << "person_#{n}_gender" - dynamically_not_required << "person_#{n}_relationship" - dynamically_not_required << "person_#{n}_economic_status" + dynamically_not_required << "age#{n}" + dynamically_not_required << "sex#{n}" + dynamically_not_required << "relat#{n}" + dynamically_not_required << "ecstat#{n}" end required.delete_if { |key, _value| dynamically_not_required.include?(key) } diff --git a/app/validations/household_validations.rb b/app/validations/household_validations.rb index 3a7f77dbb..ca8d887e9 100644 --- a/app/validations/household_validations.rb +++ b/app/validations/household_validations.rb @@ -63,10 +63,10 @@ module HouseholdValidations end def validate_person_1_age(record) - return unless record.person_1_age + return unless record.age1 - if !record.person_1_age.is_a?(Integer) || record.person_1_age < 16 || record.person_1_age > 120 - record.errors.add "person_1_age", "Tenant age must be an integer between 16 and 120" + if !record.age1.is_a?(Integer) || record.age1 < 16 || record.age1 > 120 + record.errors.add "age1", "Tenant age must be an integer between 16 and 120" end end @@ -101,65 +101,65 @@ private end def validate_person_age(record, person_num) - age = record.public_send("person_#{person_num}_age") + age = record.public_send("age#{person_num}") return unless age if !age.is_a?(Integer) || age < 1 || age > 120 - record.errors.add "person_#{person_num}_age".to_sym, "Tenant age must be an integer between 0 and 120" + record.errors.add "age#{person_num}".to_sym, "Tenant age must be an integer between 0 and 120" end end def validate_person_age_matches_economic_status(record, person_num) - age = record.public_send("person_#{person_num}_age") - economic_status = record.public_send("person_#{person_num}_economic_status") + age = record.public_send("age#{person_num}") + economic_status = record.public_send("ecstat#{person_num}") return unless age && economic_status if age > 70 && economic_status != "Retired" - record.errors.add "person_#{person_num}_economic_status", "Tenant #{person_num} must be retired if over 70" + record.errors.add "ecstat#{person_num}", "Tenant #{person_num} must be retired if over 70" end if age < 16 && economic_status != "Child under 16" - record.errors.add "person_#{person_num}_economic_status", "Tenant #{person_num} economic status must be Child under 16 if their age is under 16" + record.errors.add "ecstat#{person_num}", "Tenant #{person_num} economic status must be Child under 16 if their age is under 16" end end def validate_person_age_matches_relationship(record, person_num) - age = record.public_send("person_#{person_num}_age") - relationship = record.public_send("person_#{person_num}_relationship") + age = record.public_send("age#{person_num}") + relationship = record.public_send("relat#{person_num}") return unless age && relationship if age < 16 && relationship != "Child - includes young adult and grown-up" - record.errors.add "person_#{person_num}_relationship", "Tenant #{person_num}'s relationship to tenant 1 must be Child if their age is under 16" + record.errors.add "relat#{person_num}", "Tenant #{person_num}'s relationship to tenant 1 must be Child if their age is under 16" end end def validate_person_age_and_relationship_matches_economic_status(record, person_num) - age = record.public_send("person_#{person_num}_age") - economic_status = record.public_send("person_#{person_num}_economic_status") - relationship = record.public_send("person_#{person_num}_relationship") + age = record.public_send("age#{person_num}") + economic_status = record.public_send("ecstat#{person_num}") + relationship = record.public_send("relat#{person_num}") return unless age && economic_status && relationship if age >= 16 && age <= 19 && relationship == "Child - includes young adult and grown-up" && (economic_status != "Full-time student" || economic_status != "Prefer not to say") - record.errors.add "person_#{person_num}_economic_status", "If age is between 16 and 19 - tenant #{person_num} must be a full time student or prefer not to say." + record.errors.add "ecstat#{person_num}", "If age is between 16 and 19 - tenant #{person_num} must be a full time student or prefer not to say." end end def validate_person_age_and_gender_match_economic_status(record, person_num) - age = record.public_send("person_#{person_num}_age") - gender = record.public_send("person_#{person_num}_gender") - economic_status = record.public_send("person_#{person_num}_economic_status") + age = record.public_send("age#{person_num}") + gender = record.public_send("sex#{person_num}") + economic_status = record.public_send("ecstat#{person_num}") return unless age && economic_status && gender if gender == "Male" && economic_status == "Retired" && age < 65 - record.errors.add "person_#{person_num}_age", "Male tenant who is retired must be 65 or over" + record.errors.add "age#{person_num}", "Male tenant who is retired must be 65 or over" end if gender == "Female" && economic_status == "Retired" && age < 60 - record.errors.add "person_#{person_num}_age", "Female tenant who is retired must be 60 or over" + record.errors.add "age#{person_num}", "Female tenant who is retired must be 60 or over" end end def validate_partner_count(record) # TODO: probably need to keep track of which specific field is wrong so we can highlight it in the UI - partner_count = (2..8).count { |n| record.public_send("person_#{n}_relationship") == "Partner" } + partner_count = (2..8).count { |n| record.public_send("relat#{n}") == "Partner" } if partner_count > 1 record.errors.add :base, "Number of partners cannot be greater than 1" end diff --git a/app/validations/property_validations.rb b/app/validations/property_validations.rb index 503586d18..53df3e62b 100644 --- a/app/validations/property_validations.rb +++ b/app/validations/property_validations.rb @@ -3,7 +3,7 @@ module PropertyValidations # or 'validate_' to run on submit as well def validate_property_number_of_times_relet(record) if record.offered && !/^[1-9]$|^0[1-9]$|^1[0-9]$|^20$/.match?(record.offered.to_s) - record.errors.add :offered, "Must be between 0 and 20" + record.errors.add :offered, "Property number of times relet must be between 0 and 20" end end end diff --git a/app/validations/soft_validations.rb b/app/validations/soft_validations.rb index b62490130..e9ce6d12b 100644 --- a/app/validations/soft_validations.rb +++ b/app/validations/soft_validations.rb @@ -18,12 +18,12 @@ private if net_income_in_soft_min_range? net_income_errors["override_net_income_validation"] = OpenStruct.new( message: "Net income is lower than expected based on the main tenant's working situation. Are you sure this is correct?", - hint_text: "This is based on the tenant's work situation: #{person_1_economic_status}", + hint_text: "This is based on the tenant's work situation: #{ecstat1}", ) elsif net_income_in_soft_max_range? net_income_errors["override_net_income_validation"] = OpenStruct.new( message: "Net income is higher than expected based on the main tenant's working situation. Are you sure this is correct?", - hint_text: "This is based on the tenant's work situation: #{person_1_economic_status}", + hint_text: "This is based on the tenant's work situation: #{ecstat1}", ) else update_column(:override_net_income_validation, nil) @@ -32,13 +32,13 @@ private end def net_income_in_soft_max_range? - return unless weekly_net_income && person_1_economic_status + return unless weekly_net_income && ecstat1 weekly_net_income.between?(applicable_income_range.soft_max, applicable_income_range.hard_max) end def net_income_in_soft_min_range? - return unless weekly_net_income && person_1_economic_status + return unless weekly_net_income && ecstat1 weekly_net_income.between?(applicable_income_range.soft_min, applicable_income_range.hard_min) end diff --git a/config/initializers/active_admin.rb b/config/initializers/active_admin.rb index 4ef658194..5afdcdc12 100644 --- a/config/initializers/active_admin.rb +++ b/config/initializers/active_admin.rb @@ -124,7 +124,7 @@ ActiveAdmin.setup do |config| # This allows your users to comment on any resource registered with Active Admin. # # You can completely disable comments: - config.comments = false + config.comments = false # # You can change the name under which comments are registered: # config.comments_registration_name = 'AdminComment' @@ -157,7 +157,7 @@ ActiveAdmin.setup do |config| # You can exclude possibly sensitive model attributes from being displayed, # added to forms, or exported by default by ActiveAdmin # - config.filter_attributes = [:encrypted_password, :password, :password_confirmation] + config.filter_attributes = %i[encrypted_password password password_confirmation] # == Localize Date/Time Format # diff --git a/db/schema.rb b/db/schema.rb index 4c3e5a5c3..03c0e3733 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -103,9 +103,9 @@ ActiveRecord::Schema.define(version: 2021_11_03_090530) do t.string "property_postcode" t.integer "reasonpref" t.string "reasonable_preference_reason" - t.integer "cbl" - t.integer "chr" - t.integer "cap" + t.string "cbl" + t.string "chr" + t.string "cap" t.string "outstanding_rent_or_charges" t.string "other_reason_for_leaving_last_settled_home" t.integer "housingneeds_a" @@ -126,19 +126,15 @@ ActiveRecord::Schema.define(version: 2021_11_03_090530) do t.integer "illness_type_9" t.integer "illness_type_10" t.boolean "condition_effects_prefer_not_to_say" - t.integer "rp_homeless" - t.integer "rp_insan_unsat" - t.integer "rp_medwel" - t.integer "rp_hardship" - t.integer "rp_dontknow" - t.integer "offered" + t.boolean "rp_homeless" + t.boolean "rp_insan_unsat" + t.boolean "rp_medwel" + t.boolean "rp_hardship" + t.boolean "rp_dontknow" t.datetime "discarded_at" - t.boolean "override_net_income_validation" t.string "tenancyother" t.string "net_income_known" - t.string "cbl_letting" - t.string "chr_letting" - t.string "cap_letting" + t.boolean "override_net_income_validation" t.index ["discarded_at"], name: "index_case_logs_on_discarded_at" end diff --git a/spec/controllers/case_logs_controller_spec.rb b/spec/controllers/case_logs_controller_spec.rb index 98333d0c7..2eecfdfe2 100644 --- a/spec/controllers/case_logs_controller_spec.rb +++ b/spec/controllers/case_logs_controller_spec.rb @@ -52,13 +52,13 @@ RSpec.describe CaseLogsController, type: :controller do %w[ housingneeds_a housingneeds_b housingneeds_c], - previous_page: "accessibility_requirements" } + page: "accessibility_requirements" } end let(:new_case_log_form_params) do { accessibility_requirements: %w[housingneeds_c], - previous_page: "accessibility_requirements", + page: "accessibility_requirements", } end @@ -131,14 +131,14 @@ RSpec.describe CaseLogsController, type: :controller do let(:case_log_form_conditional_question_yes_params) do { preg_occ: "Yes", - previous_page: "conditional_question", + page: "conditional_question", } end let(:case_log_form_conditional_question_no_params) do { preg_occ: "No", - previous_page: "conditional_question", + page: "conditional_question", } end diff --git a/spec/factories/case_log.rb b/spec/factories/case_log.rb index 0fb18b243..5504800fa 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/case_log.rb @@ -6,7 +6,7 @@ FactoryBot.define do tenant_code { "TH356" } property_postcode { "SW2 6HI" } previous_postcode { "P0 5ST" } - age1 { "12" } + age1 { "17" } end trait :completed do status { 2 } diff --git a/spec/features/case_log_spec.rb b/spec/features/case_log_spec.rb index 749cebb5a..be20f6b81 100644 --- a/spec/features/case_log_spec.rb +++ b/spec/features/case_log_spec.rb @@ -181,7 +181,7 @@ RSpec.describe "Test Features" do it "displays text answers in inputs if they are already saved" do visit("/case_logs/#{id}/person_1_age") - expect(page).to have_field("case-log-age1-field", with: "12") + expect(page).to have_field("case-log-age1-field", with: "17") end it "displays checkbox answers in inputs if they are already saved" do @@ -385,14 +385,14 @@ RSpec.describe "Test Features" do describe "Soft Validation" do context "given a weekly net income that is above the expected amount for the given economic status but below the hard max" do - let!(:case_log) { FactoryBot.create(:case_log, :in_progress, person_1_economic_status: "Full-time - 30 hours or more") } + let!(:case_log) { FactoryBot.create(:case_log, :in_progress, ecstat1: "Full-time - 30 hours or more") } let(:income_over_soft_limit) { 750 } let(:income_under_soft_limit) { 700 } it "prompts the user to confirm the value is correct" do visit("/case_logs/#{case_log.id}/net_income") - fill_in("case-log-net-income-field", with: income_over_soft_limit) - choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) + fill_in("case-log-earnings-field", with: income_over_soft_limit) + choose("case-log-incfreq-weekly-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_content("Are you sure this is correct?") check("case-log-override-net-income-validation-override-net-income-validation-field", allow_label_click: true) @@ -402,10 +402,10 @@ RSpec.describe "Test Features" do it "does not require confirming the value if the value is amended" do visit("/case_logs/#{case_log.id}/net_income") - fill_in("case-log-net-income-field", with: income_over_soft_limit) - choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) + fill_in("case-log-earnings-field", with: income_over_soft_limit) + choose("case-log-incfreq-weekly-field", allow_label_click: true) click_button("Save and continue") - fill_in("case-log-net-income-field", with: income_under_soft_limit) + fill_in("case-log-earnings-field", with: income_under_soft_limit) click_button("Save and continue") expect(page).to have_current_path("/case_logs/#{case_log.id}/net_income_uc_proportion") case_log.reload @@ -414,10 +414,10 @@ RSpec.describe "Test Features" do it "clears the confirmation question if the amount was amended and the page is returned to using the back button", js: true do visit("/case_logs/#{case_log.id}/net_income") - fill_in("case-log-net-income-field", with: income_over_soft_limit) - choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) + fill_in("case-log-earnings-field", with: income_over_soft_limit) + choose("case-log-incfreq-weekly-field", allow_label_click: true) click_button("Save and continue") - fill_in("case-log-net-income-field", with: income_under_soft_limit) + fill_in("case-log-earnings-field", with: income_under_soft_limit) click_button("Save and continue") click_link(text: "Back") expect(page).not_to have_content("Are you sure this is correct?") @@ -425,8 +425,8 @@ RSpec.describe "Test Features" do it "does not clear the confirmation question if the page is returned to using the back button and the amount is still over the soft limit", js: true do visit("/case_logs/#{case_log.id}/net_income") - fill_in("case-log-net-income-field", with: income_over_soft_limit) - choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) + fill_in("case-log-earnings-field", with: income_over_soft_limit) + choose("case-log-incfreq-weekly-field", allow_label_click: true) click_button("Save and continue") check("case-log-override-net-income-validation-override-net-income-validation-field", allow_label_click: true) click_button("Save and continue") diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 97a0ae53c..75bc1f1a6 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -247,35 +247,35 @@ RSpec.describe Form, type: :model do context "household_member_validations" do it "validate that persons aged under 16 must have relationship Child" do - expect { CaseLog.create!(person_2_age: 14, person_2_relationship: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 14, relat2: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that persons aged over 70 must be retired" do - expect { CaseLog.create!(person_2_age: 71, person_2_economic_status: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 71, ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that a male, retired persons must be over 65" do - expect { CaseLog.create!(person_2_age: 64, person_2_gender: "Male", person_2_economic_status: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 64, sex2: "Male", ecstat2: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that a female, retired persons must be over 60" do - expect { CaseLog.create!(person_2_age: 59, person_2_gender: "Female", person_2_economic_status: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 59, sex2: "Female", ecstat2: "Retired") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that persons aged under 16 must be a child (economically speaking)" do - expect { CaseLog.create!(person_2_age: 15, person_2_economic_status: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 15, ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that persons aged between 16 and 19 that are a child must be a full time student or economic status refused" do - expect { CaseLog.create!(person_2_age: 17, person_2_relationship: "Child - includes young adult and grown-up", person_2_economic_status: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 17, relat2: "Child - includes young adult and grown-up", ecstat2: "Full-time - 30 hours or more") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that persons aged under 16 must be a child relationship" do - expect { CaseLog.create!(person_2_age: 15, person_2_relationship: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(age2: 15, relat2: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) end it "validate that no more than 1 partner relationship exists" do - expect { CaseLog.create!(person_2_relationship: "Partner", person_3_relationship: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) + expect { CaseLog.create!(relat2: "Partner", relat3: "Partner") }.to raise_error(ActiveRecord::RecordInvalid) end end