require 'rails_helper' describe Verification::Residence do let(:residence) { build(:verification_residence, document_number: "12345678Z") } describe "validations" do it "should be valid" do expect(residence).to be_valid end describe "dates" do it "should be valid with a valid date of birth" do residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"1980"}) expect(residence.errors[:date_of_birth].size).to eq(0) end it "should not be valid without a date of birth" do residence = Verification::Residence.new({"date_of_birth(3i)"=>"", "date_of_birth(2i)"=>"", "date_of_birth(1i)"=>""}) expect(residence).to_not be_valid expect(residence.errors[:date_of_birth]).to include("can't be blank") end end it "should validate user has allowed age" do residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"}) expect(residence).to_not be_valid expect(residence.errors[:date_of_birth]).to include("You must be at least 16 years old") end describe "postal code" do it "should be valid with postal codes starting with 280" do residence.postal_code = "28012" residence.valid? expect(residence.errors[:postal_code].size).to eq(0) residence.postal_code = "28023" residence.valid? expect(residence.errors[:postal_code].size).to eq(0) end it "should not be valid with postal codes not starting with 280" do residence.postal_code = "12345" residence.valid? expect(residence.errors[:postal_code].size).to eq(1) residence.postal_code = "13280" residence.valid? expect(residence.errors[:postal_code].size).to eq(1) expect(residence.errors[:postal_code]).to include("In order to be verified, you must be registered in the municipality of Madrid.") end end it "should validate uniquness of document_number" do user = create(:user) residence.user = user residence.save build(:verification_residence) residence.valid? expect(residence.errors[:document_number]).to include("has already been taken") end it "should validate census terms" do residence.terms_of_service = nil expect(residence).to_not be_valid end end describe "new" do it "should upcase document number" do residence = Verification::Residence.new({document_number: "x1234567z"}) expect(residence.document_number).to eq("X1234567Z") end it "should remove all characters except numbers and letters" do residence = Verification::Residence.new({document_number: " 12.345.678 - B"}) expect(residence.document_number).to eq("12345678B") end end describe "save" do it "should store document number and type" do user = create(:user) residence.user = user residence.save user.reload expect(user.document_number).to eq('12345678Z') expect(user.document_type).to eq("1") end end describe "tries" do it "should increase tries after a call to the Census" do residence.postal_code = "28011" residence.valid? expect(residence.user.lock.tries).to eq(1) end it "should not increase tries after a validation error" do residence.postal_code = "" residence.valid? expect(residence.user.lock).to be nil end end describe "Failed census call" do it "stores failed census API calls" do residence = build(:verification_residence, :invalid, document_number: "12345678Z") 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: "28001" }) end end end