diff --git a/app/models/custom/verification/residence.rb b/app/models/custom/verification/residence.rb new file mode 100644 index 000000000..1cbc6f7ab --- /dev/null +++ b/app/models/custom/verification/residence.rb @@ -0,0 +1,29 @@ + +require_dependency Rails.root.join('app', 'models', 'verification', 'residence').to_s + +class Verification::Residence + + validate :postal_code_in_madrid + validate :residence_in_madrid + + def postal_code_in_madrid + errors.add(:postal_code, I18n.t('verification.residence.new.error_not_allowed_postal_code')) unless valid_postal_code? + end + + def residence_in_madrid + return if errors.any? + + unless residency_valid? + errors.add(:residence_in_madrid, false) + store_failed_attempt + Lock.increase_tries(user) + end + end + + private + + def valid_postal_code? + postal_code =~ /^280/ + end + +end diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 5756af2b3..cc24bb7c8 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -16,8 +16,6 @@ class Verification::Residence validate :allowed_age validate :document_number_uniqueness - validate :postal_code_in_madrid - validate :residence_in_madrid def initialize(attrs={}) self.date_of_birth = parse_date('date_of_birth', attrs) @@ -45,20 +43,6 @@ class Verification::Residence errors.add(:document_number, I18n.t('errors.messages.taken')) if User.where(document_number: document_number).any? end - def postal_code_in_madrid - errors.add(:postal_code, I18n.t('verification.residence.new.error_not_allowed_postal_code')) unless valid_postal_code? - end - - def residence_in_madrid - return if errors.any? - - unless residency_valid? - errors.add(:residence_in_madrid, false) - store_failed_attempt - Lock.increase_tries(user) - end - end - def store_failed_attempt FailedCensusCall.create({ user: user, @@ -97,8 +81,4 @@ class Verification::Residence self.document_number = self.document_number.gsub(/[^a-z0-9]+/i, "").upcase unless self.document_number.blank? end - def valid_postal_code? - postal_code =~ /^280/ - end - end diff --git a/spec/models/custom/residence_spec.rb b/spec/models/custom/residence_spec.rb new file mode 100644 index 000000000..ce0a95869 --- /dev/null +++ b/spec/models/custom/residence_spec.rb @@ -0,0 +1,34 @@ +require 'rails_helper' + +describe Verification::Residence do + + let(:residence) { build(:verification_residence, document_number: "12345678Z") } + + describe "verification" do + + describe "postal code" do + it "should be valid with postal codes starting with 280" do + residence.postal_code = "28012" + residence.valid? + expect(residence.errors[:postal_code].size).to eq(0) + + residence.postal_code = "28023" + residence.valid? + expect(residence.errors[:postal_code].size).to eq(0) + end + + it "should not be valid with postal codes not starting with 280" do + residence.postal_code = "12345" + residence.valid? + expect(residence.errors[:postal_code].size).to eq(1) + + residence.postal_code = "13280" + residence.valid? + expect(residence.errors[:postal_code].size).to eq(1) + expect(residence.errors[:postal_code]).to include("In order to be verified, you must be registered in the municipality of Madrid.") + end + end + + end + +end diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index ce151eaee..968a80e62 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -30,29 +30,6 @@ describe Verification::Residence do expect(residence.errors[:date_of_birth]).to include("You must be at least 16 years old") end - describe "postal code" do - it "should be valid with postal codes starting with 280" do - residence.postal_code = "28012" - residence.valid? - expect(residence.errors[:postal_code].size).to eq(0) - - residence.postal_code = "28023" - residence.valid? - expect(residence.errors[:postal_code].size).to eq(0) - end - - it "should not be valid with postal codes not starting with 280" do - residence.postal_code = "12345" - residence.valid? - expect(residence.errors[:postal_code].size).to eq(1) - - residence.postal_code = "13280" - residence.valid? - expect(residence.errors[:postal_code].size).to eq(1) - expect(residence.errors[:postal_code]).to include("In order to be verified, you must be registered in the municipality of Madrid.") - end - end - it "should validate uniquness of document_number" do user = create(:user) residence.user = user