From 4889dc452740a2990bf55ee1c63880920c2baa72 Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 8 Feb 2017 14:53:29 +0100 Subject: [PATCH 1/4] Adds several migrations for new fields related with failed census calls --- .../20170208110146_add_officer_id_to_failed_census_calls.rb | 6 ++++++ ...111639_add_failed_census_calls_count_to_poll_officers.rb | 5 +++++ ...170208112814_add_year_of_birth_to_failed_census_calls.rb | 5 +++++ db/schema.rb | 4 ++++ 4 files changed, 20 insertions(+) create mode 100644 db/migrate/20170208110146_add_officer_id_to_failed_census_calls.rb create mode 100644 db/migrate/20170208111639_add_failed_census_calls_count_to_poll_officers.rb create mode 100644 db/migrate/20170208112814_add_year_of_birth_to_failed_census_calls.rb diff --git a/db/migrate/20170208110146_add_officer_id_to_failed_census_calls.rb b/db/migrate/20170208110146_add_officer_id_to_failed_census_calls.rb new file mode 100644 index 000000000..6ce289bec --- /dev/null +++ b/db/migrate/20170208110146_add_officer_id_to_failed_census_calls.rb @@ -0,0 +1,6 @@ +class AddOfficerIdToFailedCensusCalls < ActiveRecord::Migration + def change + add_column :failed_census_calls, :poll_officer_id, :integer, index: true + add_foreign_key :failed_census_calls, :poll_officers + end +end diff --git a/db/migrate/20170208111639_add_failed_census_calls_count_to_poll_officers.rb b/db/migrate/20170208111639_add_failed_census_calls_count_to_poll_officers.rb new file mode 100644 index 000000000..664c51749 --- /dev/null +++ b/db/migrate/20170208111639_add_failed_census_calls_count_to_poll_officers.rb @@ -0,0 +1,5 @@ +class AddFailedCensusCallsCountToPollOfficers < ActiveRecord::Migration + def change + add_column :poll_officers, :failed_census_calls_count, :integer, default: 0 + end +end diff --git a/db/migrate/20170208112814_add_year_of_birth_to_failed_census_calls.rb b/db/migrate/20170208112814_add_year_of_birth_to_failed_census_calls.rb new file mode 100644 index 000000000..a3fb5c96a --- /dev/null +++ b/db/migrate/20170208112814_add_year_of_birth_to_failed_census_calls.rb @@ -0,0 +1,5 @@ +class AddYearOfBirthToFailedCensusCalls < ActiveRecord::Migration + def change + add_column :failed_census_calls, :year_of_birth, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index d765a7c1d..84c4a6aaa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -282,6 +282,8 @@ ActiveRecord::Schema.define(version: 20170208160130) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "district_code" + t.integer "poll_officer_id" + t.integer "year_of_birth" end add_index "failed_census_calls", ["user_id"], name: "index_failed_census_calls_on_user_id", using: :btree @@ -438,6 +440,7 @@ ActiveRecord::Schema.define(version: 20170208160130) do create_table "poll_officers", force: :cascade do |t| t.integer "user_id" + t.integer "failed_census_calls_count", default: 0 end create_table "poll_partial_results", force: :cascade do |t| @@ -842,6 +845,7 @@ ActiveRecord::Schema.define(version: 20170208160130) do add_foreign_key "administrators", "users" add_foreign_key "annotations", "legislations" add_foreign_key "annotations", "users" + add_foreign_key "failed_census_calls", "poll_officers" add_foreign_key "failed_census_calls", "users" add_foreign_key "flags", "users" add_foreign_key "geozones_polls", "geozones" From 3b2f2b0fd7395cfcdc88027eb2851cbc3f64d973 Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 8 Feb 2017 14:54:29 +0100 Subject: [PATCH 2/4] Changes models so that officers can make failed census calls --- app/models/failed_census_call.rb | 1 + app/models/officing/residence.rb | 12 ++++++++++++ app/models/poll/officer.rb | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/models/failed_census_call.rb b/app/models/failed_census_call.rb index ac792d7b7..b7d60e63a 100644 --- a/app/models/failed_census_call.rb +++ b/app/models/failed_census_call.rb @@ -1,3 +1,4 @@ class FailedCensusCall < ActiveRecord::Base belongs_to :user, counter_cache: true + belongs_to :poll_officer, class_name: 'Poll::Officer', counter_cache: true end diff --git a/app/models/officing/residence.rb b/app/models/officing/residence.rb index fbae39562..bbb6d757b 100644 --- a/app/models/officing/residence.rb +++ b/app/models/officing/residence.rb @@ -41,6 +41,17 @@ class Officing::Residence end end + def store_failed_census_call + FailedCensusCall.create({ + user: user, + document_number: document_number, + document_type: document_type, + year_of_birth: year_of_birth, + poll_officer: officer + }) + + end + def user_exists? find_user_by_document.present? end @@ -54,6 +65,7 @@ class Officing::Residence return if errors.any? unless residency_valid? + store_failed_census_call errors.add(:residence_in_madrid, false) end end diff --git a/app/models/poll/officer.rb b/app/models/poll/officer.rb index 81a2afd5d..bf4c73c36 100644 --- a/app/models/poll/officer.rb +++ b/app/models/poll/officer.rb @@ -2,6 +2,7 @@ class Poll class Officer < ActiveRecord::Base belongs_to :user has_many :officer_assignments, class_name: "Poll::OfficerAssignment" + has_many :failed_census_calls, foreign_key: :poll_officer_id validates :user_id, presence: true, uniqueness: true @@ -22,4 +23,4 @@ class Poll end end -end \ No newline at end of file +end From 871846c070ffe48b3b40f1f09da784db47ccc3a4 Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 8 Feb 2017 14:55:15 +0100 Subject: [PATCH 3/4] includes :invalid option in officing_residence factory --- spec/factories.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/factories.rb b/spec/factories.rb index 70e3ad01c..de67a9c23 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -478,9 +478,14 @@ FactoryGirl.define do factory :officing_residence, class: 'Officing::Residence' do user + association :officer, factory: :poll_officer document_number document_type "1" year_of_birth "1980" + + trait :invalid do + year_of_birth Time.current.year + end end factory :organization do From 8ca4cc22b078fb267cd00a8e2d014e2d669e5691 Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 8 Feb 2017 14:55:44 +0100 Subject: [PATCH 4/4] Adds specs for creating failed officing census calls --- app/controllers/officing/residence_controller.rb | 4 ++-- spec/features/officing/residence_spec.rb | 12 ++++++++++-- spec/models/officing/residence_spec.rb | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/controllers/officing/residence_controller.rb b/app/controllers/officing/residence_controller.rb index 708d59109..9f24d3a90 100644 --- a/app/controllers/officing/residence_controller.rb +++ b/app/controllers/officing/residence_controller.rb @@ -8,7 +8,7 @@ class Officing::ResidenceController < Officing::BaseController end def create - @residence = Officing::Residence.new(residence_params) + @residence = Officing::Residence.new(residence_params.merge(officer: current_user.poll_officer)) if @residence.save redirect_to new_officing_voter_path(id: @residence.user.id), notice: t("officing.residence.flash.create") else @@ -34,4 +34,4 @@ class Officing::ResidenceController < Officing::BaseController redirect_to officing_root_path, notice: t("officing.residence.flash.not_allowed") end end -end \ No newline at end of file +end diff --git a/spec/features/officing/residence_spec.rb b/spec/features/officing/residence_spec.rb index b40eb8ca0..69ffd9d21 100644 --- a/spec/features/officing/residence_spec.rb +++ b/spec/features/officing/residence_spec.rb @@ -52,10 +52,11 @@ feature 'Residence' do end click_button 'Validate document' - expect(page).to have_content /\d errors? prevented the verification of this document/ + expect(page).to have_content(/\d errors? prevented the verification of this document/) end scenario "Error on Census (document number)" do + initial_failed_census_calls_count = officer.failed_census_calls_count within("#side_menu") do click_link "Validate document" end @@ -67,6 +68,13 @@ feature 'Residence' do click_button 'Validate document' expect(page).to have_content 'The Census was unable to verify this document' + + officer.reload + fcc = FailedCensusCall.last + expect(fcc).to be + expect(fcc.poll_officer).to eq(officer) + expect(officer.failed_census_calls.last).to eq(fcc) + expect(officer.failed_census_calls_count).to eq(initial_failed_census_calls_count + 1) end scenario "Error on Census (year of birth)" do @@ -85,4 +93,4 @@ feature 'Residence' do end -end \ No newline at end of file +end diff --git a/spec/models/officing/residence_spec.rb b/spec/models/officing/residence_spec.rb index a9052fedc..208122703 100644 --- a/spec/models/officing/residence_spec.rb +++ b/spec/models/officing/residence_spec.rb @@ -93,5 +93,19 @@ describe Officing::Residence do expect(user.geozone).to eq(geozone) end + it "stores failed census calls" do + residence = build(:officing_residence, :invalid, document_number: "12345678Z") + residence.save + + expect(FailedCensusCall.count).to eq(1) + expect(FailedCensusCall.first).to have_attributes({ + user_id: residence.user.id, + poll_officer_id: residence.officer.id, + document_number: "12345678Z", + document_type: "1", + year_of_birth: Time.current.year + }) + end + end end