Redefine postal code verification methods to use setting config parameter

This commit is contained in:
Laura Concepción Rodríguez
2017-11-13 14:01:37 +00:00
committed by Javi Martín
parent bcce43fd0f
commit f4512b2117
8 changed files with 70 additions and 56 deletions

View File

@@ -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

View File

@@ -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": "",

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"