diff --git a/app/models/failed_census_call.rb b/app/models/failed_census_call.rb new file mode 100644 index 000000000..80cad8918 --- /dev/null +++ b/app/models/failed_census_call.rb @@ -0,0 +1,3 @@ +class FailedCensusCall < ActiveRecord::Base + belongs_to :user +end diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 1e2d7778c..e65ecf584 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -42,8 +42,19 @@ class Verification::Residence unless residency.valid? errors.add(:residence_in_madrid, false) user.update(residence_verification_tries: user.residence_verification_tries += 1) + store_failed_attempt end self.date_of_birth = string_to_date(date_of_birth) end + def store_failed_attempt + FailedCensusCall.create({ + user: user, + document_number: document_number, + document_type: document_type, + date_of_birth: date_of_birth, + postal_code: postal_code + }) + end + end diff --git a/db/migrate/20150909211203_create_failed_census_calls.rb b/db/migrate/20150909211203_create_failed_census_calls.rb new file mode 100644 index 000000000..0850f68ea --- /dev/null +++ b/db/migrate/20150909211203_create_failed_census_calls.rb @@ -0,0 +1,13 @@ +class CreateFailedCensusCalls < ActiveRecord::Migration + def change + create_table :failed_census_calls do |t| + t.belongs_to :user, index: true, foreign_key: true + t.string :document_number + t.string :document_type + t.date :date_of_birth + t.string :postal_code + + t.timestamps null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index a9ca5d4b2..bf4f9efc8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -128,6 +128,18 @@ ActiveRecord::Schema.define(version: 20150910092713) do add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree + create_table "failed_census_calls", force: :cascade do |t| + t.integer "user_id" + t.string "document_number" + t.string "document_type" + t.date "date_of_birth" + t.string "postal_code" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "failed_census_calls", ["user_id"], name: "index_failed_census_calls_on_user_id", using: :btree + create_table "flags", force: :cascade do |t| t.integer "user_id" t.string "flaggable_type" @@ -301,6 +313,7 @@ ActiveRecord::Schema.define(version: 20150910092713) do add_index "votes", ["voter_id", "voter_type", "vote_scope"], name: "index_votes_on_voter_id_and_voter_type_and_vote_scope", using: :btree add_foreign_key "administrators", "users" + add_foreign_key "failed_census_calls", "users" add_foreign_key "flags", "users" add_foreign_key "identities", "users" add_foreign_key "moderators", "users" diff --git a/spec/factories.rb b/spec/factories.rb index f779f2e32..211520aec 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -28,6 +28,10 @@ FactoryGirl.define do date_of_birth Date.new(1980, 12, 31) postal_code "28013" terms_of_service '1' + + trait :invalid do + postal_code "12345" + end end factory :verification_sms, class: Verification::Sms do diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 14892ea5d..177e8f20d 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -76,4 +76,20 @@ describe Verification::Residence do end end + describe "Failed census call" do + it "stores failed census API calls" do + residence = build(:verification_residence, :invalid) + residence.save + + expect(FailedCensusCall.count).to eq(1) + expect(FailedCensusCall.first).to have_attributes({ + user_id: residence.user.id, + document_number: "12345678Z", + document_type: "1", + date_of_birth: Date.new(1980, 12, 31), + postal_code: "12345" + }) + end + end + end \ No newline at end of file