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"