From ea9ea77219a21d66a44577678f6210918f474656 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 12:34:00 +0200 Subject: [PATCH 1/7] adds consistent indentation --- spec/models/residence_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 1d623186e..9ccc3c2f3 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -24,9 +24,9 @@ describe Verification::Residence do end it "should validate user has allowed age" do - residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"}) - expect(residence).to_not be_valid - expect(residence.errors[:date_of_birth]).to include("You need yo be at least 16 years old") + residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"}) + expect(residence).to_not be_valid + expect(residence.errors[:date_of_birth]).to include("You need yo be at least 16 years old") end it "should validate uniquness of document_number" do From 6ccef97d4eb507e5ff38f98ce60c4d25d0736cce Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 12:34:19 +0200 Subject: [PATCH 2/7] adds valid postal codes --- app/models/verification/residence.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 57bafa9a4..2587346b8 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -69,4 +69,8 @@ class Verification::Residence self.document_number = self.document_number.gsub(/[^a-z0-9]+/i, "").upcase unless self.document_number.blank? end + def self.valid_postal_codes + %w(28001 28002 28003 28004 28005 28006 28007 28008 28009 28010 28011 28012 28013 28014 28015 28016 28017 28018 28019 28020 28021 28022 28023 28024 28025 28026 28027 28028 28029 28030 28031 28032 28033 28034 28035 28036 28037 28038 28039 28040 28041 28042 28043 28044 28045 28046 28047 28048 28049 28050 28051 28052 28053 28054 28055 28790) + end + end From 1a6ee424d082c900c314da04b434fba905ed2409 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 20:09:39 +0200 Subject: [PATCH 3/7] refactors postal code validation --- app/models/verification/residence.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 2587346b8..793054891 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -69,8 +69,8 @@ class Verification::Residence self.document_number = self.document_number.gsub(/[^a-z0-9]+/i, "").upcase unless self.document_number.blank? end - def self.valid_postal_codes - %w(28001 28002 28003 28004 28005 28006 28007 28008 28009 28010 28011 28012 28013 28014 28015 28016 28017 28018 28019 28020 28021 28022 28023 28024 28025 28026 28027 28028 28029 28030 28031 28032 28033 28034 28035 28036 28037 28038 28039 28040 28041 28042 28043 28044 28045 28046 28047 28048 28049 28050 28051 28052 28053 28054 28055 28790) + def valid_postal_code? + postal_code.match /^280/ end end From 1d1b7b86d2c57ac28ba777c9b0220b6dafd4a105 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 20:54:56 +0200 Subject: [PATCH 4/7] adds validation for postal codes in Madrid --- app/models/verification/residence.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 793054891..e3f5beefc 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -14,6 +14,7 @@ class Verification::Residence validate :allowed_age validate :document_number_uniqueness + validate :postal_code_in_madrid validate :residence_in_madrid def initialize(attrs={}) @@ -30,10 +31,19 @@ class Verification::Residence residence_verified_at: Time.now) end + def allowed_age + return if errors[:date_of_birth].any? + errors.add(:date_of_birth, I18n.t('verification.residence.new.error_not_allowed_age')) unless self.date_of_birth <= 16.years.ago + end + def document_number_uniqueness 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? self.date_of_birth = date_to_string(date_of_birth) @@ -48,11 +58,6 @@ class Verification::Residence self.date_of_birth = string_to_date(date_of_birth) end - def allowed_age - return if errors[:date_of_birth].any? - errors.add(:date_of_birth, I18n.t('verification.residence.new.error_not_allowed_age')) unless self.date_of_birth <= 16.years.ago - end - def store_failed_attempt FailedCensusCall.create({ user: user, From ddb2ab1c2a07589e0c3546bc6895b7891e28f531 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 20:55:04 +0200 Subject: [PATCH 5/7] adds translations --- config/locales/verification.en.yml | 1 + config/locales/verification.es.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/config/locales/verification.en.yml b/config/locales/verification.en.yml index df6054628..dcd080e64 100644 --- a/config/locales/verification.en.yml +++ b/config/locales/verification.en.yml @@ -23,6 +23,7 @@ en: form_errors: "prevented your residence verification" error_verifying_census: "The census of the city of Madrid could not verify your information. Pero revise de information and try again or get in touch with us." error_not_allowed_age: "You need yo be at least 16 years old" + error_not_allowed_postal_code: "Please, to verify your account you need to be in the census of the Madrid town." create: flash: success: "Residence verified" diff --git a/config/locales/verification.es.yml b/config/locales/verification.es.yml index 5b5e0c915..a6a218b2d 100644 --- a/config/locales/verification.es.yml +++ b/config/locales/verification.es.yml @@ -23,6 +23,7 @@ es: form_errors: "evitaron verificar tu residencia" error_verifying_census: "El Padrón de Madrid no pudo verificar tu información. Revisa la información ó ponte en contacto con nosotros." error_not_allowed_age: "Hay que tener al menos 16 años" + error_not_allowed_postal_code: "Por favor, para verificarte debes estar empadronado en el municipio de Madrid." create: flash: success: "Residencia verificada" From 3098fe3baaf2ee17919c472e51296c95052e889f Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 20:55:28 +0200 Subject: [PATCH 6/7] adds specs --- spec/features/verification/residence_spec.rb | 20 ++++++++++++++++++++ spec/models/residence_spec.rb | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/spec/features/verification/residence_spec.rb b/spec/features/verification/residence_spec.rb index 07fbdcd35..7bdd44425 100644 --- a/spec/features/verification/residence_spec.rb +++ b/spec/features/verification/residence_spec.rb @@ -32,6 +32,26 @@ feature 'Residence' do expect(page).to have_content /\d errors? prevented your residence verification/ end + scenario 'Error on postal code not in Madrid census' do + user = create(:user) + login_as(user) + + visit account_path + click_link 'Verify my account' + + fill_in 'residence_document_number', with: "12345678Z" + select 'Spanish ID', from: 'residence_document_type' + select '1997', from: 'residence_date_of_birth_1i' + select 'January', from: 'residence_date_of_birth_2i' + select '1', from: 'residence_date_of_birth_3i' + fill_in 'residence_postal_code', with: '12345' + check 'residence_terms_of_service' + + click_button 'Verify residence' + + expect(page).to have_content 'Please, to verify your account you need to be in the census of the Madrid town.' + end + scenario 'Error on Madrid census' do user = create(:user) login_as(user) diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 9ccc3c2f3..619e6b7d5 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -29,6 +29,25 @@ describe Verification::Residence do expect(residence.errors[:date_of_birth]).to include("You need yo 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" + expect(residence.errors[:postal_code].size).to eq(0) + + residence.postal_code = "28023" + 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" + expect(residence.errors[:postal_code].size).to eq(1) + + residence.postal_code = "13280" + expect(residence.errors[:postal_code].size).to eq(1) + expect(residence.errors[:postal_code]).to include("Please, to verify your account you need to be in the census of the Madrid town.") + end + end + it "should validate uniquness of document_number" do user = create(:user) residence.user = user From 1dee45337b569eabb7ceb1e791465b022c133c4d Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 23 Sep 2015 21:08:21 +0200 Subject: [PATCH 7/7] fixes specs --- app/models/verification/residence.rb | 2 +- spec/factories.rb | 2 +- spec/models/residence_spec.rb | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index e3f5beefc..8650236ad 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -75,7 +75,7 @@ class Verification::Residence end def valid_postal_code? - postal_code.match /^280/ + postal_code =~ /^280/ end end diff --git a/spec/factories.rb b/spec/factories.rb index cda9c01a8..6f38b1502 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -42,7 +42,7 @@ FactoryGirl.define do terms_of_service '1' trait :invalid do - postal_code "12345" + postal_code "28001" end end diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 619e6b7d5..55be14bc1 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -32,17 +32,21 @@ describe Verification::Residence 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("Please, to verify your account you need to be in the census of the Madrid town.") end @@ -94,7 +98,7 @@ describe Verification::Residence do describe "tries" do it "should increase tries after a call to the Census" do - residence.postal_code = "12345" + residence.postal_code = "28011" residence.valid? expect(residence.user.lock.tries).to eq(1) end @@ -117,7 +121,7 @@ describe Verification::Residence do document_number: "12345678Z", document_type: "1", date_of_birth: Date.new(1980, 12, 31), - postal_code: "12345" + postal_code: "28001" }) end end