[FIX #589] Force birthdate format when saving

This commit is contained in:
Mathieu Magnin 2017-07-25 17:26:40 +02:00
parent 1aabc6c82b
commit 03fde0a502
5 changed files with 25 additions and 16 deletions

View file

@ -191,17 +191,16 @@ class Users::DossiersController < UsersController
def update_params_with_formatted_birthdate
editable_params = update_params
# If the user was shown a date input field (if its browser supports it),
# the returned param will follow the YYYY-MM-DD pattern, which we need
# do convert to the DD/MM/YYYY pattern we use
if editable_params &&
editable_params[:individual_attributes] &&
editable_params[:individual_attributes][:birthdate] &&
editable_params[:individual_attributes][:birthdate] =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/
editable_params[:individual_attributes][:birthdate]
original_birthdate = editable_params[:individual_attributes][:birthdate]
formatted_birthdate = I18n.l(original_birthdate.to_date, format: '%d/%m/%Y')
editable_params[:individual_attributes][:birthdate] = formatted_birthdate
iso_date = begin
Date.parse(editable_params[:individual_attributes][:birthdate]).iso8601
rescue
nil
end
editable_params[:individual_attributes][:birthdate] = iso_date
end
editable_params

View file

@ -2,4 +2,5 @@ class Individual < ActiveRecord::Base
belongs_to :dossier
validates_uniqueness_of :dossier_id
validates :birthdate, format: { with: /\A\d{4}\-\d{2}\-\d{2}\z/, message: "La date n'est pas au format AAAA-MM-JJ" }, allow_nil: true
end

View file

@ -358,7 +358,9 @@ describe Users::DossiersController, type: :controller do
end
describe 'PUT #update' do
let(:params) { {id: dossier_id, dossier: {id: dossier_id, autorisation_donnees: autorisation_donnees}} }
let(:params) { { id: dossier_id, dossier: { id: dossier_id, autorisation_donnees: autorisation_donnees, individual_attributes: individual_params } } }
let(:individual_params) { { gender: 'M.', nom: 'Julien', prenom: 'Xavier', birthdate: birthdate } }
let(:birthdate) { '20/01/1991' }
subject { put :update, params: params }
before do
@ -367,8 +369,7 @@ describe Users::DossiersController, type: :controller do
end
context 'when procedure is for individual' do
let(:params) { {id: dossier_id, dossier: {id: dossier_id, autorisation_donnees: '1', individual_attributes: individual_params}} }
let(:individual_params) { {gender: 'M.', nom: 'Julien', prenom: 'Xavier', birthdate: '20/01/1991'} }
let(:autorisation_donnees) { "1" }
let(:procedure) { create(:procedure, :published, for_individual: true) }
before do
@ -378,8 +379,16 @@ describe Users::DossiersController, type: :controller do
it { expect(dossier.individual.gender).to eq 'M.' }
it { expect(dossier.individual.nom).to eq 'Julien' }
it { expect(dossier.individual.prenom).to eq 'Xavier' }
it { expect(dossier.individual.birthdate).to eq '20/01/1991' }
it { expect(dossier.individual.birthdate).to eq '1991-01-20' }
it { expect(dossier.procedure.for_individual).to eq true }
context "and birthdate is ISO (YYYY-MM-DD) formatted" do
let(:birthdate) { "1991-11-01" }
before do
dossier.reload
end
it { expect(dossier.individual.birthdate).to eq '1991-11-01' }
end
end
context 'when Checkbox is checked' do
@ -411,7 +420,7 @@ describe Users::DossiersController, type: :controller do
context 'when Checkbox is not checked' do
let(:autorisation_donnees) { '0' }
it 'uses flash alert to display message' do
expect(flash[:alert]).to have_content('Les conditions sont obligatoires.')
expect(flash[:alert]).to have_content('La validation des conditions d\'utilisation est obligatoire')
end
it "doesn't update dossier autorisation_donnees" do

View file

@ -3,6 +3,6 @@ FactoryGirl.define do
gender 'M.'
nom 'Julien'
prenom 'Xavier'
birthdate '20/01/1991'
birthdate '1991-11-01'
end
end

View file

@ -25,7 +25,7 @@ feature 'As a User I wanna create a dossier' do
page.find_by_id('etape_suivante').click
fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1'
page.find_by_id('suivant').click
expect(user.dossiers.first.individual.birthdate).to eq("14/10/1987")
expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14")
expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s), only_path: true)
end
@ -36,7 +36,7 @@ feature 'As a User I wanna create a dossier' do
page.find_by_id('etape_suivante').click
fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1'
page.find_by_id('suivant').click
expect(user.dossiers.first.individual.birthdate).to eq("14/10/1987")
expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14")
expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s), only_path: true)
end
end