Simplify tests validating postal codes
We weren't using the `be_valid` matcher because we had errors in the census data. Removing the `before_validation` callback and using a method to get the census data instead allows us to stub the `census_data` method in the tests, and so we can use the `be_valid` matcher instead of calling `valid?` manually and then checking for errors.
This commit is contained in:
@@ -5,8 +5,6 @@ class Verification::Residence
|
|||||||
|
|
||||||
attr_accessor :user, :document_number, :document_type, :date_of_birth, :postal_code, :terms_of_service
|
attr_accessor :user, :document_number, :document_type, :date_of_birth, :postal_code, :terms_of_service
|
||||||
|
|
||||||
before_validation :retrieve_census_data
|
|
||||||
|
|
||||||
validates :document_number, presence: true
|
validates :document_number, presence: true
|
||||||
validates :document_type, presence: true
|
validates :document_type, presence: true
|
||||||
validates :date_of_birth, presence: true
|
validates :date_of_birth, presence: true
|
||||||
@@ -69,11 +67,11 @@ class Verification::Residence
|
|||||||
end
|
end
|
||||||
|
|
||||||
def district_code
|
def district_code
|
||||||
@census_data.district_code
|
census_data.district_code
|
||||||
end
|
end
|
||||||
|
|
||||||
def gender
|
def gender
|
||||||
@census_data.gender
|
census_data.gender
|
||||||
end
|
end
|
||||||
|
|
||||||
def local_postal_code
|
def local_postal_code
|
||||||
@@ -92,14 +90,14 @@ class Verification::Residence
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def retrieve_census_data
|
def census_data
|
||||||
@census_data = CensusCaller.new.call(document_type, document_number, date_of_birth, postal_code)
|
@census_data ||= CensusCaller.new.call(document_type, document_number, date_of_birth, postal_code)
|
||||||
end
|
end
|
||||||
|
|
||||||
def residency_valid?
|
def residency_valid?
|
||||||
@census_data.valid? &&
|
census_data.valid? &&
|
||||||
@census_data.postal_code == postal_code &&
|
census_data.postal_code == postal_code &&
|
||||||
@census_data.date_of_birth == date_of_birth
|
census_data.date_of_birth == date_of_birth
|
||||||
end
|
end
|
||||||
|
|
||||||
def clean_document_number
|
def clean_document_number
|
||||||
|
|||||||
@@ -48,44 +48,39 @@ describe Verification::Residence do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "postal code" do
|
describe "postal code" do
|
||||||
before { Setting["postal_codes"] = "28001-28100,28200" }
|
before do
|
||||||
|
Setting["postal_codes"] = "28001-28100,28200"
|
||||||
|
|
||||||
|
census_data = double(valid?: true, district_code: "", gender: "")
|
||||||
|
allow(census_data).to receive(:postal_code) { residence.postal_code }
|
||||||
|
allow(census_data).to receive(:date_of_birth) { residence.date_of_birth }
|
||||||
|
allow(residence).to receive(:census_data).and_return(census_data)
|
||||||
|
end
|
||||||
|
|
||||||
it "is valid with postal codes included in settings" do
|
it "is valid with postal codes included in settings" do
|
||||||
residence.postal_code = "28012"
|
residence.postal_code = "28012"
|
||||||
residence.valid?
|
expect(residence).to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code]).to be_empty
|
|
||||||
|
|
||||||
residence.postal_code = "28001"
|
residence.postal_code = "28001"
|
||||||
residence.valid?
|
expect(residence).to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code]).to be_empty
|
|
||||||
|
|
||||||
residence.postal_code = "28100"
|
residence.postal_code = "28100"
|
||||||
residence.valid?
|
expect(residence).to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code]).to be_empty
|
|
||||||
|
|
||||||
residence.postal_code = "28200"
|
residence.postal_code = "28200"
|
||||||
residence.valid?
|
expect(residence).to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code]).to be_empty
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is not valid with postal codes not included in settings" do
|
it "is not valid with postal codes not included in settings" do
|
||||||
residence.postal_code = "12345"
|
residence.postal_code = "12345"
|
||||||
residence.valid?
|
expect(residence).not_to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code].size).to eq(1)
|
|
||||||
|
|
||||||
residence.postal_code = "28000"
|
residence.postal_code = "28000"
|
||||||
residence.valid?
|
expect(residence).not_to be_valid
|
||||||
|
|
||||||
expect(residence.errors[:postal_code].size).to eq(1)
|
|
||||||
|
|
||||||
residence.postal_code = "28101"
|
residence.postal_code = "28101"
|
||||||
residence.valid?
|
expect(residence).not_to be_valid
|
||||||
|
expect(residence.errors.count).to eq 1
|
||||||
expect(residence.errors[:postal_code]).to eq ["In order to be verified, you must be registered."]
|
expect(residence.errors[:postal_code]).to eq ["In order to be verified, you must be registered."]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user