From a150f2161e2756e2f4a25d76f852b6987513cf02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Thu, 17 Oct 2019 16:05:40 +0200 Subject: [PATCH] Validate inclusion of document type in allowed document types * Add custom message for inclusion validation to include the allowed values. * Force user to choose document_type from select lik the one shown at verification form. * Convert stored document_type to a human readable text --- app/models/local_census_record.rb | 1 + app/views/admin/local_census_records/_form.html.erb | 2 +- .../local_census_records/_local_census_record.html.erb | 2 +- config/locales/en/activerecord.yml | 4 ++++ config/locales/es/activerecord.yml | 4 ++++ .../admin/local_census_records/imports_spec.rb | 4 ++-- spec/features/admin/local_census_records_spec.rb | 8 ++++---- .../files/local_census_records/import/invalid.csv | 7 ++++--- .../files/local_census_records/import/valid.csv | 8 ++++---- spec/models/local_census_record_spec.rb | 10 ++++++++-- spec/models/local_census_records/import_spec.rb | 10 +++++----- 11 files changed, 38 insertions(+), 22 deletions(-) diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb index 71ead77a7..fad2bfeb3 100644 --- a/app/models/local_census_record.rb +++ b/app/models/local_census_record.rb @@ -3,6 +3,7 @@ class LocalCensusRecord < ApplicationRecord validates :document_number, presence: true validates :document_type, presence: true + validates :document_type, inclusion: { in: ["1", "2", "3"], allow_blank: true } validates :date_of_birth, presence: true validates :postal_code, presence: true validates :document_number, uniqueness: { scope: :document_type } diff --git a/app/views/admin/local_census_records/_form.html.erb b/app/views/admin/local_census_records/_form.html.erb index 046814aab..c84bb997c 100644 --- a/app/views/admin/local_census_records/_form.html.erb +++ b/app/views/admin/local_census_records/_form.html.erb @@ -3,7 +3,7 @@
- <%= f.text_field :document_type %> + <%= f.select :document_type, document_types, prompt: "" %>
diff --git a/app/views/admin/local_census_records/_local_census_record.html.erb b/app/views/admin/local_census_records/_local_census_record.html.erb index e9fd12582..e8bd618f3 100644 --- a/app/views/admin/local_census_records/_local_census_record.html.erb +++ b/app/views/admin/local_census_records/_local_census_record.html.erb @@ -1,6 +1,6 @@ - <%= local_census_record.document_type %> + <%= humanize_document_type(local_census_record.document_type) %> <%= local_census_record.document_number %> diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml index e4acbae92..aae364b39 100644 --- a/config/locales/en/activerecord.yml +++ b/config/locales/en/activerecord.yml @@ -514,6 +514,10 @@ en: invalid_date_range: must be on or after the draft start date allegations_end_date: invalid_date_range: must be on or after the comments start date + local_census_record: + attributes: + document_type: + inclusion: is not included in the list, allowed values are 1 for DNI, 2 for passport and 3 for residence card. proposal: attributes: tag_list: diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml index 69c5f1956..5a3ed55cf 100644 --- a/config/locales/es/activerecord.yml +++ b/config/locales/es/activerecord.yml @@ -516,6 +516,10 @@ es: invalid_date_range: tiene que ser igual o posterior a la fecha de inicio del borrador allegations_end_date: invalid_date_range: tiene que ser igual o posterior a la fecha de inicio de los comentarios + local_census_record: + attributes: + document_type: + inclusion: no está incluido en la lista, los valores permitidos son 1 para DNI, 2 para pasaporte y 3 para tarjeta de residencia. proposal: attributes: tag_list: diff --git a/spec/features/admin/local_census_records/imports_spec.rb b/spec/features/admin/local_census_records/imports_spec.rb index a45873189..62e92c43d 100644 --- a/spec/features/admin/local_census_records/imports_spec.rb +++ b/spec/features/admin/local_census_records/imports_spec.rb @@ -69,8 +69,8 @@ describe "Imports" do click_button "Save" end - expect(page).to have_content "Errored rows (4)" - expect(page).to have_selector("#invalid-local-census-records tbody tr", count: 4) + expect(page).to have_content "Errored rows (5)" + expect(page).to have_selector("#invalid-local-census-records tbody tr", count: 5) end scenario "Should show error messages inside cells at errored group" do diff --git a/spec/features/admin/local_census_records_spec.rb b/spec/features/admin/local_census_records_spec.rb index 6b137bb26..2ae2348c8 100644 --- a/spec/features/admin/local_census_records_spec.rb +++ b/spec/features/admin/local_census_records_spec.rb @@ -18,7 +18,7 @@ describe "Admin local census records" do scenario "Should show existing local census records" do visit admin_local_census_records_path - expect(page).to have_content(local_census_record.document_type) + expect(page).to have_content("DNI") expect(page).to have_content(local_census_record.document_number) expect(page).to have_content(local_census_record.date_of_birth) expect(page).to have_content(local_census_record.postal_code) @@ -85,7 +85,7 @@ describe "Admin local census records" do scenario "Should show successful notice after create valid record" do visit new_admin_local_census_record_path - fill_in :local_census_record_document_type, with: "DNI" + select "DNI", from: :local_census_record_document_type fill_in :local_census_record_document_number, with: "#DOCUMENT" select "1982", from: :local_census_record_date_of_birth_1i select "July", from: :local_census_record_date_of_birth_2i @@ -117,7 +117,7 @@ describe "Admin local census records" do scenario "Should show successful notice after valid update" do visit edit_admin_local_census_record_path(local_census_record) - fill_in :local_census_record_document_type, with: "NIE" + select "Passport", from: :local_census_record_document_type fill_in :local_census_record_document_number, with: "#NIE_NUMBER" select "1982", from: :local_census_record_date_of_birth_1i select "August", from: :local_census_record_date_of_birth_2i @@ -126,7 +126,7 @@ describe "Admin local census records" do click_on "Save" expect(page).to have_content "Local census record updated successfully!" - expect(page).to have_content "NIE" + expect(page).to have_content "Passport" expect(page).to have_content "#NIE_NUMBER" expect(page).to have_content "1982-08-08" expect(page).to have_content "07007" diff --git a/spec/fixtures/files/local_census_records/import/invalid.csv b/spec/fixtures/files/local_census_records/import/invalid.csv index 29750d4a7..4341ad954 100644 --- a/spec/fixtures/files/local_census_records/import/invalid.csv +++ b/spec/fixtures/files/local_census_records/import/invalid.csv @@ -1,5 +1,6 @@ "document_type","document_number","date_of_birth","postal_code" ,"44556678T","07/08/1984",7008 -"DNI",,"07/08/1985",7009 -"Passport","22556678T",,7010 -"NIE","X11556678","07/08/1987", +"1",,"07/08/1985",7009 +"2","22556678T",,7010 +"3","X11556678","07/08/1987", +"DNI","Z11556678","07/08/1987",7011 diff --git a/spec/fixtures/files/local_census_records/import/valid.csv b/spec/fixtures/files/local_census_records/import/valid.csv index 12cc4bfe8..148faad3f 100644 --- a/spec/fixtures/files/local_census_records/import/valid.csv +++ b/spec/fixtures/files/local_census_records/import/valid.csv @@ -1,5 +1,5 @@ "document_type","document_number","date_of_birth","postal_code" -"DNI","44556678T","07/08/1984",7008 -"DNI","33556678T","07/08/1985",7008 -"DNI","22556678T","07/08/1986",7008 -"NIE","X11556678","07/08/1987",7008 +"1","44556678T","07/08/1984",7008 +"1","33556678T","07/08/1985",7008 +"1","22556678T","07/08/1986",7008 +"2","X11556678","07/08/1987",7008 diff --git a/spec/models/local_census_record_spec.rb b/spec/models/local_census_record_spec.rb index 4f4beb854..4cf88a19e 100644 --- a/spec/models/local_census_record_spec.rb +++ b/spec/models/local_census_record_spec.rb @@ -20,6 +20,12 @@ describe LocalCensusRecord do expect(local_census_record).not_to be_valid end + it "is not valid when value is not included in allowed document types" do + local_census_record.document_type = "NIE" + + expect(local_census_record).not_to be_valid + end + it "is not valid without date_of_birth" do local_census_record.date_of_birth = nil @@ -33,9 +39,9 @@ describe LocalCensusRecord do end it "is not valid when a record already exists with same document_number and document_type" do - create(:local_census_record, document_number: "#DOC_NUMBER", document_type: "#DOC_TYPE") + create(:local_census_record, document_number: "#DOC_NUMBER", document_type: "1") local_census_record = build(:local_census_record, document_number: "#DOC_NUMBER", - document_type: "#DOC_TYPE") + document_type: "1") expect(local_census_record).not_to be_valid end diff --git a/spec/models/local_census_records/import_spec.rb b/spec/models/local_census_records/import_spec.rb index 301c6e16d..72761e2e5 100644 --- a/spec/models/local_census_records/import_spec.rb +++ b/spec/models/local_census_records/import_spec.rb @@ -49,7 +49,7 @@ describe LocalCensusRecords::Import do local_census_record = LocalCensusRecord.find_by(document_number: "X11556678") expect(local_census_record).not_to be_nil - expect(local_census_record.document_type).to eq("NIE") + expect(local_census_record.document_type).to eq("2") expect(local_census_record.document_number).to eq("X11556678") expect(local_census_record.date_of_birth).to eq(Date.parse("07/08/1987")) expect(local_census_record.postal_code).to eq("7008") @@ -69,11 +69,11 @@ describe LocalCensusRecords::Import do import.save! - invalid_records_document_types = [nil, "DNI", "Passport", "NIE"] - invalid_records_document_numbers = ["44556678T", nil, "22556678T", "X11556678"] + invalid_records_document_types = [nil, "1", "2", "3", "DNI"] + invalid_records_document_numbers = ["44556678T", nil, "22556678T", "X11556678", "Z11556678"] invalid_records_date_of_births = [Date.parse("07/08/1984"), Date.parse("07/08/1985"), nil, - Date.parse("07/08/1987")] - invalid_records_postal_codes = ["7008", "7009", "7010", nil] + Date.parse("07/08/1987"), Date.parse("07/08/1987")] + invalid_records_postal_codes = ["7008", "7009", "7010", nil, "7011"] expect(import.invalid_records.map(&:document_type)) .to eq(invalid_records_document_types) expect(import.invalid_records.map(&:document_number))