uses year of birth instead of date of birth
This commit is contained in:
@@ -16,6 +16,6 @@ class Officing::ResidenceController < Officing::BaseController
|
||||
private
|
||||
|
||||
def residence_params
|
||||
params.require(:residence).permit(:document_number, :document_type, :date_of_birth)
|
||||
params.require(:residence).permit(:document_number, :document_type, :year_of_birth)
|
||||
end
|
||||
end
|
||||
@@ -1,22 +1,19 @@
|
||||
class Officing::Residence
|
||||
include ActiveModel::Model
|
||||
include ActiveModel::Dates
|
||||
include ActiveModel::Validations::Callbacks
|
||||
|
||||
attr_accessor :user, :officer, :document_number, :document_type, :date_of_birth
|
||||
attr_accessor :user, :officer, :document_number, :document_type, :year_of_birth
|
||||
|
||||
before_validation :call_census_api
|
||||
|
||||
validates_presence_of :document_number
|
||||
validates_presence_of :document_type
|
||||
validates_presence_of :date_of_birth
|
||||
validates_presence_of :year_of_birth
|
||||
|
||||
validate :allowed_age
|
||||
validate :residence_in_madrid
|
||||
|
||||
def initialize(attrs={})
|
||||
self.date_of_birth = parse_date('date_of_birth', attrs)
|
||||
attrs = remove_date('date_of_birth', attrs)
|
||||
super
|
||||
clean_document_number
|
||||
end
|
||||
@@ -62,7 +59,8 @@ class Officing::Residence
|
||||
end
|
||||
|
||||
def allowed_age
|
||||
return if errors[:date_of_birth].any?
|
||||
return if errors[:year_of_birth].any?
|
||||
return unless @census_api_response.valid?
|
||||
|
||||
unless allowed_age?
|
||||
errors.add(:date_of_birth, I18n.t('verification.residence.new.error_not_allowed_age'))
|
||||
@@ -70,7 +68,7 @@ class Officing::Residence
|
||||
end
|
||||
|
||||
def allowed_age?
|
||||
self.date_of_birth <= User.minimum_required_age.years.ago
|
||||
date_of_birth <= User.minimum_required_age.years.ago
|
||||
end
|
||||
|
||||
def geozone
|
||||
@@ -85,6 +83,10 @@ class Officing::Residence
|
||||
@census_api_response.gender
|
||||
end
|
||||
|
||||
def date_of_birth
|
||||
@census_api_response.date_of_birth
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def call_census_api
|
||||
@@ -93,7 +95,11 @@ class Officing::Residence
|
||||
|
||||
def residency_valid?
|
||||
@census_api_response.valid? &&
|
||||
@census_api_response.date_of_birth == date_of_birth
|
||||
@census_api_response.date_of_birth.year.to_s == year_of_birth.to_s
|
||||
end
|
||||
|
||||
def census_year_of_birth
|
||||
@census_api_response.date_of_birth.year
|
||||
end
|
||||
|
||||
def clean_document_number
|
||||
|
||||
@@ -14,9 +14,7 @@
|
||||
</div>
|
||||
|
||||
<div class="date-of-birth small-12 medium-6">
|
||||
<%= f.date_select :date_of_birth,
|
||||
prompt: true,
|
||||
start_year: 1900, end_year: 16.years.ago.year %>
|
||||
<%= f.text_field :year_of_birth %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-6">
|
||||
|
||||
@@ -470,7 +470,7 @@ FactoryGirl.define do
|
||||
user
|
||||
document_number
|
||||
document_type "1"
|
||||
date_of_birth Date.new(1980, 12, 31)
|
||||
year_of_birth "1980"
|
||||
end
|
||||
|
||||
factory :organization do
|
||||
|
||||
@@ -13,9 +13,9 @@ feature 'Residence' do
|
||||
click_link "Validate document"
|
||||
end
|
||||
|
||||
fill_in 'residence_document_number', with: "12345678Z"
|
||||
select 'DNI', from: 'residence_document_type'
|
||||
select_date '31-December-1980', from: 'residence_date_of_birth'
|
||||
fill_in 'residence_document_number', with: "12345678Z"
|
||||
fill_in 'residence_year_of_birth', with: '1980'
|
||||
|
||||
click_button 'Validate document'
|
||||
|
||||
@@ -31,16 +31,28 @@ feature 'Residence' do
|
||||
expect(page).to have_content /\d errors? prevented the verification of this document/
|
||||
end
|
||||
|
||||
scenario "Error on Census" do
|
||||
scenario "Error on Census (document number)" do
|
||||
within("#side_menu") do
|
||||
click_link "Validate document"
|
||||
end
|
||||
|
||||
fill_in 'residence_document_number', with: "12345678Z"
|
||||
select 'DNI', 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_document_number', with: "9999999A"
|
||||
fill_in 'residence_year_of_birth', with: '1980'
|
||||
|
||||
click_button 'Validate document'
|
||||
|
||||
expect(page).to have_content 'The Census was unable to verify this document'
|
||||
end
|
||||
|
||||
scenario "Error on Census (year of birth)" do
|
||||
within("#side_menu") do
|
||||
click_link "Validate document"
|
||||
end
|
||||
|
||||
select 'DNI', from: 'residence_document_type'
|
||||
fill_in 'residence_document_number', with: "12345678Z"
|
||||
fill_in 'residence_year_of_birth', with: '1981'
|
||||
|
||||
click_button 'Validate document'
|
||||
|
||||
|
||||
@@ -11,23 +11,33 @@ describe Officing::Residence do
|
||||
expect(residence).to be_valid
|
||||
end
|
||||
|
||||
describe "dates" do
|
||||
it "should be valid with a valid date of birth" do
|
||||
residence = Officing::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"1980"})
|
||||
expect(residence.errors[:date_of_birth].size).to eq(0)
|
||||
end
|
||||
|
||||
it "should not be valid without a date of birth" do
|
||||
residence = Officing::Residence.new({"date_of_birth(3i)"=>"", "date_of_birth(2i)"=>"", "date_of_birth(1i)"=>""})
|
||||
expect(residence).to_not be_valid
|
||||
expect(residence.errors[:date_of_birth]).to include("can't be blank")
|
||||
end
|
||||
it "should not be valid without a document number" do
|
||||
residence.document_number = nil
|
||||
expect(residence).to_not be_valid
|
||||
end
|
||||
|
||||
it "should validate user has allowed age" do
|
||||
residence = Officing::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"})
|
||||
it "should not be valid without a document type" do
|
||||
residence.document_type = nil
|
||||
expect(residence).to_not be_valid
|
||||
expect(residence.errors[:date_of_birth]).to include("You don't have the required age to participate")
|
||||
end
|
||||
|
||||
it "should not be valid without a year of birth" do
|
||||
residence.year_of_birth = nil
|
||||
expect(residence).to_not be_valid
|
||||
end
|
||||
|
||||
describe "allowed age" do
|
||||
it "should not be validate if user is under allowed age" do
|
||||
allow_any_instance_of(Officing::Residence).to receive(:date_of_birth).and_return(15.years.ago)
|
||||
expect(residence).to_not be_valid
|
||||
expect(residence.errors[:date_of_birth]).to include("You don't have the required age to participate")
|
||||
end
|
||||
|
||||
it "should be validate if user is above allowed age" do
|
||||
allow_any_instance_of(Officing::Residence).to receive(:date_of_birth).and_return(16.years.ago)
|
||||
expect(residence).to be_valid
|
||||
expect(residence.errors[:date_of_birth]).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user