From d07f9312e556ab79139866d079fee51e9429a5ae Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 14 May 2019 11:49:34 +0200 Subject: [PATCH] Allow any configuration of required fields - Add the methods "parse_date_of_birth" and "parse_postal_code" to recover the correct position of their values depending on the configuration of the remote census. --- app/models/signature_sheet.rb | 21 +++++++++++++++++++-- spec/models/signature_sheet_spec.rb | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/models/signature_sheet.rb b/app/models/signature_sheet.rb index 672017989..c7d102dca 100644 --- a/app/models/signature_sheet.rb +++ b/app/models/signature_sheet.rb @@ -23,8 +23,8 @@ class SignatureSheet < ApplicationRecord def verify_signatures parsed_required_fields_to_verify_groups.each do |required_fields_to_verify| document_number = required_fields_to_verify[0] - date_of_birth = required_fields_to_verify[1] - postal_code = required_fields_to_verify[2] + date_of_birth = parse_date_of_birth(required_fields_to_verify) + postal_code = parse_postal_code(required_fields_to_verify) signature = signatures.where(document_number: document_number, date_of_birth: date_of_birth, @@ -41,4 +41,21 @@ class SignatureSheet < ApplicationRecord def signable_found errors.add(:signable_id, :not_found) if errors.messages[:signable].present? end + + private + + def parse_date_of_birth(required_fields_to_verify) + return required_fields_to_verify[1] if Setting.force_presence_date_of_birth? + nil + end + + def parse_postal_code(required_fields_to_verify) + if Setting.force_presence_date_of_birth? && Setting.force_presence_postal_code? + return required_fields_to_verify[2] + elsif Setting.force_presence_postal_code? + return required_fields_to_verify[1] + else + return nil + end + end end diff --git a/spec/models/signature_sheet_spec.rb b/spec/models/signature_sheet_spec.rb index 59bbc5a57..1a38d7444 100644 --- a/spec/models/signature_sheet_spec.rb +++ b/spec/models/signature_sheet_spec.rb @@ -118,6 +118,24 @@ describe SignatureSheet do Setting["remote_census.request.date_of_birth"] = nil end + it "creates signatures for each group with document_number and postal_code" do + Setting["remote_census.request.postal_code"] = "some.value" + + required_fields_to_verify = "123A, 28001; 456B, 28002" + signature_sheet = create(:signature_sheet, required_fields_to_verify: required_fields_to_verify) + signature_sheet.verify_signatures + + expect(Signature.count).to eq(2) + expect(Signature.first.document_number).to eq("123A") + expect(Signature.first.date_of_birth).to eq(nil) + expect(Signature.first.postal_code).to eq("28001") + expect(Signature.last.document_number).to eq("456B") + expect(Signature.last.date_of_birth).to eq(nil) + expect(Signature.last.postal_code).to eq("28002") + + Setting["remote_census.request.postal_code"] = nil + end + it "creates signatures for each group with document_number, postal_code and date_of_birth" do Setting["remote_census.request.date_of_birth"] = "some.value" Setting["remote_census.request.postal_code"] = "some.value"