Merge pull request #4188 from rockandror/remote_census_api_spec
Refactor RemoteCensusApi spec to use a XML response
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
class CensusCaller
|
||||
def call(document_type, document_number, date_of_birth, postal_code)
|
||||
return Response.new if document_number.blank? || document_type.blank?
|
||||
|
||||
if Setting["feature.remote_census"].present?
|
||||
response = RemoteCensusApi.new.call(document_type, document_number, date_of_birth, postal_code)
|
||||
else
|
||||
@@ -9,4 +11,10 @@ class CensusCaller
|
||||
|
||||
response
|
||||
end
|
||||
|
||||
class Response
|
||||
def valid?
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
module DocumentParser
|
||||
def get_document_number_variants(document_type, document_number)
|
||||
return [] if document_number.blank?
|
||||
|
||||
# Delete all non-alphanumerics
|
||||
document_number = document_number.to_s.gsub(/[^0-9A-Za-z]/i, "")
|
||||
variants = []
|
||||
|
||||
@@ -51,9 +51,9 @@ class RemoteCensusApi
|
||||
path_value = Setting["remote_census.response.gender"]
|
||||
|
||||
case extract_value(path_value)
|
||||
when "Varón"
|
||||
when "Male", "Varón"
|
||||
"male"
|
||||
when "Mujer"
|
||||
when "Female", "Mujer"
|
||||
"female"
|
||||
end
|
||||
end
|
||||
@@ -73,11 +73,11 @@ class RemoteCensusApi
|
||||
private
|
||||
|
||||
def get_response_body(document_type, document_number, date_of_birth, postal_code)
|
||||
if end_point_available?
|
||||
if end_point_defined?
|
||||
request = request(document_type, document_number, date_of_birth, postal_code)
|
||||
client.call(Setting["remote_census.request.method_name"].to_sym, message: request).body
|
||||
else
|
||||
stubbed_response(document_type, document_number)
|
||||
stubbed_invalid_response
|
||||
end
|
||||
end
|
||||
|
||||
@@ -118,43 +118,11 @@ class RemoteCensusApi
|
||||
to_set[final_key] = value
|
||||
end
|
||||
|
||||
def end_point_available?
|
||||
Rails.env.staging? || Rails.env.preproduction? || Rails.env.production?
|
||||
end
|
||||
|
||||
def stubbed_response(document_type, document_number)
|
||||
if (document_number == "12345678Z" || document_number == "12345678Y") && document_type == "1"
|
||||
stubbed_valid_response
|
||||
else
|
||||
stubbed_invalid_response
|
||||
end
|
||||
end
|
||||
|
||||
def stubbed_valid_response
|
||||
{
|
||||
get_habita_datos_response: {
|
||||
get_habita_datos_return: {
|
||||
datos_habitante: {
|
||||
item: {
|
||||
fecha_nacimiento_string: "31-12-1980",
|
||||
identificador_documento: "12345678Z",
|
||||
descripcion_sexo: "Varón",
|
||||
nombre: "José",
|
||||
apellido1: "García"
|
||||
}
|
||||
},
|
||||
datos_vivienda: {
|
||||
item: {
|
||||
codigo_postal: "28013",
|
||||
codigo_distrito: "01"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
def end_point_defined?
|
||||
Setting["remote_census.general.endpoint"].present?
|
||||
end
|
||||
|
||||
def stubbed_invalid_response
|
||||
{ get_habita_datos_response: { get_habita_datos_return: { datos_habitante: {}, datos_vivienda: {}}}}
|
||||
{}
|
||||
end
|
||||
end
|
||||
|
||||
8
spec/fixtures/files/remote_census_api/invalid.xml
vendored
Normal file
8
spec/fixtures/files/remote_census_api/invalid.xml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<s:Body>
|
||||
<response>
|
||||
<data>
|
||||
</data>
|
||||
</response>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
||||
15
spec/fixtures/files/remote_census_api/valid.xml
vendored
Normal file
15
spec/fixtures/files/remote_census_api/valid.xml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<s:Body>
|
||||
<response>
|
||||
<data>
|
||||
<date_of_birth>31/12/1980</date_of_birth>
|
||||
<document_number>12345678Z</document_number>
|
||||
<gender>Male</gender>
|
||||
<name>William</name>
|
||||
<surname>Widmore</surname>
|
||||
<postal_code>28013</postal_code>
|
||||
<district_code>01</district_code>
|
||||
</data>
|
||||
</response>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
||||
@@ -8,12 +8,11 @@ describe SignatureSheetsHelper do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#required_fields_to_verify_text_help with remote_census active" do
|
||||
before do
|
||||
Setting["feature.remote_census"] = true
|
||||
end
|
||||
|
||||
describe "#required_fields_to_verify_text_help with remote_census active", :remote_census do
|
||||
it "returns text help when date_of_birth and postal_code are not required" do
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
|
||||
text_help_1 = "To verify a user, your application needs: Document number"
|
||||
text_help_2 = "Required fields for each user must be separated by commas and each user must be separated by semicolons."
|
||||
text_example = "Example: 12345678Z; 87654321Y"
|
||||
@@ -24,7 +23,7 @@ describe SignatureSheetsHelper do
|
||||
end
|
||||
|
||||
it "returns text help when date_of_birth is required" do
|
||||
Setting["remote_census.request.date_of_birth"] = "some.value"
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
|
||||
text_help_1 = "To verify a user, your application needs: Document number, Day of birth (dd/mm/yyyy)"
|
||||
text_help_2 = "Required fields for each user must be separated by commas and each user must be separated by semicolons."
|
||||
@@ -33,12 +32,10 @@ describe SignatureSheetsHelper do
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_1)
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_2)
|
||||
expect(example_text_help).to include(text_example)
|
||||
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
end
|
||||
|
||||
it "returns text help when postal_code is required" do
|
||||
Setting["remote_census.request.postal_code"] = "some.value"
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
|
||||
text_help_1 = "To verify a user, your application needs: Document number and Postal Code"
|
||||
text_help_2 = "Required fields for each user must be separated by commas and each user must be separated by semicolons."
|
||||
@@ -47,14 +44,9 @@ describe SignatureSheetsHelper do
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_1)
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_2)
|
||||
expect(example_text_help).to include(text_example)
|
||||
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
end
|
||||
|
||||
it "returns text help when date_of_birth and postal_code are required" do
|
||||
Setting["remote_census.request.date_of_birth"] = "some.value"
|
||||
Setting["remote_census.request.postal_code"] = "some.value"
|
||||
|
||||
text_help_1 = "To verify a user, your application needs: Document number, Day of birth (dd/mm/yyyy) and Postal Code"
|
||||
text_help_2 = "Required fields for each user must be separated by commas and each user must be separated by semicolons."
|
||||
text_example = "Example: 12345678Z, 01/01/1980, 28001; 87654321Y, 01/02/1990, 28002"
|
||||
@@ -62,9 +54,6 @@ describe SignatureSheetsHelper do
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_1)
|
||||
expect(required_fields_to_verify_text_help).to include(text_help_2)
|
||||
expect(example_text_help).to include(text_example)
|
||||
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,6 +13,16 @@ describe CensusCaller do
|
||||
{ get_habita_datos_response: { get_habita_datos_return: { datos_habitante: {}}}}
|
||||
end
|
||||
|
||||
it "returns invalid response when document_number or document_type are empty" do
|
||||
response = api.call(1, "", nil, nil)
|
||||
|
||||
expect(response).not_to be_valid
|
||||
|
||||
response = api.call("", "12345678A", nil, nil)
|
||||
|
||||
expect(response).not_to be_valid
|
||||
end
|
||||
|
||||
it "returns local census response when census api response is invalid" do
|
||||
census_api_response = CensusApi::Response.new(invalid_body)
|
||||
allow_any_instance_of(CensusApi).to receive(:call).and_return(census_api_response)
|
||||
@@ -34,12 +44,9 @@ describe CensusCaller do
|
||||
end
|
||||
end
|
||||
|
||||
describe "RemoteCensusApi" do
|
||||
before do
|
||||
Setting["feature.remote_census"] = true
|
||||
access_user_data = "get_habita_datos_response.get_habita_datos_return.datos_habitante.item"
|
||||
Setting["remote_census.response.valid"] = access_user_data
|
||||
end
|
||||
describe "RemoteCensusApi", :remote_census do
|
||||
let(:valid_body) { { response: { data: { document_number: "12345678" }}} }
|
||||
let(:invalid_body) { { response: { data: {}}} }
|
||||
|
||||
it "returns remote census api response when it's available and response is valid" do
|
||||
remote_census_api_response = RemoteCensusApi::Response.new(valid_body)
|
||||
|
||||
@@ -3,6 +3,10 @@ include DocumentParser
|
||||
|
||||
describe DocumentParser do
|
||||
describe "#get_document_number_variants" do
|
||||
it "returns no variants when document_number is not defined" do
|
||||
expect(DocumentParser.get_document_number_variants("1", "")).to be_empty
|
||||
end
|
||||
|
||||
it "trims and cleans up entry" do
|
||||
expect(DocumentParser.get_document_number_variants(2, " 1 2@ 34")).to eq(["1234"])
|
||||
end
|
||||
|
||||
@@ -3,214 +3,100 @@ require "rails_helper"
|
||||
describe RemoteCensusApi do
|
||||
let(:api) { RemoteCensusApi.new }
|
||||
|
||||
describe "#call" do
|
||||
let(:invalid_body) { { get_habita_datos_response: { get_habita_datos_return: { datos_habitante: {}}}} }
|
||||
let(:valid_body) do
|
||||
{
|
||||
get_habita_datos_response: {
|
||||
get_habita_datos_return: {
|
||||
datos_habitante: {
|
||||
item: {
|
||||
fecha_nacimiento_string: "1-1-1980"
|
||||
}
|
||||
}
|
||||
}
|
||||
describe "#call", :remote_census do
|
||||
it "returns a valid response correctly fullfilled when remote response returns a valid response" do
|
||||
%w[12345678 12345678z].each { mock_invalid_remote_census_response }
|
||||
%w[12345678Z].each { mock_valid_remote_census_response }
|
||||
|
||||
response = api.call("1", "12345678Z", Date.parse("31/12/1980"), "28013")
|
||||
|
||||
expect(response).to be_valid
|
||||
expect(response.date_of_birth).to eq Time.zone.local(1980, 12, 31).to_date
|
||||
expect(response.postal_code).to eq "28013"
|
||||
expect(response.gender).to eq "male"
|
||||
expect(response.name).to eq "William Widmore"
|
||||
end
|
||||
|
||||
it "returns an invalid response all variants return invalid responses" do
|
||||
%w[99999999 99999999z 99999999Z].each { mock_invalid_remote_census_response }
|
||||
|
||||
response = api.call("1", "99999999Z", Date.parse("31/12/1980"), "28013")
|
||||
|
||||
expect(response).not_to be_valid
|
||||
end
|
||||
|
||||
describe "request messages" do
|
||||
let(:valid_response) { File.read("spec/fixtures/files/remote_census_api/valid.xml") }
|
||||
|
||||
def request_with(params)
|
||||
{ "request" => params }
|
||||
end
|
||||
|
||||
it "includes date_of_birth and postal_code when request structure is configured" do
|
||||
params = {
|
||||
"document_type" => "1",
|
||||
"date_of_birth" => "1980-12-31",
|
||||
"postal_code" => "28013"
|
||||
}
|
||||
}
|
||||
|
||||
savon.expects(:verify_residence)
|
||||
.with(message: request_with(params.merge("document_number" => "12345678")))
|
||||
.returns(valid_response)
|
||||
|
||||
api.call("1", "12345678Z", Date.parse("31/12/1980"), "28013")
|
||||
end
|
||||
|
||||
it "does not include date_of_birth and postal_code when not configured" do
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
Setting["remote_census.request.structure"] = '{ "request":
|
||||
{
|
||||
"document_number": "nil",
|
||||
"document_type": "null"
|
||||
}
|
||||
}'
|
||||
|
||||
params = { "document_type" => "1" }
|
||||
|
||||
savon.expects(:verify_residence)
|
||||
.with(message: request_with(params.merge("document_number" => "12345678")))
|
||||
.returns(valid_response)
|
||||
|
||||
api.call("1", "12345678Z", Date.parse("31/12/1980"), "28013")
|
||||
end
|
||||
|
||||
it "includes custom parameters when configured" do
|
||||
Setting["remote_census.request.structure"] = '{ "request":
|
||||
{
|
||||
"document_type": "null",
|
||||
"document_number": "nil",
|
||||
"date_of_birth": "null",
|
||||
"postal_code": "nil",
|
||||
"api_key": "your_api_key"
|
||||
}
|
||||
}'
|
||||
|
||||
params = {
|
||||
"document_type" => "1",
|
||||
"date_of_birth" => "1980-12-31",
|
||||
"postal_code" => "28013",
|
||||
"api_key" => "your_api_key"
|
||||
}
|
||||
|
||||
savon.expects(:verify_residence)
|
||||
.with(message: request_with(params.merge("document_number" => "12345678")))
|
||||
.returns(valid_response)
|
||||
|
||||
api.call("1", "12345678Z", Date.parse("31/12/1980"), "28013")
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
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
|
||||
it "returns an invalid response when endpoint is not defined" do
|
||||
allow_any_instance_of(RemoteCensusApi).to receive(:end_point_defined?).and_return(false)
|
||||
|
||||
it "returns the response for the first valid variant" do
|
||||
date = Date.parse("01/01/1983")
|
||||
allow(api).to receive(:get_response_body).with(1, "00123456", date, "28001").and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "123456", date, "28001").and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "0123456", date, "28001").and_return(valid_body)
|
||||
|
||||
response = api.call(1, "123456", date, "28001")
|
||||
|
||||
expect(response).to be_valid
|
||||
expect(response.date_of_birth).to eq(Date.new(1980, 1, 1))
|
||||
end
|
||||
|
||||
it "returns the response for the first valid variant without send date_of_birth and postal_code" do
|
||||
allow(api).to receive(:get_response_body).with(1, "00123456", nil, nil).and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "123456", nil, nil).and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "0123456", nil, nil).and_return(valid_body)
|
||||
|
||||
response = api.call(1, "123456", nil, nil)
|
||||
|
||||
expect(response).to be_valid
|
||||
expect(response.date_of_birth).to eq(Date.new(1980, 1, 1))
|
||||
end
|
||||
|
||||
it "returns the last failed response" do
|
||||
date = Date.parse("01/01/1983")
|
||||
allow(api).to receive(:get_response_body).with(1, "00123456", date, "28001").and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "123456", date, "28001").and_return(invalid_body)
|
||||
allow(api).to receive(:get_response_body).with(1, "0123456", date, "28001").and_return(invalid_body)
|
||||
response = api.call(1, "123456", date, "28001")
|
||||
response = api.call("1", "12345678Z", Date.parse("01/01/1983"), "28013")
|
||||
|
||||
expect(response).not_to be_valid
|
||||
end
|
||||
end
|
||||
|
||||
describe "request structure correctly filled" do
|
||||
before do
|
||||
Setting["feature.remote_census"] = true
|
||||
Setting["remote_census.request.structure"] = '{ "request":
|
||||
{ "codigo_institucion": 1,
|
||||
"codigo_portal": 1,
|
||||
"codigo_usuario": 1,
|
||||
"documento": null,
|
||||
"tipo_documento": null,
|
||||
"codigo_idioma": 102,
|
||||
"nivel": 3 }
|
||||
}'
|
||||
Setting["remote_census.request.document_type"] = "request.tipo_documento"
|
||||
Setting["remote_census.request.document_number"] = "request.documento"
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
end
|
||||
|
||||
it "with default values" do
|
||||
document_type = "1"
|
||||
document_number = "0123456"
|
||||
|
||||
request = RemoteCensusApi.new.send(:request, document_type, document_number, nil, nil)
|
||||
|
||||
expect(request).to eq({ "request" =>
|
||||
{ "codigo_institucion" => 1,
|
||||
"codigo_portal" => 1,
|
||||
"codigo_usuario" => 1,
|
||||
"documento" => "0123456",
|
||||
"tipo_documento" => "1",
|
||||
"codigo_idioma" => 102,
|
||||
"nivel" => 3 }
|
||||
})
|
||||
end
|
||||
|
||||
it "when send date_of_birth and postal_code but are not configured" do
|
||||
document_type = "1"
|
||||
document_number = "0123456"
|
||||
date_of_birth = Date.new(1980, 1, 1)
|
||||
postal_code = "28001"
|
||||
|
||||
request = RemoteCensusApi.new.send(:request, document_type, document_number, date_of_birth, postal_code)
|
||||
|
||||
expect(request).to eq({ "request" =>
|
||||
{ "codigo_institucion" => 1,
|
||||
"codigo_portal" => 1,
|
||||
"codigo_usuario" => 1,
|
||||
"documento" => "0123456",
|
||||
"tipo_documento" => "1",
|
||||
"codigo_idioma" => 102,
|
||||
"nivel" => 3 }
|
||||
})
|
||||
end
|
||||
|
||||
it "when send date_of_birth and postal_code but are configured" do
|
||||
Setting["remote_census.request.structure"] = '{ "request":
|
||||
{ "codigo_institucion": 1,
|
||||
"codigo_portal": 1,
|
||||
"codigo_usuario": 1,
|
||||
"documento": "nil",
|
||||
"tipo_documento": "null",
|
||||
"fecha_nacimiento": "null",
|
||||
"codigo_postal": "nil",
|
||||
"codigo_idioma": 102,
|
||||
"nivel": 3 }
|
||||
}'
|
||||
Setting["remote_census.request.date_of_birth"] = "request.fecha_nacimiento"
|
||||
Setting["remote_census.request.postal_code"] = "request.codigo_postal"
|
||||
document_type = "1"
|
||||
document_number = "0123456"
|
||||
date_of_birth = Date.new(1980, 1, 1)
|
||||
postal_code = "28001"
|
||||
|
||||
request = RemoteCensusApi.new.send(:request, document_type, document_number, date_of_birth, postal_code)
|
||||
|
||||
expect(request).to eq({ "request" =>
|
||||
{ "codigo_institucion" => 1,
|
||||
"codigo_portal" => 1,
|
||||
"codigo_usuario" => 1,
|
||||
"documento" => "0123456",
|
||||
"tipo_documento" => "1",
|
||||
"fecha_nacimiento" => "1980-01-01",
|
||||
"codigo_postal" => "28001",
|
||||
"codigo_idioma" => 102,
|
||||
"nivel" => 3 }
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
describe "get_response_body" do
|
||||
before do
|
||||
Setting["feature.remote_census"] = true
|
||||
end
|
||||
|
||||
it "return expected stubbed_response" do
|
||||
document_type = "1"
|
||||
document_number = "12345678Z"
|
||||
|
||||
response = RemoteCensusApi.new.send(:get_response_body, document_type, document_number, nil, nil)
|
||||
|
||||
expect(response).to eq({ get_habita_datos_response: {
|
||||
get_habita_datos_return: {
|
||||
datos_habitante: {
|
||||
item: {
|
||||
fecha_nacimiento_string: "31-12-1980",
|
||||
identificador_documento: "12345678Z",
|
||||
descripcion_sexo: "Varón",
|
||||
nombre: "José",
|
||||
apellido1: "García"
|
||||
}
|
||||
},
|
||||
datos_vivienda: {
|
||||
item: {
|
||||
codigo_postal: "28013",
|
||||
codigo_distrito: "01"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
describe "RemoteCensusApi::Response" do
|
||||
before do
|
||||
Setting["feature.remote_census"] = true
|
||||
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.district"] = "#{access_residence_data}.codigo_distrito"
|
||||
Setting["remote_census.response.gender"] = "#{access_user_data}.descripcion_sexo"
|
||||
Setting["remote_census.response.name"] = "#{access_user_data}.nombre"
|
||||
Setting["remote_census.response.surname"] = "#{access_user_data}.apellido1"
|
||||
Setting["remote_census.response.valid"] = access_user_data
|
||||
end
|
||||
|
||||
it "return expected response methods with default values" do
|
||||
document_type = "1"
|
||||
document_number = "12345678Z"
|
||||
|
||||
get_response_body = RemoteCensusApi.new.send(:get_response_body, document_type, document_number, nil, nil)
|
||||
response = RemoteCensusApi::Response.new(get_response_body)
|
||||
|
||||
expect(response.valid?).to eq true
|
||||
expect(response.date_of_birth).to eq Time.zone.local(1980, 12, 31).to_date
|
||||
expect(response.postal_code).to eq "28013"
|
||||
expect(response.district_code).to eq "01"
|
||||
expect(response.gender).to eq "male"
|
||||
expect(response.name).to eq "José García"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,26 +34,17 @@ describe Officing::Residence do
|
||||
expect(residence).to be_valid
|
||||
end
|
||||
|
||||
describe "custom validations" do
|
||||
describe "custom validations", :remote_census do
|
||||
let(:custom_residence) do
|
||||
build(:officing_residence,
|
||||
document_number: "12345678Z",
|
||||
date_of_birth: "01/01/1980",
|
||||
date_of_birth: Date.parse("01/01/1980"),
|
||||
postal_code: "28001")
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
it "is valid" do
|
||||
mock_valid_remote_census_response
|
||||
|
||||
expect(custom_residence).to be_valid
|
||||
end
|
||||
|
||||
@@ -70,27 +61,34 @@ describe Officing::Residence do
|
||||
it "is valid without a year of birth when date_of_birth is present" do
|
||||
custom_residence.year_of_birth = nil
|
||||
|
||||
mock_valid_remote_census_response
|
||||
|
||||
expect(custom_residence).to be_valid
|
||||
end
|
||||
|
||||
it "is not valid without a date of birth" do
|
||||
custom_residence.date_of_birth = nil
|
||||
|
||||
mock_valid_remote_census_response
|
||||
|
||||
expect(custom_residence).not_to be_valid
|
||||
end
|
||||
|
||||
it "is not valid without a postal_code" do
|
||||
custom_residence.postal_code = nil
|
||||
|
||||
mock_valid_remote_census_response
|
||||
|
||||
expect(custom_residence).not_to be_valid
|
||||
end
|
||||
|
||||
describe "dates" do
|
||||
it "is valid with a valid date of birth" do
|
||||
it "is not valid but not because date of birth" do
|
||||
custom_residence = Officing::Residence.new("date_of_birth(3i)" => "1",
|
||||
"date_of_birth(2i)" => "1",
|
||||
"date_of_birth(1i)" => "1980")
|
||||
|
||||
expect(custom_residence).not_to be_valid
|
||||
expect(custom_residence.errors[:date_of_birth]).to be_empty
|
||||
end
|
||||
|
||||
@@ -110,6 +108,11 @@ describe Officing::Residence do
|
||||
:invalid,
|
||||
document_number: "12345678Z",
|
||||
postal_code: "00001")
|
||||
|
||||
%w[12345678 12345678z 12345678Z].each do
|
||||
mock_invalid_remote_census_response
|
||||
end
|
||||
|
||||
residence.save
|
||||
|
||||
expect(FailedCensusCall.count).to eq(1)
|
||||
|
||||
@@ -112,14 +112,15 @@ 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
|
||||
|
||||
context "with remote census active", :remote_census do
|
||||
it "creates signatures for each group with document_number" do
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
|
||||
required_fields_to_verify = "123A; 456B"
|
||||
signature_sheet = create(:signature_sheet, required_fields_to_verify: required_fields_to_verify)
|
||||
|
||||
%w[123A 456B].each { mock_valid_remote_census_response }
|
||||
signature_sheet.verify_signatures
|
||||
|
||||
expect(Signature.count).to eq(2)
|
||||
@@ -132,10 +133,12 @@ describe SignatureSheet do
|
||||
end
|
||||
|
||||
it "creates signatures for each group with document_number and date_of_birth" do
|
||||
Setting["remote_census.request.date_of_birth"] = "some.value"
|
||||
Setting["remote_census.request.postal_code"] = nil
|
||||
|
||||
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)
|
||||
|
||||
%w[123A 456B].each { mock_valid_remote_census_response }
|
||||
signature_sheet.verify_signatures
|
||||
|
||||
expect(Signature.count).to eq(2)
|
||||
@@ -145,15 +148,15 @@ describe SignatureSheet do
|
||||
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 and postal_code" do
|
||||
Setting["remote_census.request.postal_code"] = "some.value"
|
||||
Setting["remote_census.request.date_of_birth"] = nil
|
||||
|
||||
required_fields_to_verify = "123A, 28001; 456B, 28002"
|
||||
signature_sheet = create(:signature_sheet, required_fields_to_verify: required_fields_to_verify)
|
||||
|
||||
%w[123A 456B].each { mock_valid_remote_census_response }
|
||||
signature_sheet.verify_signatures
|
||||
|
||||
expect(Signature.count).to eq(2)
|
||||
@@ -163,16 +166,13 @@ describe SignatureSheet do
|
||||
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"
|
||||
|
||||
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)
|
||||
|
||||
%w[123A 456B].each { mock_valid_remote_census_response }
|
||||
signature_sheet.verify_signatures
|
||||
|
||||
expect(Signature.count).to eq(2)
|
||||
@@ -182,9 +182,6 @@ describe SignatureSheet do
|
||||
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
|
||||
|
||||
@@ -225,22 +225,13 @@ 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
|
||||
|
||||
it "calls assign_vote_to_user" do
|
||||
it "calls assign_vote_to_user", :remote_census do
|
||||
signature = create(:signature, document_number: "12345678Z",
|
||||
date_of_birth: "31/12/1980",
|
||||
postal_code: "28013")
|
||||
|
||||
mock_valid_remote_census_response
|
||||
|
||||
expect_any_instance_of(Signature).to receive(:assign_vote_to_user).exactly(1).times
|
||||
|
||||
signature.verify
|
||||
|
||||
@@ -28,18 +28,7 @@ describe Verification::Management::Document do
|
||||
expect(verification_document).to be_valid
|
||||
end
|
||||
|
||||
describe "custom validations with RemoteCensus enabled" 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
|
||||
|
||||
describe "custom validations with RemoteCensus enabled", :remote_census do
|
||||
it "is valid" do
|
||||
expect(verification_document).to be_valid
|
||||
end
|
||||
|
||||
@@ -105,6 +105,38 @@ RSpec.configure do |config|
|
||||
allow(Time).to receive(:zone).and_return(application_zone)
|
||||
end
|
||||
|
||||
config.before(:each, :remote_census) do |example|
|
||||
allow_any_instance_of(RemoteCensusApi).to receive(:end_point_defined?).and_return(true)
|
||||
Setting["feature.remote_census"] = true
|
||||
Setting["remote_census.request.method_name"] = "verify_residence"
|
||||
Setting["remote_census.request.structure"] = '{ "request":
|
||||
{
|
||||
"document_type": "null",
|
||||
"document_number": "nil",
|
||||
"date_of_birth": "null",
|
||||
"postal_code": "nil"
|
||||
}
|
||||
}'
|
||||
|
||||
Setting["remote_census.request.document_type"] = "request.document_type"
|
||||
Setting["remote_census.request.document_number"] = "request.document_number"
|
||||
Setting["remote_census.request.date_of_birth"] = "request.date_of_birth"
|
||||
Setting["remote_census.request.postal_code"] = "request.postal_code"
|
||||
Setting["remote_census.response.date_of_birth"] = "response.data.date_of_birth"
|
||||
Setting["remote_census.response.postal_code"] = "response.data.postal_code"
|
||||
Setting["remote_census.response.district"] = "response.data.district_code"
|
||||
Setting["remote_census.response.gender"] = "response.data.gender"
|
||||
Setting["remote_census.response.name"] = "response.data.name"
|
||||
Setting["remote_census.response.surname"] = "response.data.surname"
|
||||
Setting["remote_census.response.valid"] = "response.data.document_number"
|
||||
|
||||
savon.mock!
|
||||
end
|
||||
|
||||
config.after(:each, :remote_census) do
|
||||
savon.unmock!
|
||||
end
|
||||
|
||||
# Allows RSpec to persist some state between runs in order to support
|
||||
# the `--only-failures` and `--next-failure` CLI options.
|
||||
config.example_status_persistence_file_path = "spec/examples.txt"
|
||||
|
||||
@@ -8,6 +8,7 @@ module CommonActions
|
||||
include Notifications
|
||||
include Polls
|
||||
include Proposals
|
||||
include RemoteCensusMock
|
||||
include Tags
|
||||
include Translations
|
||||
include Users
|
||||
|
||||
30
spec/support/common_actions/remote_census_mock.rb
Normal file
30
spec/support/common_actions/remote_census_mock.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
require "savon/mock/spec_helper"
|
||||
|
||||
module RemoteCensusMock
|
||||
include Savon::SpecHelper
|
||||
include DocumentParser
|
||||
|
||||
def mock_valid_remote_census_response
|
||||
mock_remote_census_response(File.read("spec/fixtures/files/remote_census_api/valid.xml"))
|
||||
end
|
||||
|
||||
def mock_invalid_remote_census_response
|
||||
mock_remote_census_response(File.read("spec/fixtures/files/remote_census_api/invalid.xml"))
|
||||
end
|
||||
|
||||
def mock_invalid_signature_sheet_remote_census_response
|
||||
xml = File.read("spec/fixtures/files/remote_census_api/invalid.xml")
|
||||
|
||||
Signature.new.document_types.each do |document_type|
|
||||
get_document_number_variants(document_type, "12345678Z").each do
|
||||
mock_remote_census_response(xml)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def mock_remote_census_response(xml)
|
||||
savon.expects(Setting["remote_census.request.method_name"].to_sym)
|
||||
.with(message: :any)
|
||||
.returns(xml)
|
||||
end
|
||||
end
|
||||
@@ -76,16 +76,10 @@ describe "Signature sheets" do
|
||||
end
|
||||
end
|
||||
|
||||
context "Create throught all required_fields_to_verify of custom census api" do
|
||||
context "Create throught all required_fields_to_verify of custom census api", :remote_census 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
|
||||
mock_valid_remote_census_response
|
||||
mock_invalid_signature_sheet_remote_census_response
|
||||
end
|
||||
|
||||
scenario "Proposal" do
|
||||
|
||||
@@ -53,18 +53,7 @@ describe "DocumentVerifications" do
|
||||
end
|
||||
end
|
||||
|
||||
context "Remote 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
|
||||
|
||||
context "Remote Census API", :remote_census do
|
||||
scenario "Verifying a user which does not exist and is not in the census shows an error" do
|
||||
expect_any_instance_of(Verification::Management::Document).to receive(:in_census?).
|
||||
and_return(false)
|
||||
@@ -78,7 +67,10 @@ describe "DocumentVerifications" do
|
||||
expect(page).to have_content "This document is not registered"
|
||||
end
|
||||
|
||||
scenario "Verifying a user which does exists in the census but not in the db redirects allows sending an email" do
|
||||
scenario "Verifying a user which does exists in the census but not in the db
|
||||
redirects allows sending an email" do
|
||||
mock_valid_remote_census_response
|
||||
|
||||
visit management_document_verifications_path
|
||||
fill_in "document_verification_document_number", with: "12345678Z"
|
||||
select_date "31-December-1980", from: "document_verification_date_of_birth"
|
||||
|
||||
@@ -111,11 +111,8 @@ describe "Residence", :with_frozen_time do
|
||||
expect(page).to have_content "Vote introduced!"
|
||||
end
|
||||
|
||||
context "With remote census configuration" do
|
||||
context "With remote census configuration", :remote_census 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"
|
||||
create(:poll_officer_assignment, officer: officer)
|
||||
login_through_form_as_officer(officer.user)
|
||||
visit officing_root_path
|
||||
@@ -137,9 +134,6 @@ describe "Residence", :with_frozen_time do
|
||||
end
|
||||
|
||||
scenario "with all custom census not display year_of_birth" do
|
||||
Setting["remote_census.request.date_of_birth"] = "some.value"
|
||||
Setting["remote_census.request.postal_code"] = "some.value"
|
||||
|
||||
within("#side_menu") do
|
||||
click_link "Validate document"
|
||||
end
|
||||
@@ -153,11 +147,8 @@ describe "Residence", :with_frozen_time do
|
||||
end
|
||||
|
||||
scenario "can verify voter with date_of_birth and postal_code fields" do
|
||||
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
|
||||
mock_valid_remote_census_response
|
||||
|
||||
within("#side_menu") do
|
||||
click_link "Validate document"
|
||||
end
|
||||
@@ -165,7 +156,7 @@ describe "Residence", :with_frozen_time do
|
||||
select "DNI", from: "residence_document_type"
|
||||
fill_in "residence_document_number", with: "12345678Z"
|
||||
select_date "31-December-1980", from: "residence_date_of_birth"
|
||||
fill_in "residence_postal_code", with: "28001"
|
||||
fill_in "residence_postal_code", with: "28013"
|
||||
|
||||
click_button "Validate document"
|
||||
|
||||
|
||||
@@ -20,16 +20,10 @@ describe "Residence" do
|
||||
expect(page).to have_content "Residence verified"
|
||||
end
|
||||
|
||||
scenario "Verify resident throught RemoteCensusApi" do
|
||||
Setting["feature.remote_census"] = true
|
||||
|
||||
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
|
||||
scenario "Verify resident throught RemoteCensusApi", :remote_census do
|
||||
user = create(:user)
|
||||
login_as(user)
|
||||
mock_valid_remote_census_response
|
||||
|
||||
visit account_path
|
||||
click_link "Verify my account"
|
||||
@@ -42,7 +36,6 @@ describe "Residence" do
|
||||
click_button "Verify residence"
|
||||
|
||||
expect(page).to have_content "Residence verified"
|
||||
Setting["feature.remote_census"] = nil
|
||||
end
|
||||
|
||||
scenario "Residence form use min age to participate" do
|
||||
|
||||
Reference in New Issue
Block a user