Redefine postal code verification methods to use setting config parameter
This commit is contained in:
committed by
Javi Martín
parent
bcce43fd0f
commit
f4512b2117
@@ -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
|
||||
@@ -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": "",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -60,6 +60,7 @@ en:
|
||||
meta_keywords_description: 'Keywords <meta name="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.
|
||||
|
||||
@@ -60,6 +60,7 @@ es:
|
||||
meta_keywords_description: 'Palabras clave <meta name="keywords">, 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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user