From 626d2b3c2bc76dcb713675db2bb0383feba3f215 Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 14 May 2019 11:47:55 +0200 Subject: [PATCH] Allow to Signature works with CustomCensusAPI - Send new fields to CensusCaller call method to allow use on CustomCensusAPI --- app/models/signature.rb | 2 +- spec/features/admin/signature_sheets_spec.rb | 56 +++++++++++++++++ spec/models/signature_sheet_spec.rb | 65 ++++++++++++++++++++ spec/models/signature_spec.rb | 31 ++++++++++ 4 files changed, 153 insertions(+), 1 deletion(-) diff --git a/app/models/signature.rb b/app/models/signature.rb index e8328d354..a3b58fc08 100644 --- a/app/models/signature.rb +++ b/app/models/signature.rb @@ -71,7 +71,7 @@ class Signature < ApplicationRecord def in_census? document_types.detect do |document_type| - response = CensusCaller.new.call(document_type, document_number, nil, nil) + response = CensusCaller.new.call(document_type, document_number, date_of_birth, postal_code) if response.valid? @census_api_response = response true diff --git a/spec/features/admin/signature_sheets_spec.rb b/spec/features/admin/signature_sheets_spec.rb index 4935eca28..92514c24a 100644 --- a/spec/features/admin/signature_sheets_spec.rb +++ b/spec/features/admin/signature_sheets_spec.rb @@ -76,6 +76,62 @@ describe "Signature sheets" do end + context "Create throught all required_fields_to_verify of custom census api" do + + before do + Setting["feature.remote_census"] = true + Setting["remote_census.request.date_of_birth"] = "some.value" + Setting["remote_census.request.postal_code"] = "some.value" + access_user_data = "get_habita_datos_response.get_habita_datos_return.datos_habitante.item" + access_residence_data = "get_habita_datos_response.get_habita_datos_return.datos_vivienda.item" + Setting["remote_census.response.date_of_birth"] = "#{access_user_data}.fecha_nacimiento_string" + Setting["remote_census.response.postal_code"] = "#{access_residence_data}.codigo_postal" + Setting["remote_census.response.valid"] = access_user_data + end + + after do + Setting["feature.remote_census"] = nil + Setting["remote_census.request.date_of_birth"] = nil + Setting["remote_census.request.postal_code"] = nil + end + + scenario "Proposal" do + proposal = create(:proposal) + visit new_admin_signature_sheet_path + + select "Citizen proposal", from: "signature_sheet_signable_type" + fill_in "signature_sheet_signable_id", with: proposal.id + fill_in "signature_sheet_required_fields_to_verify", with: "12345678Z, 31/12/1980, 28013; 99999999Z, 31/12/1980, 28013" + click_button "Create signature sheet" + + expect(page).to have_content "Signature sheet created successfully" + + visit proposal_path(proposal) + + expect(page).to have_content "1 support" + end + + scenario "Budget Investment" do + investment = create(:budget_investment) + budget = investment.budget + budget.update(phase: "selecting") + + visit new_admin_signature_sheet_path + + select "Investment", from: "signature_sheet_signable_type" + fill_in "signature_sheet_signable_id", with: investment.id + fill_in "signature_sheet_required_fields_to_verify", with: "12345678Z, 31/12/1980, 28013; 99999999Z, 31/12/1980, 28013" + click_button "Create signature sheet" + + expect(page).to have_content "Signature sheet created successfully" + + visit budget_investment_path(budget, investment) + + expect(page).to have_content "1 support" + end + + end + scenario "Errors on create" do visit new_admin_signature_sheet_path diff --git a/spec/models/signature_sheet_spec.rb b/spec/models/signature_sheet_spec.rb index c44697bce..59bbc5a57 100644 --- a/spec/models/signature_sheet_spec.rb +++ b/spec/models/signature_sheet_spec.rb @@ -75,6 +75,71 @@ describe SignatureSheet do expect(signature_sheet.processed).to eq(true) end + + context "with remote census active" do + + before do + Setting["feature.remote_census"] = true + end + + after do + Setting["feature.remote_census"] = nil + end + + it "creates signatures for each group with document_number" do + required_fields_to_verify = "123A; 456B" + 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(nil) + expect(Signature.last.document_number).to eq("456B") + expect(Signature.last.date_of_birth).to eq(nil) + expect(Signature.last.postal_code).to eq(nil) + end + + it "creates signatures for each group with document_number and date_of_birth" do + Setting["remote_census.request.date_of_birth"] = "some.value" + + required_fields_to_verify = "123A, 01/01/1980; 456B, 01/02/1980" + 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(Date.parse("01/01/1980")) + expect(Signature.first.postal_code).to eq(nil) + expect(Signature.last.document_number).to eq("456B") + expect(Signature.last.date_of_birth).to eq(Date.parse("01/02/1980")) + expect(Signature.last.postal_code).to eq(nil) + + Setting["remote_census.request.date_of_birth"] = 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" + + required_fields_to_verify = "123A, 01/01/1980, 28001; 456B, 01/02/1980, 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(Date.parse("01/01/1980")) + expect(Signature.first.postal_code).to eq("28001") + expect(Signature.last.document_number).to eq("456B") + expect(Signature.last.date_of_birth).to eq(Date.parse("01/02/1980")) + expect(Signature.last.postal_code).to eq("28002") + + Setting["remote_census.request.date_of_birth"] = nil + Setting["remote_census.request.postal_code"] = nil + end + + end + end describe "#parsed_required_fields_to_verify" do diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb index bc7c81968..240445265 100644 --- a/spec/models/signature_spec.rb +++ b/spec/models/signature_spec.rb @@ -242,6 +242,37 @@ describe Signature do end + describe "document in census throught CustomCensusApi" do + + before do + Setting["feature.remote_census"] = true + Setting["remote_census.request.date_of_birth"] = "some.value" + Setting["remote_census.request.postal_code"] = "some.value" + access_user_data = "get_habita_datos_response.get_habita_datos_return.datos_habitante.item" + access_residence_data = "get_habita_datos_response.get_habita_datos_return.datos_vivienda.item" + Setting["remote_census.response.date_of_birth"] = "#{access_user_data}.fecha_nacimiento_string" + Setting["remote_census.response.postal_code"] = "#{access_residence_data}.codigo_postal" + Setting["remote_census.response.valid"] = access_user_data + end + + after do + Setting["feature.remote_census"] = nil + Setting["remote_census.request.date_of_birth"] = nil + Setting["remote_census.request.postal_code"] = nil + end + + it "calls assign_vote_to_user" do + signature = create(:signature, document_number: "12345678Z", + date_of_birth: "31/12/1980", + postal_code: "28013") + + expect_any_instance_of(Signature).to receive(:assign_vote_to_user).exactly(1).times + + signature.verify + end + + end + describe "document not in census" do it "does not call assign_vote_to_user" do