diff --git a/app/models/custom/verification/residence.rb b/app/models/custom/verification/residence.rb deleted file mode 100644 index 598c71c38..000000000 --- a/app/models/custom/verification/residence.rb +++ /dev/null @@ -1,26 +0,0 @@ -require_dependency Rails.root.join("app", "models", "verification", "residence").to_s - -class Verification::Residence - validate :local_postal_code - validate :local_residence - - def local_postal_code - errors.add(:postal_code, I18n.t("verification.residence.new.error_not_allowed_postal_code")) unless valid_postal_code? - end - - def local_residence - return if errors.any? - - unless residency_valid? - errors.add(:local_residence, 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/setting.rb b/app/models/setting.rb index 7fe170e33..8c813dcc2 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -177,6 +177,7 @@ class Setting < ApplicationRecord "machine_learning.comments_summary": false, "machine_learning.related_content": false, "machine_learning.tags": false, + "postal_codes": "00001-99999", "remote_census.general.endpoint": "", "remote_census.request.method_name": "", "remote_census.request.structure": "", diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 9ca30b72c..062e191a1 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -17,6 +17,9 @@ class Verification::Residence validate :allowed_age validate :document_number_uniqueness + validate :local_postal_code + validate :local_residence + def initialize(attrs = {}) self.date_of_birth = parse_date("date_of_birth", attrs) attrs = remove_date("date_of_birth", attrs) @@ -73,6 +76,20 @@ class Verification::Residence @census_data.gender end + def local_postal_code + errors.add(:postal_code, I18n.t("verification.residence.new.error_not_allowed_postal_code")) unless valid_postal_code? + end + + def local_residence + return if errors.any? + + unless residency_valid? + errors.add(:local_residence, false) + store_failed_attempt + Lock.increase_tries(user) + end + end + private def retrieve_census_data @@ -88,4 +105,10 @@ class Verification::Residence def clean_document_number self.document_number = document_number.gsub(/[^a-z0-9]+/i, "").upcase if document_number.present? end + + def valid_postal_code? + postal_codes = Setting["postal_codes"].gsub("-", "..").split(",") + postal_codes = postal_codes.map { |i| eval(i) }.map { |i| i.is_a?(Range) ? i.to_a : [i] }.flatten + postal_code.to_i.in?(postal_codes) + end end diff --git a/config/locales/en/settings.yml b/config/locales/en/settings.yml index 24679d5a0..d94498cbf 100644 --- a/config/locales/en/settings.yml +++ b/config/locales/en/settings.yml @@ -60,6 +60,7 @@ en: meta_keywords_description: 'Keywords , used to improve SEO' min_age_to_participate: Minimum age needed to participate min_age_to_participate_description: "Users over this age can participate in all processes where a user verified account is needed" + postal_codes: "Postal Codes" proposals: successful_proposal_id: Successful proposal successful_proposal_id_description: This proposal is used as a reference for a successful proposal in supports number and will be displayed in the dashboard graph. diff --git a/config/locales/es/settings.yml b/config/locales/es/settings.yml index 820aa25f8..d37261848 100644 --- a/config/locales/es/settings.yml +++ b/config/locales/es/settings.yml @@ -60,6 +60,7 @@ es: meta_keywords_description: 'Palabras clave , utilizadas para mejorar el SEO' min_age_to_participate: Edad mínima para participar min_age_to_participate_description: "Los usuarios mayores de esta edad podrán participar en todos los procesos donde se necesite una cuenta verificada" + postal_codes: "Códigos Postales" proposals: successful_proposal_id: Propuesta exitosa successful_proposal_id_description: Esta propuesta se utiliza como referencia de una propuesta exitosa en número de apoyos y se mostrará en el gráfico del panel de control diff --git a/spec/models/custom/verification/residence_spec.rb b/spec/models/custom/verification/residence_spec.rb deleted file mode 100644 index 493e60b91..000000000 --- a/spec/models/custom/verification/residence_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "rails_helper" - -describe Verification::Residence do - let(:residence) { build(:verification_residence, document_number: "12345678Z") } - - describe "verification" do - describe "postal code" do - it "is valid with postal codes starting with 280" do - residence.postal_code = "28012" - residence.valid? - expect(residence.errors[:postal_code]).to be_empty - - residence.postal_code = "28023" - residence.valid? - expect(residence.errors[:postal_code]).to be_empty - end - - it "is not 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]).to eq ["In order to be verified, you must be registered."] - end - end - end -end diff --git a/spec/models/verification/residence_spec.rb b/spec/models/verification/residence_spec.rb index f34becd1f..bc6995f59 100644 --- a/spec/models/verification/residence_spec.rb +++ b/spec/models/verification/residence_spec.rb @@ -46,6 +46,49 @@ describe Verification::Residence do residence.terms_of_service = nil expect(residence).not_to be_valid end + + describe "postal code" do + before { Setting["postal_codes"] = "28001-28100,28200" } + + it "is valid with postal codes included in settings" do + residence.postal_code = "28012" + residence.valid? + + expect(residence.errors[:postal_code]).to be_empty + + residence.postal_code = "28001" + residence.valid? + + expect(residence.errors[:postal_code]).to be_empty + + residence.postal_code = "28100" + residence.valid? + + expect(residence.errors[:postal_code]).to be_empty + + residence.postal_code = "28200" + residence.valid? + + expect(residence.errors[:postal_code]).to be_empty + end + + it "is not valid with postal codes not included in settings" do + residence.postal_code = "12345" + residence.valid? + + expect(residence.errors[:postal_code].size).to eq(1) + + residence.postal_code = "28000" + residence.valid? + + expect(residence.errors[:postal_code].size).to eq(1) + + residence.postal_code = "28101" + residence.valid? + + expect(residence.errors[:postal_code]).to eq ["In order to be verified, you must be registered."] + end + end end describe "new" do diff --git a/spec/system/verification/residence_spec.rb b/spec/system/verification/residence_spec.rb index 7b72e5523..25bdb70df 100644 --- a/spec/system/verification/residence_spec.rb +++ b/spec/system/verification/residence_spec.rb @@ -102,7 +102,7 @@ describe "Residence" do 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" + fill_in "residence_postal_code", with: "00000" check "residence_terms_of_service" click_button "Verify residence"