Browse Source
* Add OS_DATA_KEY env var * Add new UPRN and address columns to logs * Bugfix: use dynamic optional fields * Update optional fields * Add UPRN validation * Add UPRN Client * Add UPRN Presenter * UPRN questions and flows * Skip to non addresss questions if UPRN unknown * Address PO review comments and add missing specs * Display LA correctlypull/1378/head
68 changed files with 1866 additions and 138 deletions
@ -0,0 +1,2 @@ |
|||||||
|
APP_HOST="http://localhost:3000" |
||||||
|
OS_DATA_KEY=OS_DATA_KEY |
@ -0,0 +1,23 @@ |
|||||||
|
class Form::Sales::Pages::Address < ::Form::Page |
||||||
|
def initialize(id, hsh, subsection) |
||||||
|
super |
||||||
|
@id = "address" |
||||||
|
@header = "What is the property's address?" |
||||||
|
end |
||||||
|
|
||||||
|
def questions |
||||||
|
@questions ||= [ |
||||||
|
Form::Sales::Questions::AddressLine1.new(nil, nil, self), |
||||||
|
Form::Sales::Questions::AddressLine2.new(nil, nil, self), |
||||||
|
Form::Sales::Questions::TownOrCity.new(nil, nil, self), |
||||||
|
Form::Sales::Questions::County.new(nil, nil, self), |
||||||
|
Form::Sales::Questions::PostcodeForFullAddress.new(nil, nil, self), |
||||||
|
] |
||||||
|
end |
||||||
|
|
||||||
|
def routed_to?(log, _current_user = nil) |
||||||
|
return false if log.uprn_known.nil? |
||||||
|
|
||||||
|
log.uprn_confirmed != 1 || log.uprn_known.zero? |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,26 @@ |
|||||||
|
class Form::Sales::Pages::Uprn < ::Form::Page |
||||||
|
def initialize(id, hsh, subsection) |
||||||
|
super |
||||||
|
@id = "uprn" |
||||||
|
end |
||||||
|
|
||||||
|
def questions |
||||||
|
@questions ||= [ |
||||||
|
Form::Sales::Questions::Uprn.new(nil, nil, self), |
||||||
|
] |
||||||
|
end |
||||||
|
|
||||||
|
def routed_to?(log, _current_user = nil) |
||||||
|
log.uprn_known == 1 |
||||||
|
end |
||||||
|
|
||||||
|
def skip_text |
||||||
|
"Enter address instead" |
||||||
|
end |
||||||
|
|
||||||
|
def skip_href(log = nil) |
||||||
|
return unless log |
||||||
|
|
||||||
|
"/#{log.model_name.param_key.dasherize}s/#{log.id}/address" |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
class Form::Sales::Pages::UprnConfirmation < ::Form::Page |
||||||
|
def initialize(id, hsh, subsection) |
||||||
|
super |
||||||
|
@id = "uprn_confirmation" |
||||||
|
@header = "We found an address that might be this property" |
||||||
|
end |
||||||
|
|
||||||
|
def questions |
||||||
|
@questions ||= [ |
||||||
|
Form::Sales::Questions::UprnConfirmation.new(nil, nil, self), |
||||||
|
] |
||||||
|
end |
||||||
|
|
||||||
|
def routed_to?(log, _current_user = nil) |
||||||
|
log.uprn.present? && log.uprn_known == 1 |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,12 @@ |
|||||||
|
class Form::Sales::Pages::UprnKnown < ::Form::Page |
||||||
|
def initialize(id, hsh, subsection) |
||||||
|
super |
||||||
|
@id = "uprn_known" |
||||||
|
end |
||||||
|
|
||||||
|
def questions |
||||||
|
@questions ||= [ |
||||||
|
Form::Sales::Questions::UprnKnown.new(nil, nil, self), |
||||||
|
] |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,37 @@ |
|||||||
|
class Form::Sales::Questions::AddressLine1 < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "address_line1" |
||||||
|
@check_answer_label = "Address" |
||||||
|
@header = "Address line 1" |
||||||
|
@type = "text" |
||||||
|
@plain_label = true |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(log, _current_user = nil) |
||||||
|
return true if log.uprn_known.nil? |
||||||
|
return false if log.uprn_known&.zero? |
||||||
|
return true if log.uprn_confirmed.nil? && log.uprn.present? |
||||||
|
return true if log.uprn_known == 1 && log.uprn.blank? |
||||||
|
|
||||||
|
log.uprn_confirmed == 1 |
||||||
|
end |
||||||
|
|
||||||
|
def answer_label(log, _current_user = nil) |
||||||
|
[ |
||||||
|
log.address_line1, |
||||||
|
log.address_line2, |
||||||
|
log.postcode_full, |
||||||
|
log.town_or_city, |
||||||
|
log.county, |
||||||
|
].select(&:present?).join("\n") |
||||||
|
end |
||||||
|
|
||||||
|
def get_extra_check_answer_value(log) |
||||||
|
return unless log.is_la_inferred? |
||||||
|
|
||||||
|
la = LocalAuthority.find_by(code: log.la)&.name |
||||||
|
|
||||||
|
la.presence |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,13 @@ |
|||||||
|
class Form::Sales::Questions::AddressLine2 < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "address_line2" |
||||||
|
@header = "Address line 2 (optional)" |
||||||
|
@type = "text" |
||||||
|
@plain_label = true |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(_log = nil, _current_user = nil) |
||||||
|
true |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,13 @@ |
|||||||
|
class Form::Sales::Questions::County < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "county" |
||||||
|
@header = "County (optional)" |
||||||
|
@type = "text" |
||||||
|
@plain_label = true |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(_log = nil, _current_user = nil) |
||||||
|
true |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,25 @@ |
|||||||
|
class Form::Sales::Questions::PostcodeForFullAddress < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "postcode_full" |
||||||
|
@header = "Postcode" |
||||||
|
@type = "text" |
||||||
|
@width = 5 |
||||||
|
@inferred_check_answers_value = [{ |
||||||
|
"condition" => { |
||||||
|
"pcodenk" => 1, |
||||||
|
}, |
||||||
|
"value" => "Not known", |
||||||
|
}] |
||||||
|
@inferred_answers = { |
||||||
|
"la" => { |
||||||
|
"is_la_inferred" => true, |
||||||
|
}, |
||||||
|
} |
||||||
|
@plain_label = true |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(_log = nil, _current_user = nil) |
||||||
|
true |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,13 @@ |
|||||||
|
class Form::Sales::Questions::TownOrCity < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "town_or_city" |
||||||
|
@header = "Town or city" |
||||||
|
@type = "text" |
||||||
|
@plain_label = true |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(_log = nil, _current_user = nil) |
||||||
|
true |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,34 @@ |
|||||||
|
class Form::Sales::Questions::Uprn < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "uprn" |
||||||
|
@check_answer_label = "UPRN" |
||||||
|
@header = "What is the property's UPRN" |
||||||
|
@type = "text" |
||||||
|
@hint_text = "The Unique Property Reference Number (UPRN) is a unique number system created by Ordnance Survey and used by housing providers and sectors UK-wide. For example 10010457355." |
||||||
|
@width = 10 |
||||||
|
end |
||||||
|
|
||||||
|
def unanswered_error_message |
||||||
|
I18n.t("validations.property.uprn.invalid") |
||||||
|
end |
||||||
|
|
||||||
|
def get_extra_check_answer_value(log) |
||||||
|
value = [ |
||||||
|
log.address_line1, |
||||||
|
log.address_line2, |
||||||
|
log.town_or_city, |
||||||
|
log.county, |
||||||
|
log.postcode_full, |
||||||
|
(LocalAuthority.find_by(code: log.la)&.name if log.la.present?), |
||||||
|
].select(&:present?) |
||||||
|
|
||||||
|
return unless value.any? |
||||||
|
|
||||||
|
"\n\n#{value.join("\n")}" |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(log, _current_user = nil) |
||||||
|
log.uprn_known != 1 |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,34 @@ |
|||||||
|
class Form::Sales::Questions::UprnConfirmation < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "uprn_confirmed" |
||||||
|
@header = "Is this the property address?" |
||||||
|
@type = "radio" |
||||||
|
@answer_options = ANSWER_OPTIONS |
||||||
|
@check_answer_label = "Is this the right address?" |
||||||
|
end |
||||||
|
|
||||||
|
ANSWER_OPTIONS = { |
||||||
|
"1" => { "value" => "Yes" }, |
||||||
|
"0" => { "value" => "No, I want to enter the address manually" }, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
def notification_banner(log = nil) |
||||||
|
return unless log&.uprn |
||||||
|
|
||||||
|
{ |
||||||
|
title: "UPRN: #{log.uprn}", |
||||||
|
heading: [ |
||||||
|
log.address_line1, |
||||||
|
log.address_line2, |
||||||
|
log.postcode_full, |
||||||
|
log.town_or_city, |
||||||
|
log.county, |
||||||
|
].select(&:present?).join("\n"), |
||||||
|
} |
||||||
|
end |
||||||
|
|
||||||
|
def hidden_in_check_answers?(log, _current_user = nil) |
||||||
|
log.uprn_known != 1 || log.uprn_confirmed.present? |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,21 @@ |
|||||||
|
class Form::Sales::Questions::UprnKnown < ::Form::Question |
||||||
|
def initialize(id, hsh, page) |
||||||
|
super |
||||||
|
@id = "uprn_known" |
||||||
|
@check_answer_label = "UPRN known?" |
||||||
|
@header = "Do you know the property UPRN?" |
||||||
|
@type = "radio" |
||||||
|
@answer_options = ANSWER_OPTIONS |
||||||
|
@hint_text = "The Unique Property Reference Number (UPRN) is a unique number system created by Ordnance Survey and used by housing providers and sectors UK-wide. For example 10010457355.<br><br> |
||||||
|
You can continue without the UPRN, but it means we will need you to enter the address of the property." |
||||||
|
end |
||||||
|
|
||||||
|
ANSWER_OPTIONS = { |
||||||
|
"1" => { "value" => "Yes" }, |
||||||
|
"0" => { "value" => "No" }, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
def unanswered_error_message |
||||||
|
I18n.t("validations.property.uprn_known.invalid") |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,50 @@ |
|||||||
|
require "net/http" |
||||||
|
|
||||||
|
class UprnClient |
||||||
|
attr_reader :uprn |
||||||
|
attr_accessor :error |
||||||
|
|
||||||
|
ADDRESS = "api.os.uk".freeze |
||||||
|
PATH = "/search/places/v1/uprn".freeze |
||||||
|
|
||||||
|
def initialize(uprn) |
||||||
|
@uprn = uprn |
||||||
|
end |
||||||
|
|
||||||
|
def call |
||||||
|
unless response.is_a?(Net::HTTPSuccess) && result.present? |
||||||
|
@error = "UPRN is not recognised. Check the number, or enter the address" |
||||||
|
end |
||||||
|
rescue JSON::ParserError |
||||||
|
@error = "UPRN is not recognised. Check the number, or enter the address" |
||||||
|
end |
||||||
|
|
||||||
|
def result |
||||||
|
@result ||= JSON.parse(response.body).dig("results", 0, "DPA") |
||||||
|
end |
||||||
|
|
||||||
|
private |
||||||
|
|
||||||
|
def http_client |
||||||
|
client = Net::HTTP.new(ADDRESS, 443) |
||||||
|
client.use_ssl = true |
||||||
|
client.verify_mode = OpenSSL::SSL::VERIFY_PEER |
||||||
|
client.max_retries = 3 |
||||||
|
client.read_timeout = 10 # seconds |
||||||
|
client |
||||||
|
end |
||||||
|
|
||||||
|
def endpoint_uri |
||||||
|
uri = URI(PATH) |
||||||
|
params = { |
||||||
|
uprn:, |
||||||
|
key: ENV["OS_DATA_KEY"], |
||||||
|
} |
||||||
|
uri.query = URI.encode_www_form(params) |
||||||
|
uri.to_s |
||||||
|
end |
||||||
|
|
||||||
|
def response |
||||||
|
@response ||= http_client.request_get(endpoint_uri) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,41 @@ |
|||||||
|
require "net/http" |
||||||
|
|
||||||
|
class UprnDataPresenter |
||||||
|
attr_reader :data |
||||||
|
|
||||||
|
def initialize(data) |
||||||
|
@data = data |
||||||
|
end |
||||||
|
|
||||||
|
def postcode |
||||||
|
data["POSTCODE"] |
||||||
|
end |
||||||
|
|
||||||
|
def address_line1 |
||||||
|
data.values_at( |
||||||
|
"PO_BOX_NUMBER", |
||||||
|
"ORGANISATION_NAME", |
||||||
|
"DEPARTMENT_NAME", |
||||||
|
"SUB_BUILDING_NAME", |
||||||
|
"BUILDING_NAME", |
||||||
|
"BUILDING_NUMBER", |
||||||
|
"DEPENDENT_THOROUGHFARE_NAME", |
||||||
|
"THOROUGHFARE_NAME", |
||||||
|
).compact |
||||||
|
.join(", ") |
||||||
|
.titleize |
||||||
|
end |
||||||
|
|
||||||
|
def address_line2 |
||||||
|
data.values_at( |
||||||
|
"DOUBLE_DEPENDENT_LOCALITY", "DEPENDENT_LOCALITY" |
||||||
|
).compact |
||||||
|
.join(", ") |
||||||
|
.titleize |
||||||
|
.presence |
||||||
|
end |
||||||
|
|
||||||
|
def town_or_city |
||||||
|
data["POST_TOWN"].titleize |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,15 @@ |
|||||||
|
class AddUprnToLogs < ActiveRecord::Migration[7.0] |
||||||
|
def change |
||||||
|
change_table :sales_logs, bulk: true do |t| |
||||||
|
t.column :uprn, :string |
||||||
|
t.column :uprn_known, :integer |
||||||
|
t.column :uprn_confirmed, :integer |
||||||
|
end |
||||||
|
|
||||||
|
change_table :lettings_logs, bulk: true do |t| |
||||||
|
t.column :uprn, :string |
||||||
|
t.column :uprn_known, :integer |
||||||
|
t.column :uprn_confirmed, :integer |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,15 @@ |
|||||||
|
class AddAddressToLogs < ActiveRecord::Migration[7.0] |
||||||
|
change_table :sales_logs, bulk: true do |t| |
||||||
|
t.column :address_line1, :string |
||||||
|
t.column :address_line2, :string |
||||||
|
t.column :town_or_city, :string |
||||||
|
t.column :county, :string |
||||||
|
end |
||||||
|
|
||||||
|
change_table :lettings_logs, bulk: true do |t| |
||||||
|
t.column :address_line1, :string |
||||||
|
t.column :address_line2, :string |
||||||
|
t.column :town_or_city, :string |
||||||
|
t.column :county, :string |
||||||
|
end |
||||||
|
end |
|
|
|
@ -0,0 +1,73 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Pages::Address, type: :model do |
||||||
|
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||||
|
|
||||||
|
let(:page_id) { nil } |
||||||
|
let(:page_definition) { nil } |
||||||
|
let(:subsection) { instance_double(Form::Subsection) } |
||||||
|
|
||||||
|
it "has correct subsection" do |
||||||
|
expect(page.subsection).to eq(subsection) |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct questions" do |
||||||
|
expect(page.questions.map(&:id)).to eq(%w[address_line1 address_line2 town_or_city county postcode_full]) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(page.id).to eq("address") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(page.header).to eq("What is the property's address?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct description" do |
||||||
|
expect(page.description).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct depends_on" do |
||||||
|
expect(page.depends_on).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
describe "has correct routed_to?" do |
||||||
|
context "when uprn_known == nil" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: nil) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(page.routed_to?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_confirmed != 1" do |
||||||
|
let(:log) do |
||||||
|
create(:sales_log, uprn_known: 1, uprn_confirmed: 0) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(page.routed_to?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known == 0" do |
||||||
|
let(:log) do |
||||||
|
create(:sales_log, uprn_known: 0, uprn_confirmed: 0) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(page.routed_to?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_confirmed == 1 && uprn_known != 0" do |
||||||
|
let(:log) do |
||||||
|
create(:sales_log, uprn_known: 1, uprn_confirmed: 1) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(page.routed_to?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,59 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Pages::UprnConfirmation, type: :model do |
||||||
|
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||||
|
|
||||||
|
let(:page_id) { nil } |
||||||
|
let(:page_definition) { nil } |
||||||
|
let(:subsection) { instance_double(Form::Subsection) } |
||||||
|
|
||||||
|
it "has correct subsection" do |
||||||
|
expect(page.subsection).to eq(subsection) |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct questions" do |
||||||
|
expect(page.questions.map(&:id)).to eq(%w[uprn_confirmed]) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(page.id).to eq("uprn_confirmation") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(page.header).to eq("We found an address that might be this property") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct description" do |
||||||
|
expect(page.description).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct depends_on" do |
||||||
|
expect(page.depends_on).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
describe "has correct routed_to?" do |
||||||
|
context "when uprn present && uprn_known == 1 " do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1, uprn: "123456789") } |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(page.routed_to?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn = nil" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1, uprn: nil) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(page.routed_to?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known == 0" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 0, uprn: "123456789") } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(page.routed_to?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,33 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Pages::UprnKnown, type: :model do |
||||||
|
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||||
|
|
||||||
|
let(:page_id) { nil } |
||||||
|
let(:page_definition) { nil } |
||||||
|
let(:subsection) { instance_double(Form::Subsection) } |
||||||
|
|
||||||
|
it "has correct subsection" do |
||||||
|
expect(page.subsection).to eq(subsection) |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct questions" do |
||||||
|
expect(page.questions.map(&:id)).to eq(%w[uprn_known]) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(page.id).to eq("uprn_known") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(page.header).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct description" do |
||||||
|
expect(page.description).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct depends_on" do |
||||||
|
expect(page.depends_on).to be_nil |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,73 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Pages::Uprn, type: :model do |
||||||
|
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||||
|
|
||||||
|
let(:page_id) { nil } |
||||||
|
let(:page_definition) { nil } |
||||||
|
let(:subsection) { instance_double(Form::Subsection) } |
||||||
|
|
||||||
|
it "has correct subsection" do |
||||||
|
expect(page.subsection).to eq(subsection) |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct questions" do |
||||||
|
expect(page.questions.map(&:id)).to eq(%w[uprn]) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(page.id).to eq("uprn") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(page.header).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct description" do |
||||||
|
expect(page.description).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct depends_on" do |
||||||
|
expect(page.depends_on).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct skip_text" do |
||||||
|
expect(page.skip_text).to eq("Enter address instead") |
||||||
|
end |
||||||
|
|
||||||
|
describe "has correct routed_to?" do |
||||||
|
context "when uprn_known != 1" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 0) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(page.routed_to?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known == 1" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1) } |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(page.routed_to?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "has correct skip_href" do |
||||||
|
context "when log is nil" do |
||||||
|
it "is nil" do |
||||||
|
expect(page.skip_href).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when log is present" do |
||||||
|
let(:log) { create(:sales_log) } |
||||||
|
|
||||||
|
it "points to address page" do |
||||||
|
expect(page.skip_href(log)).to eq( |
||||||
|
"/sales-logs/#{log.id}/address", |
||||||
|
) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,75 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::AddressLine1, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("address_line1") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Address line 1") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to eq("Address") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred check answers value" do |
||||||
|
expect(question.inferred_check_answers_value).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answers_card_number" do |
||||||
|
expect(question.check_answers_card_number).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
describe "has the correct get_extra_check_answer_value" do |
||||||
|
context "when la is not present" do |
||||||
|
let(:log) { create(:sales_log, la: nil) } |
||||||
|
|
||||||
|
it "returns nil" do |
||||||
|
expect(question.get_extra_check_answer_value(log)).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when la is present but not inferred" do |
||||||
|
let(:log) { create(:sales_log, la: "E09000003", is_la_inferred: false) } |
||||||
|
|
||||||
|
it "returns nil" do |
||||||
|
expect(question.get_extra_check_answer_value(log)).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when la is present but inferred" do |
||||||
|
let(:log) { create(:sales_log, la: "E09000003") } |
||||||
|
|
||||||
|
before do |
||||||
|
allow(log).to receive(:is_la_inferred?).and_return(true) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns the la" do |
||||||
|
expect(question.get_extra_check_answer_value(log)).to eq("Barnet") |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,49 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::AddressLine2, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("address_line2") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Address line 2 (optional)") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred check answers value" do |
||||||
|
expect(question.inferred_check_answers_value).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answers_card_number" do |
||||||
|
expect(question.check_answers_card_number).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hidden_in_check_answers" do |
||||||
|
expect(question.hidden_in_check_answers?).to eq(true) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,49 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::County, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("county") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("County (optional)") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred check answers value" do |
||||||
|
expect(question.inferred_check_answers_value).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answers_card_number" do |
||||||
|
expect(question.check_answers_card_number).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hidden_in_check_answers" do |
||||||
|
expect(question.hidden_in_check_answers?).to eq(true) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,62 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::PostcodeForFullAddress, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("postcode_full") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Postcode") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct width" do |
||||||
|
expect(question.width).to eq(5) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred_answers" do |
||||||
|
expect(question.inferred_answers).to eq({ |
||||||
|
"la" => { |
||||||
|
"is_la_inferred" => true, |
||||||
|
}, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred_check_answers_value" do |
||||||
|
expect(question.inferred_check_answers_value).to eq([{ |
||||||
|
"condition" => { |
||||||
|
"pcodenk" => 1, |
||||||
|
}, |
||||||
|
"value" => "Not known", |
||||||
|
}]) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hidden_in_check_answers" do |
||||||
|
expect(question.hidden_in_check_answers?).to eq(true) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,49 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::TownOrCity, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("town_or_city") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Town or city") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct inferred check answers value" do |
||||||
|
expect(question.inferred_check_answers_value).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answers_card_number" do |
||||||
|
expect(question.check_answers_card_number).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hidden_in_check_answers" do |
||||||
|
expect(question.hidden_in_check_answers?).to eq(true) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,90 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::UprnConfirmation, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("uprn_confirmed") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Is this the property address?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to eq("Is this the right address?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("radio") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct unanswered_error_message" do |
||||||
|
expect(question.unanswered_error_message).to eq("You must answer is this the right address?") |
||||||
|
end |
||||||
|
|
||||||
|
describe "notification_banner" do |
||||||
|
context "when address is not present" do |
||||||
|
it "returns nil" do |
||||||
|
log = create(:sales_log) |
||||||
|
|
||||||
|
expect(question.notification_banner(log)).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when address is present" do |
||||||
|
it "returns formatted value" do |
||||||
|
log = create(:sales_log, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", postcode_full: "AA1 1AA", uprn: "1234") |
||||||
|
|
||||||
|
expect(question.notification_banner(log)).to eq( |
||||||
|
{ |
||||||
|
heading: "1, Test Street\nAA1 1AA\nTest Town\nTest County", |
||||||
|
title: "UPRN: 1234", |
||||||
|
}, |
||||||
|
) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "has the correct hidden_in_check_answers" do |
||||||
|
context "when uprn_known != 1 && uprn_confirmed == nil" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 0, uprn_confirmed: nil) } |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(question.hidden_in_check_answers?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known == 1 && uprn_confirmed == nil" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1, uprn_confirmed: nil) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(question.hidden_in_check_answers?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known != 1 && uprn_confirmed == 1" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1, uprn_confirmed: 1) } |
||||||
|
|
||||||
|
it "returns true" do |
||||||
|
expect(question.hidden_in_check_answers?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,59 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::UprnKnown, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("uprn_known") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("Do you know the property UPRN?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to eq("UPRN known?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("radio") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct answer_options" do |
||||||
|
expect(question.answer_options).to eq({ |
||||||
|
"0" => { "value" => "No" }, |
||||||
|
"1" => { "value" => "Yes" }, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
it "has correct conditional for" do |
||||||
|
expect(question.conditional_for).to be_nil |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct unanswered_error_message" do |
||||||
|
expect(question.unanswered_error_message).to eq("You must answer UPRN known?") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to eq( |
||||||
|
"The Unique Property Reference Number (UPRN) is a unique number system created by Ordnance Survey and used by housing providers and sectors UK-wide. For example 10010457355.<br><br> |
||||||
|
You can continue without the UPRN, but it means we will need you to enter the address of the property.", |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hidden_in_check_answers" do |
||||||
|
expect(question.hidden_in_check_answers).to be_nil |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,88 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Form::Sales::Questions::Uprn, type: :model do |
||||||
|
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||||
|
|
||||||
|
let(:question_id) { nil } |
||||||
|
let(:question_definition) { nil } |
||||||
|
let(:page) { instance_double(Form::Page) } |
||||||
|
|
||||||
|
it "has correct page" do |
||||||
|
expect(question.page).to eq(page) |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct id" do |
||||||
|
expect(question.id).to eq("uprn") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct header" do |
||||||
|
expect(question.header).to eq("What is the property's UPRN") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct check_answer_label" do |
||||||
|
expect(question.check_answer_label).to eq("UPRN") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct type" do |
||||||
|
expect(question.type).to eq("text") |
||||||
|
end |
||||||
|
|
||||||
|
it "is not marked as derived" do |
||||||
|
expect(question.derived?).to be false |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct hint" do |
||||||
|
expect(question.hint_text).to eq("The Unique Property Reference Number (UPRN) is a unique number system created by Ordnance Survey and used by housing providers and sectors UK-wide. For example 10010457355.") |
||||||
|
end |
||||||
|
|
||||||
|
it "has the correct unanswered_error_message" do |
||||||
|
expect(question.unanswered_error_message).to eq("UPRN must be 12 digits or less") |
||||||
|
end |
||||||
|
|
||||||
|
describe "get_extra_check_answer_value" do |
||||||
|
context "when address is not present" do |
||||||
|
let(:log) { create(:sales_log) } |
||||||
|
|
||||||
|
it "returns nil" do |
||||||
|
expect(question.get_extra_check_answer_value(log)).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when address is present" do |
||||||
|
let(:log) do |
||||||
|
create( |
||||||
|
:sales_log, |
||||||
|
address_line1: "1, Test Street", |
||||||
|
town_or_city: "Test Town", |
||||||
|
county: "Test County", |
||||||
|
postcode_full: "AA1 1AA", |
||||||
|
la: "E09000003", |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns formatted value" do |
||||||
|
expect(question.get_extra_check_answer_value(log)).to eq( |
||||||
|
"\n\n1, Test Street\nTest Town\nTest County\nAA1 1AA\nWestminster", |
||||||
|
) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "has the correct hidden_in_check_answers" do |
||||||
|
context "when uprn_known == 1" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 1) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(question.hidden_in_check_answers?(log)).to eq(false) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when uprn_known != 1" do |
||||||
|
let(:log) { create(:sales_log, uprn_known: 0) } |
||||||
|
|
||||||
|
it "returns false" do |
||||||
|
expect(question.hidden_in_check_answers?(log)).to eq(true) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,68 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
describe UprnClient do |
||||||
|
let(:client) { described_class.new("123") } |
||||||
|
|
||||||
|
let(:valid_response) do |
||||||
|
{ results: [{ DPA: { postcode: "12345" } }] }.to_json |
||||||
|
end |
||||||
|
|
||||||
|
def stub_api_request(body:, status: 200) |
||||||
|
stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=123") |
||||||
|
.to_return(status:, body:, headers: {}) |
||||||
|
end |
||||||
|
|
||||||
|
describe "call" do |
||||||
|
context "when json parse error" do |
||||||
|
before do |
||||||
|
stub_api_request(body: "{", status: 200) |
||||||
|
|
||||||
|
client.call |
||||||
|
end |
||||||
|
|
||||||
|
it "returns error" do |
||||||
|
expect(client.error).to eq("UPRN is not recognised. Check the number, or enter the address") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when http error" do |
||||||
|
before do |
||||||
|
stub_api_request(body: valid_response, status: 500) |
||||||
|
|
||||||
|
client.call |
||||||
|
end |
||||||
|
|
||||||
|
it "returns error" do |
||||||
|
expect(client.error).to eq("UPRN is not recognised. Check the number, or enter the address") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when results empty" do |
||||||
|
before do |
||||||
|
stub_api_request(body: {}.to_json) |
||||||
|
|
||||||
|
client.call |
||||||
|
end |
||||||
|
|
||||||
|
it "returns error" do |
||||||
|
expect(client.error).to eq("UPRN is not recognised. Check the number, or enter the address") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "with results" do |
||||||
|
before do |
||||||
|
stub_api_request(body: valid_response) |
||||||
|
|
||||||
|
client.call |
||||||
|
end |
||||||
|
|
||||||
|
it "returns result" do |
||||||
|
expect(client.result).to eq({ "postcode" => "12345" }) |
||||||
|
end |
||||||
|
|
||||||
|
it "returns no error" do |
||||||
|
expect(client.error).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,66 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
describe UprnDataPresenter do |
||||||
|
let(:data) do |
||||||
|
JSON.parse( |
||||||
|
'{ |
||||||
|
"UPRN": "UPRN", |
||||||
|
"UDPRN": "UDPRN", |
||||||
|
"ADDRESS": "full address", |
||||||
|
"SUB_BUILDING_NAME": "0", |
||||||
|
"BUILDING_NAME": "building name", |
||||||
|
"THOROUGHFARE_NAME": "thoroughfare", |
||||||
|
"POST_TOWN": "posttown", |
||||||
|
"POSTCODE": "postcode", |
||||||
|
"STATUS": "APPROVED", |
||||||
|
"DOUBLE_DEPENDENT_LOCALITY": "double dependent locality", |
||||||
|
"DEPENDENT_LOCALITY": "dependent locality", |
||||||
|
"CLASSIFICATION_CODE": "classification code", |
||||||
|
"LOCAL_CUSTODIAN_CODE_DESCRIPTION": "LONDON BOROUGH OF HARINGEY", |
||||||
|
"BLPU_STATE_CODE": "2", |
||||||
|
"BLPU_STATE_CODE_DESCRIPTION": "In use", |
||||||
|
"LAST_UPDATE_DATE": "31/07/2020", |
||||||
|
"ENTRY_DATE": "30/01/2015", |
||||||
|
"BLPU_STATE_DATE": "30/01/2015", |
||||||
|
"LANGUAGE": "EN", |
||||||
|
"MATCH_DESCRIPTION": "EXACT" |
||||||
|
}', |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
let(:presenter) { described_class.new(data) } |
||||||
|
|
||||||
|
describe "#postcode" do |
||||||
|
it "returns postcode" do |
||||||
|
expect(presenter.postcode).to eq("postcode") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "#address_line1" do |
||||||
|
it "returns address_line1" do |
||||||
|
expect(presenter.address_line1).to eq("0, Building Name, Thoroughfare") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "#address_line2" do |
||||||
|
it "returns address_line2" do |
||||||
|
expect(presenter.address_line2).to eq("Double Dependent Locality, Dependent Locality") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "#town_or_city" do |
||||||
|
it "returns town_or_city" do |
||||||
|
expect(presenter.town_or_city).to eq("Posttown") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when address_line2 fields are missing" do |
||||||
|
let(:data) { {} } |
||||||
|
|
||||||
|
describe "#address_line2" do |
||||||
|
it "returns nil" do |
||||||
|
expect(presenter.address_line2).to be_nil |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue