From feff9fff0f3a60409849d6c69d7a40662c44bf14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Sat, 8 Jul 2017 19:56:10 +0200 Subject: [PATCH 01/10] LocalCensus model created --- app/models/local_census_record.rb | 8 ++++++++ app/models/user.rb | 1 + ...170708174932_create_local_census_records.rb | 15 +++++++++++++++ db/schema.rb | 18 +++++++++++++++--- spec/factories.rb | 3 +++ spec/models/local_census_record_spec.rb | 5 +++++ 6 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 app/models/local_census_record.rb create mode 100644 db/migrate/20170708174932_create_local_census_records.rb create mode 100644 spec/models/local_census_record_spec.rb diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb new file mode 100644 index 000000000..69e9db3c7 --- /dev/null +++ b/app/models/local_census_record.rb @@ -0,0 +1,8 @@ +class LocalCensusRecord < ActiveRecord::Base + has_one :user + + validates :document_number, presence: true + validates :document_type, presence: true + validates :date_of_birth, presence: true + validates :postal_code, presence: true +end diff --git a/app/models/user.rb b/app/models/user.rb index 9df08c014..35f808ed7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -32,6 +32,7 @@ class User < ActiveRecord::Base has_many :direct_messages_received, class_name: 'DirectMessage', foreign_key: :receiver_id has_many :legislation_answers, class_name: 'Legislation::Answer', dependent: :destroy, inverse_of: :user belongs_to :geozone + belongs_to :local_census_record validates :username, presence: true, if: :username_required? validates :username, uniqueness: { scope: :registering_with_oauth }, if: :username_required? diff --git a/db/migrate/20170708174932_create_local_census_records.rb b/db/migrate/20170708174932_create_local_census_records.rb new file mode 100644 index 000000000..640594ded --- /dev/null +++ b/db/migrate/20170708174932_create_local_census_records.rb @@ -0,0 +1,15 @@ +class CreateLocalCensusRecords < ActiveRecord::Migration + def change + create_table :local_census_records do |t| + t.string :document_number, null: false + t.string :document_type, null: false + t.date :date_of_birth, null: false + t.string :postal_code, null: false + t.integer :user_id + + t.timestamps null: false + end + + add_foreign_key :local_census_records, :users, column: :user_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 042bec7dd..380ec69ef 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170626081337) do +ActiveRecord::Schema.define(version: 20170708174932) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,8 +108,8 @@ ActiveRecord::Schema.define(version: 20170626081337) do create_table "budget_headings", force: :cascade do |t| t.integer "group_id" - t.string "name", limit: 50 - t.integer "price", limit: 8 + t.string "name", limit: 50 + t.integer "price", limit: 8 t.integer "population" end @@ -468,6 +468,16 @@ ActiveRecord::Schema.define(version: 20170626081337) do add_index "legislation_questions", ["hidden_at"], name: "index_legislation_questions_on_hidden_at", using: :btree add_index "legislation_questions", ["legislation_process_id"], name: "index_legislation_questions_on_legislation_process_id", using: :btree + create_table "local_census_records", force: :cascade do |t| + t.string "document_number", null: false + t.string "document_type", null: false + t.date "date_of_birth", null: false + t.string "postal_code", null: false + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "locks", force: :cascade do |t| t.integer "user_id" t.integer "tries", default: 0 @@ -793,6 +803,7 @@ ActiveRecord::Schema.define(version: 20170626081337) do t.string "status", default: "draft" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "locale" end create_table "spending_proposals", force: :cascade do |t| @@ -1034,6 +1045,7 @@ ActiveRecord::Schema.define(version: 20170626081337) do add_foreign_key "geozones_polls", "polls" add_foreign_key "identities", "users" add_foreign_key "legislation_draft_versions", "legislation_processes" + add_foreign_key "local_census_records", "users" add_foreign_key "locks", "users" add_foreign_key "managers", "users" add_foreign_key "moderators", "users" diff --git a/spec/factories.rb b/spec/factories.rb index c0cbd1cc1..062c80aa2 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,4 +1,7 @@ FactoryGirl.define do + factory :local_census_record do + + end sequence(:document_number) { |n| "#{n.to_s.rjust(8, '0')}X" } factory :user do diff --git a/spec/models/local_census_record_spec.rb b/spec/models/local_census_record_spec.rb new file mode 100644 index 000000000..f30474418 --- /dev/null +++ b/spec/models/local_census_record_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe LocalCensusRecord, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 7e701db6085db4e067a839be24adfda9f3487f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Sat, 8 Jul 2017 20:39:05 +0200 Subject: [PATCH 02/10] Added new census data source to `Verification::Residence` Adapted model to perform a query to find a `LocalCensusRecord` record in case the census API is not available or returns invalid data. --- app/models/verification/residence.rb | 46 ++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 7fa7f74b4..629851133 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -5,7 +5,7 @@ class Verification::Residence attr_accessor :user, :document_number, :document_type, :date_of_birth, :postal_code, :terms_of_service - before_validation :call_census_api + before_validation :retrieve_census_data validates :document_number, presence: true validates :document_type, presence: true @@ -29,12 +29,21 @@ class Verification::Residence user.take_votes_if_erased_document(document_number, document_type) - user.update(document_number: document_number, - document_type: document_type, - geozone: self.geozone, - date_of_birth: date_of_birth.to_datetime, - gender: gender, - residence_verified_at: Time.current) + if @census_data.class.name === 'LocalCensusRecord' + user.update(document_number: document_number, + document_type: document_type, + date_of_birth: date_of_birth.to_datetime, + residence_verified_at: Time.current) + + @census_data.update(user_id: user) + else + user.update(document_number: document_number, + document_type: document_type, + geozone: self.geozone, + date_of_birth: date_of_birth.to_datetime, + gender: gender, + residence_verified_at: Time.current) + end end def allowed_age @@ -61,23 +70,34 @@ class Verification::Residence end def district_code - @census_api_response.district_code + @census_data.district_code end def gender - @census_api_response.gender + @census_data.gender end private + def retrieve_census_data + response = call_census_api + response = local_census_record_query unless response.valid? + + @census_data = response + end + def call_census_api - @census_api_response = CensusApi.new.call(document_type, document_number) + CensusApi.new.call(document_type, document_number) + end + + def local_census_record_query + LocalCensusRecord.find_by(document_type: document_type, document_number: document_number) end def residency_valid? - @census_api_response.valid? && - @census_api_response.postal_code == postal_code && - @census_api_response.date_of_birth == date_of_birth + @census_data.valid? && + @census_data.postal_code == postal_code && + @census_data.date_of_birth == date_of_birth end def clean_document_number From 089c690b49d472551110c7a1aa5ee10ce686802a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Mon, 10 Jul 2017 12:22:30 +0200 Subject: [PATCH 03/10] Created new entry point `CensusCaller` Here's a better alternative than the first one. Added a new abstraction level from which are performed both types of census calls, while the logic of those is managed in their own library. --- app/models/officing/residence.rb | 2 +- app/models/poll/voter.rb | 2 +- app/models/signature.rb | 4 +- .../verification/management/document.rb | 2 +- app/models/verification/residence.rb | 34 ++-------- lib/census_caller.rb | 7 ++ lib/local_census.rb | 68 +++++++++++++++++++ 7 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 lib/census_caller.rb create mode 100644 lib/local_census.rb diff --git a/app/models/officing/residence.rb b/app/models/officing/residence.rb index b0fc56078..7664f1b02 100644 --- a/app/models/officing/residence.rb +++ b/app/models/officing/residence.rb @@ -102,7 +102,7 @@ class Officing::Residence private def call_census_api - @census_api_response = CensusApi.new.call(document_type, document_number) + @census_api_response = CensusCaller.new.call(document_type, document_number) end def residency_valid? diff --git a/app/models/poll/voter.rb b/app/models/poll/voter.rb index 7236865c4..760096206 100644 --- a/app/models/poll/voter.rb +++ b/app/models/poll/voter.rb @@ -35,7 +35,7 @@ class Poll end def census_api_response - @census_api_response ||= CensusApi.new.call(document_type, document_number) + @census_api_response ||= CensusCaller.new.call(document_type, document_number) end def fill_stats_fields diff --git a/app/models/signature.rb b/app/models/signature.rb index 543965aed..914994914 100644 --- a/app/models/signature.rb +++ b/app/models/signature.rb @@ -69,7 +69,7 @@ class Signature < ActiveRecord::Base def in_census? document_types.detect do |document_type| - response = CensusApi.new.call(document_type, document_number) + response = CensusCaller.new.call(document_type, document_number) if response.valid? @census_api_response = response true @@ -94,4 +94,4 @@ class Signature < ActiveRecord::Base %w(1 2 3 4) end -end \ No newline at end of file +end diff --git a/app/models/verification/management/document.rb b/app/models/verification/management/document.rb index 420dcf49c..a317e5958 100644 --- a/app/models/verification/management/document.rb +++ b/app/models/verification/management/document.rb @@ -18,7 +18,7 @@ class Verification::Management::Document end def in_census? - response = CensusApi.new.call(document_type, document_number) + response = CensusCaller.new.call(document_type, document_number) response.valid? && valid_age?(response) end diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 629851133..b71c8b445 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -29,21 +29,12 @@ class Verification::Residence user.take_votes_if_erased_document(document_number, document_type) - if @census_data.class.name === 'LocalCensusRecord' - user.update(document_number: document_number, - document_type: document_type, - date_of_birth: date_of_birth.to_datetime, - residence_verified_at: Time.current) - - @census_data.update(user_id: user) - else - user.update(document_number: document_number, - document_type: document_type, - geozone: self.geozone, - date_of_birth: date_of_birth.to_datetime, - gender: gender, - residence_verified_at: Time.current) - end + user.update(document_number: document_number, + document_type: document_type, + geozone: self.geozone, + date_of_birth: date_of_birth.to_datetime, + gender: gender, + residence_verified_at: Time.current) end def allowed_age @@ -80,18 +71,7 @@ class Verification::Residence private def retrieve_census_data - response = call_census_api - response = local_census_record_query unless response.valid? - - @census_data = response - end - - def call_census_api - CensusApi.new.call(document_type, document_number) - end - - def local_census_record_query - LocalCensusRecord.find_by(document_type: document_type, document_number: document_number) + @census_data = CensusCaller.new.call(document_type, document_number) end def residency_valid? diff --git a/lib/census_caller.rb b/lib/census_caller.rb new file mode 100644 index 000000000..21e69227e --- /dev/null +++ b/lib/census_caller.rb @@ -0,0 +1,7 @@ +class CensusCaller + + def call(document_type, document_number) + response = CensusApi.new.call(document_type, document_number) + response = LocalCensus.new.call(document_type, document_number) unless response.valid? + end +end diff --git a/lib/local_census.rb b/lib/local_census.rb new file mode 100644 index 000000000..6dce4df72 --- /dev/null +++ b/lib/local_census.rb @@ -0,0 +1,68 @@ +include DocumentParser +class LocalCensus + + def call(document_type, document_number) + record = nil + get_document_number_variants(document_type, document_number).each do |variant| + record = Response.new(get_record(document_type, variant)) + return record if record.valid? + end + record + end + + class Response + def initialize(body) + @body = body + end + + def valid? + @body.valid? + rescue NoMethodError + false + end + + def date_of_birth + @body.date_of_birth + end + + def postal_code + @body.postal_code + end + + def district_code + @body.district_code rescue nil + end + + def gender + case @body.gender + when "VarĂ³n" + "male" + when "Mujer" + "female" + end + rescue NoMethodError + nil + end + + def name + "#{@body.nombre} #{@body.apellido1}" rescue nil + end + + private + + def data + @body.attributes + end + end + + private + + def get_record(document_type, document_number) + LocalCensusRecord.find_by(document_type: document_type, document_number: document_number) + end + + def is_dni?(document_type) + document_type.to_s == "1" + end + +end From ee1d418e2bbc1bd398693b4a313139065d676c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Thu, 13 Jul 2017 13:09:48 +0200 Subject: [PATCH 04/10] Removed `user_id` column from `local_census_records` table That attribute is not necessary as `Verification::Residence` model is in charge of verifying user document uniqueness. --- app/models/local_census_record.rb | 1 - .../20170713110317_remove_local_census_record_user_id.rb | 5 +++++ db/schema.rb | 4 +--- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20170713110317_remove_local_census_record_user_id.rb diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb index 69e9db3c7..cc568bb27 100644 --- a/app/models/local_census_record.rb +++ b/app/models/local_census_record.rb @@ -1,5 +1,4 @@ class LocalCensusRecord < ActiveRecord::Base - has_one :user validates :document_number, presence: true validates :document_type, presence: true diff --git a/db/migrate/20170713110317_remove_local_census_record_user_id.rb b/db/migrate/20170713110317_remove_local_census_record_user_id.rb new file mode 100644 index 000000000..9285d849e --- /dev/null +++ b/db/migrate/20170713110317_remove_local_census_record_user_id.rb @@ -0,0 +1,5 @@ +class RemoveLocalCensusRecordUserId < ActiveRecord::Migration + def change + remove_column :local_census_records, :user_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 380ec69ef..5a734243e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170708174932) do +ActiveRecord::Schema.define(version: 20170713110317) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -473,7 +473,6 @@ ActiveRecord::Schema.define(version: 20170708174932) do t.string "document_type", null: false t.date "date_of_birth", null: false t.string "postal_code", null: false - t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end @@ -1045,7 +1044,6 @@ ActiveRecord::Schema.define(version: 20170708174932) do add_foreign_key "geozones_polls", "polls" add_foreign_key "identities", "users" add_foreign_key "legislation_draft_versions", "legislation_processes" - add_foreign_key "local_census_records", "users" add_foreign_key "locks", "users" add_foreign_key "managers", "users" add_foreign_key "moderators", "users" From 77b8d93893601f5e5863738ec6ba2698fbd36d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Fri, 14 Jul 2017 15:34:31 +0200 Subject: [PATCH 05/10] Removed unnecessary validation in `LocalCensusRecord` --- app/models/local_census_record.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb index cc568bb27..a94d80a78 100644 --- a/app/models/local_census_record.rb +++ b/app/models/local_census_record.rb @@ -1,7 +1,3 @@ class LocalCensusRecord < ActiveRecord::Base - validates :document_number, presence: true - validates :document_type, presence: true - validates :date_of_birth, presence: true - validates :postal_code, presence: true end From 6a24288bedc88b5e9f332f636d9a65b535410a4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Fri, 14 Jul 2017 15:35:11 +0200 Subject: [PATCH 06/10] Removed `local_census_record` association in `User` --- app/models/user.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 35f808ed7..9df08c014 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -32,7 +32,6 @@ class User < ActiveRecord::Base has_many :direct_messages_received, class_name: 'DirectMessage', foreign_key: :receiver_id has_many :legislation_answers, class_name: 'Legislation::Answer', dependent: :destroy, inverse_of: :user belongs_to :geozone - belongs_to :local_census_record validates :username, presence: true, if: :username_required? validates :username, uniqueness: { scope: :registering_with_oauth }, if: :username_required? From 13409c2e359ec142f1465000f033834dfb5e5b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Fri, 14 Jul 2017 15:35:50 +0200 Subject: [PATCH 07/10] Performance minor changes in `CensusCaller` and `LocalCensus` --- lib/census_caller.rb | 2 ++ lib/local_census.rb | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/census_caller.rb b/lib/census_caller.rb index 21e69227e..d104b03c8 100644 --- a/lib/census_caller.rb +++ b/lib/census_caller.rb @@ -3,5 +3,7 @@ class CensusCaller def call(document_type, document_number) response = CensusApi.new.call(document_type, document_number) response = LocalCensus.new.call(document_type, document_number) unless response.valid? + + response end end diff --git a/lib/local_census.rb b/lib/local_census.rb index 6dce4df72..64c1a4052 100644 --- a/lib/local_census.rb +++ b/lib/local_census.rb @@ -16,9 +16,7 @@ class LocalCensus end def valid? - @body.valid? - rescue NoMethodError - false + @body.present? ? !@body.attributes.values.include?("" || nil) : false end def date_of_birth From dccf221b4716589f62a796bb1de2a745578ab5e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Fri, 14 Jul 2017 15:39:49 +0200 Subject: [PATCH 08/10] New tests added for Census calls Added new spec files for `CensusCaller` and `LocalCensus` libraries. --- spec/factories.rb | 8 +++- spec/lib/census_caller_spec.rb | 38 +++++++++++++++++ spec/lib/local_census_spec.rb | 55 +++++++++++++++++++++++++ spec/models/local_census_record_spec.rb | 5 --- 4 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 spec/lib/census_caller_spec.rb create mode 100644 spec/lib/local_census_spec.rb delete mode 100644 spec/models/local_census_record_spec.rb diff --git a/spec/factories.rb b/spec/factories.rb index 062c80aa2..e3a6debab 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,7 +1,11 @@ FactoryGirl.define do - factory :local_census_record do - + factory :local_census_record, class: 'LocalCensusRecord' do + document_number '12345678A' + document_type 1 + date_of_birth Date.new(1970, 1, 31) + postal_code '28002' end + sequence(:document_number) { |n| "#{n.to_s.rjust(8, '0')}X" } factory :user do diff --git a/spec/lib/census_caller_spec.rb b/spec/lib/census_caller_spec.rb new file mode 100644 index 000000000..00458a74f --- /dev/null +++ b/spec/lib/census_caller_spec.rb @@ -0,0 +1,38 @@ +require 'rails_helper' + +describe CensusCaller do + let(:api) { described_class.new } + + describe '#call' do + it "returns data from local_census_records if census API is not available" do + census_api_response = CensusApi::Response.new({:get_habita_datos_response=>{:get_habita_datos_return=>{:datos_habitante=>{}, :datos_vivienda=>{}}}}) + local_census_response = LocalCensus::Response.new(create(:local_census_record)) + + CensusApi.any_instance.stub(:call).and_return(census_api_response) + LocalCensus.any_instance.stub(:call).and_return(local_census_response) + + allow(CensusApi).to receive(:call).with(1, "12345678A") + allow(LocalCensus).to receive(:call).with(1, "12345678A") + + response = api.call(1, "12345678A") + + expect(response).to eq(local_census_response) + end + + it "returns data from census API if it's available and valid" do + census_api_response = CensusApi::Response.new({get_habita_datos_response: {get_habita_datos_return: {datos_habitante: {item: {fecha_nacimiento_string: "1-1-1980"}}}}}) + local_census_response = LocalCensus::Response.new(create(:local_census_record)) + + CensusApi.any_instance.stub(:call).and_return(census_api_response) + LocalCensus.any_instance.stub(:call).and_return(local_census_response) + + allow(CensusApi).to receive(:call).with(1, "12345678A") + allow(LocalCensus).to receive(:call).with(1, "12345678A") + + response = api.call(1, "12345678A") + + expect(response).to eq(census_api_response) + end + end + +end diff --git a/spec/lib/local_census_spec.rb b/spec/lib/local_census_spec.rb new file mode 100644 index 000000000..846082247 --- /dev/null +++ b/spec/lib/local_census_spec.rb @@ -0,0 +1,55 @@ +require 'rails_helper' + +describe LocalCensus do + let(:api) { described_class.new } + + describe '#get_document_number_variants' do + it "trims and cleans up entry" do + expect(api.get_document_number_variants(2, ' 1 2@ 34')).to eq(['1234']) + end + + it "returns only one try for passports & residence cards" do + expect(api.get_document_number_variants(2, '1234')).to eq(['1234']) + expect(api.get_document_number_variants(3, '1234')).to eq(['1234']) + end + + it 'takes only the last 8 digits for dnis and resicence cards' do + expect(api.get_document_number_variants(1, '543212345678')).to eq(['12345678']) + end + + it 'tries all the dni variants padding with zeroes' do + expect(api.get_document_number_variants(1, '0123456')).to eq(['123456', '0123456', '00123456']) + expect(api.get_document_number_variants(1, '00123456')).to eq(['123456', '0123456', '00123456']) + end + + it 'adds upper and lowercase letter when the letter is present' do + expect(api.get_document_number_variants(1, '1234567A')).to eq(['1234567', '01234567', '1234567a', '1234567A', '01234567a', '01234567A']) + end + end + + describe '#call' do + let(:invalid_body) { create(:local_census_record, postal_code: '') } + let(:valid_body) { create(:local_census_record) } + + it "returns the response for the first valid variant" do + allow(api).to receive(:get_record).with(1, "00123456").and_return(invalid_body) + allow(api).to receive(:get_record).with(1, "123456").and_return(invalid_body) + expect(api).to receive(:get_record).with(1, "0123456").and_return(valid_body) + + response = api.call(1, "123456") + + expect(response).to be_valid + expect(response.date_of_birth).to eq(Date.new(1970, 1, 31)) + end + + it "returns the last failed response" do + expect(api).to receive(:get_record).with(1, "00123456").and_return(invalid_body) + expect(api).to receive(:get_record).with(1, "123456").and_return(invalid_body) + expect(api).to receive(:get_record).with(1, "0123456").and_return(invalid_body) + response = api.call(1, "123456") + + expect(response).to_not be_valid + end + end + +end diff --git a/spec/models/local_census_record_spec.rb b/spec/models/local_census_record_spec.rb deleted file mode 100644 index f30474418..000000000 --- a/spec/models/local_census_record_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe LocalCensusRecord, type: :model do - pending "add some examples to (or delete) #{__FILE__}" -end From 1aeb068cb22bf008a6c515297782717d567cca66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 18 Jul 2017 13:07:30 +0200 Subject: [PATCH 09/10] Naming minor fix --- app/models/officing/residence.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/officing/residence.rb b/app/models/officing/residence.rb index 3f412dc41..3f5b184ba 100644 --- a/app/models/officing/residence.rb +++ b/app/models/officing/residence.rb @@ -4,7 +4,7 @@ class Officing::Residence attr_accessor :user, :officer, :document_number, :document_type, :year_of_birth - before_validation :call_census_api + before_validation :retrieve_census_data validates :document_number, presence: true validates :document_type, presence: true @@ -101,7 +101,7 @@ class Officing::Residence private - def call_census_api + def retrieve_census_data @census_api_response = CensusCaller.new.call(document_type, document_number) end From 0c84619cef4406a404ca6a3676e7110a5fddcb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Wed, 19 Jul 2017 19:49:16 +0200 Subject: [PATCH 10/10] Recovered `LocalCensusRecord` model validations --- app/models/local_census_record.rb | 5 ++++- spec/lib/local_census_spec.rb | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb index a94d80a78..1c2c42d44 100644 --- a/app/models/local_census_record.rb +++ b/app/models/local_census_record.rb @@ -1,3 +1,6 @@ class LocalCensusRecord < ActiveRecord::Base - + validates :document_number, presence: true + validates :document_type, presence: true + validates :date_of_birth, presence: true + validates :postal_code, presence: true end diff --git a/spec/lib/local_census_spec.rb b/spec/lib/local_census_spec.rb index 846082247..074d11a4c 100644 --- a/spec/lib/local_census_spec.rb +++ b/spec/lib/local_census_spec.rb @@ -28,7 +28,7 @@ describe LocalCensus do end describe '#call' do - let(:invalid_body) { create(:local_census_record, postal_code: '') } + let(:invalid_body) { nil } let(:valid_body) { create(:local_census_record) } it "returns the response for the first valid variant" do