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.
This commit is contained in:
Javi Martín
2019-10-12 04:28:43 +02:00
parent b4b20e0295
commit 431074c99f
9 changed files with 26 additions and 6 deletions

View File

@@ -15,7 +15,7 @@ class Verification::LetterController < ApplicationController
def create def create
@letter = Verification::Letter.new(user: current_user) @letter = Verification::Letter.new(user: current_user)
@letter.save @letter.save!
redirect_to letter_path redirect_to letter_path
end end

View File

@@ -33,6 +33,10 @@ class LocalCensusRecords::Import
true true
end end
def save!
validate! && save
end
private private
def process_row(row) def process_row(row)

View File

@@ -48,6 +48,10 @@ class Officing::Residence
end end
end end
def save!
validate! && save
end
def store_failed_census_call def store_failed_census_call
FailedCensusCall.create( FailedCensusCall.create(
user: user, user: user,

View File

@@ -16,6 +16,10 @@ class Verification::Letter
letter_requested! letter_requested!
end end
def save!
validate! && save
end
def letter_requested! def letter_requested!
user.update(letter_requested_at: Time.current, letter_verification_code: generate_verification_code) user.update(letter_requested_at: Time.current, letter_verification_code: generate_verification_code)
end end

View File

@@ -35,6 +35,10 @@ class Verification::Management::Email
true true
end end
def save!
validate! && save
end
private private
def validate_user def validate_user

View File

@@ -37,6 +37,10 @@ class Verification::Residence
residence_verified_at: Time.current) residence_verified_at: Time.current)
end end
def save!
validate! && save
end
def allowed_age def allowed_age
return if errors[:date_of_birth].any? || Age.in_years(date_of_birth) >= User.minimum_required_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")) errors.add(:date_of_birth, I18n.t("verification.residence.new.error_not_allowed_age"))

View File

@@ -46,7 +46,7 @@ describe LocalCensusRecords::Import do
context "#save" do context "#save" do
it "Create valid local census records with provided values" do it "Create valid local census records with provided values" do
import.save import.save!
local_census_record = LocalCensusRecord.find_by(document_number: "X11556678") local_census_record = LocalCensusRecord.find_by(document_number: "X11556678")
expect(local_census_record).not_to be_nil expect(local_census_record).not_to be_nil
@@ -57,7 +57,7 @@ describe LocalCensusRecords::Import do
end end
it "Add successfully created local census records to created_records array" do it "Add successfully created local census records to created_records array" do
import.save import.save!
valid_document_numbers = ["44556678T", "33556678T", "22556678T", "X11556678"] valid_document_numbers = ["44556678T", "33556678T", "22556678T", "X11556678"]
expect(import.created_records.collect(&:document_number)).to eq(valid_document_numbers) 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)) file = Rack::Test::UploadedFile.new(Rails.root.join(*path))
import.file = file import.file = file
import.save import.save!
invalid_records_document_types = [nil, "DNI", "Passport", "NIE"] invalid_records_document_types = [nil, "DNI", "Passport", "NIE"]
invalid_records_document_numbers = ["44556678T", nil, "22556678T", "X11556678"] invalid_records_document_numbers = ["44556678T", nil, "22556678T", "X11556678"]

View File

@@ -23,7 +23,7 @@ describe Verification::Letter do
it "updates letter_requested" do it "updates letter_requested" do
letter = build(:verification_letter) letter = build(:verification_letter)
letter.save letter.save!
expect(letter.user.letter_requested_at).to be expect(letter.user.letter_requested_at).to be
end end

View File

@@ -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(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) 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.reload).to be_level_two_verified
expect(user.document_type).to eq("1") expect(user.document_type).to eq("1")