From 431074c99fae32fda126974c872da30552b68e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sat, 12 Oct 2019 04:28:43 +0200 Subject: [PATCH] Add `save!` method to ActiveModel models This way we make it clear we expect records to be valid when we save them, just like we do with ActiveRecord models. --- app/controllers/verification/letter_controller.rb | 2 +- app/models/local_census_records/import.rb | 4 ++++ app/models/officing/residence.rb | 4 ++++ app/models/verification/letter.rb | 4 ++++ app/models/verification/management/email.rb | 4 ++++ app/models/verification/residence.rb | 4 ++++ spec/models/local_census_records/import_spec.rb | 6 +++--- spec/models/verification/letter_spec.rb | 2 +- spec/models/verification/management/email_spec.rb | 2 +- 9 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/controllers/verification/letter_controller.rb b/app/controllers/verification/letter_controller.rb index 52a1c8123..5b36b912a 100644 --- a/app/controllers/verification/letter_controller.rb +++ b/app/controllers/verification/letter_controller.rb @@ -15,7 +15,7 @@ class Verification::LetterController < ApplicationController def create @letter = Verification::Letter.new(user: current_user) - @letter.save + @letter.save! redirect_to letter_path end diff --git a/app/models/local_census_records/import.rb b/app/models/local_census_records/import.rb index c601ce9b3..298a1a17f 100644 --- a/app/models/local_census_records/import.rb +++ b/app/models/local_census_records/import.rb @@ -33,6 +33,10 @@ class LocalCensusRecords::Import true end + def save! + validate! && save + end + private def process_row(row) diff --git a/app/models/officing/residence.rb b/app/models/officing/residence.rb index 9f5b56cc0..4f6d73b18 100644 --- a/app/models/officing/residence.rb +++ b/app/models/officing/residence.rb @@ -48,6 +48,10 @@ class Officing::Residence end end + def save! + validate! && save + end + def store_failed_census_call FailedCensusCall.create( user: user, diff --git a/app/models/verification/letter.rb b/app/models/verification/letter.rb index 599a628f1..2391b29be 100644 --- a/app/models/verification/letter.rb +++ b/app/models/verification/letter.rb @@ -16,6 +16,10 @@ class Verification::Letter letter_requested! end + def save! + validate! && save + end + def letter_requested! user.update(letter_requested_at: Time.current, letter_verification_code: generate_verification_code) end diff --git a/app/models/verification/management/email.rb b/app/models/verification/management/email.rb index 8cad381d2..bd291282c 100644 --- a/app/models/verification/management/email.rb +++ b/app/models/verification/management/email.rb @@ -35,6 +35,10 @@ class Verification::Management::Email true end + def save! + validate! && save + end + private def validate_user diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index c69538dde..eaa56ca42 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -37,6 +37,10 @@ class Verification::Residence residence_verified_at: Time.current) end + def save! + validate! && save + end + def allowed_age return if errors[:date_of_birth].any? || Age.in_years(date_of_birth) >= User.minimum_required_age errors.add(:date_of_birth, I18n.t("verification.residence.new.error_not_allowed_age")) diff --git a/spec/models/local_census_records/import_spec.rb b/spec/models/local_census_records/import_spec.rb index f561007a2..e9e7a7953 100644 --- a/spec/models/local_census_records/import_spec.rb +++ b/spec/models/local_census_records/import_spec.rb @@ -46,7 +46,7 @@ describe LocalCensusRecords::Import do context "#save" do it "Create valid local census records with provided values" do - import.save + import.save! local_census_record = LocalCensusRecord.find_by(document_number: "X11556678") expect(local_census_record).not_to be_nil @@ -57,7 +57,7 @@ describe LocalCensusRecords::Import do end it "Add successfully created local census records to created_records array" do - import.save + import.save! valid_document_numbers = ["44556678T", "33556678T", "22556678T", "X11556678"] expect(import.created_records.collect(&:document_number)).to eq(valid_document_numbers) @@ -68,7 +68,7 @@ describe LocalCensusRecords::Import do file = Rack::Test::UploadedFile.new(Rails.root.join(*path)) import.file = file - import.save + import.save! invalid_records_document_types = [nil, "DNI", "Passport", "NIE"] invalid_records_document_numbers = ["44556678T", nil, "22556678T", "X11556678"] diff --git a/spec/models/verification/letter_spec.rb b/spec/models/verification/letter_spec.rb index 9831cb776..093b5a50d 100644 --- a/spec/models/verification/letter_spec.rb +++ b/spec/models/verification/letter_spec.rb @@ -23,7 +23,7 @@ describe Verification::Letter do it "updates letter_requested" do letter = build(:verification_letter) - letter.save + letter.save! expect(letter.user.letter_requested_at).to be end diff --git a/spec/models/verification/management/email_spec.rb b/spec/models/verification/management/email_spec.rb index 43d7e3ecc..989e222ee 100644 --- a/spec/models/verification/management/email_spec.rb +++ b/spec/models/verification/management/email_spec.rb @@ -43,7 +43,7 @@ describe Verification::Management::Email do allow(Devise.token_generator).to receive(:generate).with(User, :email_verification_token).and_return(["1", "2"]) allow(Mailer).to receive(:email_verification).with(user, user.email, "2", "1", "1234").and_return(mail) - validation.save + validation.save! expect(user.reload).to be_level_two_verified expect(user.document_type).to eq("1")