From 2d4e34684484d17f1120027b67abfddcbd35cfa5 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 25 Mar 2022 11:30:03 +0000 Subject: [PATCH] Normalise the postcodes --- app/models/case_log.rb | 2 + .../form/conditional_questions_spec.rb | 2 +- spec/features/form/saving_data_spec.rb | 2 +- spec/fixtures/exports/case_logs.xml | 6 +-- spec/models/case_log_spec.rb | 49 ++++++++++++++++++- spec/requests/case_logs_controller_spec.rb | 6 +-- 6 files changed, 57 insertions(+), 10 deletions(-) diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 65b409ab9..076ecb790 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -397,10 +397,12 @@ private end def process_postcode_changes! + self.postcode_full = postcode_full.present? ? postcode_full.upcase.gsub(/\s+/, "") : postcode_full process_postcode(postcode_full, "postcode_known", "is_la_inferred", "la", "postcode", "postcod2") end def process_previous_postcode_changes! + self.ppostcode_full = ppostcode_full.present? ? ppostcode_full.upcase.gsub(/\s+/, "") : ppostcode_full process_postcode(ppostcode_full, "previous_postcode_known", "is_previous_la_inferred", "prevloc", "ppostc1", "ppostc2") end diff --git a/spec/features/form/conditional_questions_spec.rb b/spec/features/form/conditional_questions_spec.rb index 624a25f8f..db558c93a 100644 --- a/spec/features/form/conditional_questions_spec.rb +++ b/spec/features/form/conditional_questions_spec.rb @@ -40,7 +40,7 @@ RSpec.describe "Form Conditional Questions" do it "is displayed correctly" do case_log.update!(postcode_known: 1, postcode_full: "NW1 6RT") visit("/logs/#{id}/property-postcode") - expect(page).to have_field("case-log-postcode-full-field", with: "NW1 6RT") + expect(page).to have_field("case-log-postcode-full-field", with: "NW16RT") end end end diff --git a/spec/features/form/saving_data_spec.rb b/spec/features/form/saving_data_spec.rb index 5f0928adb..d9fa2feba 100644 --- a/spec/features/form/saving_data_spec.rb +++ b/spec/features/form/saving_data_spec.rb @@ -73,7 +73,7 @@ RSpec.describe "Form Saving Data" do it "displays number answers in inputs if they are already saved" do visit("/logs/#{id}/property-postcode") - expect(page).to have_field("case-log-postcode-full-field", with: "PO5 3TE") + expect(page).to have_field("case-log-postcode-full-field", with: "PO53TE") end it "displays text answers in inputs if they are already saved" do diff --git a/spec/fixtures/exports/case_logs.xml b/spec/fixtures/exports/case_logs.xml index 0246d8ddd..f7c58e086 100644 --- a/spec/fixtures/exports/case_logs.xml +++ b/spec/fixtures/exports/case_logs.xml @@ -45,7 +45,7 @@ 5 3 1 - SE2 6RT + SE26RT 7 2 3 @@ -57,7 +57,7 @@ 2 2 1 - NW1 5TY + NW15TY 1 1 1 @@ -166,11 +166,11 @@ 17.5 162.5 6.0 + 0 1 3 11 2019 - 0 diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index e22f3bc32..e94434cef 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -1134,6 +1134,15 @@ RSpec.describe CaseLog do end end + def check_postcode_fields(postcode_field, outcode_field, incode_field) + record_from_db = ActiveRecord::Base.connection.execute("select #{postcode_field}, #{outcode_field}, #{incode_field} from case_logs where id=#{address_case_log.id}").to_a[0] + expect(address_case_log[postcode_field]).to eq("M11AE") + expect(record_from_db[postcode_field]).to eq("M11AE") + expect(address_case_log[outcode_field]).to eq("M1") + expect(record_from_db[outcode_field]).to eq("M1") + expect(address_case_log[incode_field]).to eq("1AE") + expect(record_from_db[incode_field]).to eq("1AE") + end context "when saving addresses" do before do stub_request(:get, /api.postcodes.io/) @@ -1149,6 +1158,24 @@ RSpec.describe CaseLog do }) end + def check_property_postcode_fields + check_postcode_fields("postcode_full", "postcode", "postcod2") + end + + it "correctly formats previous postcode" do + address_case_log.update!(postcode_full: "M1 1AE") + check_property_postcode_fields + + address_case_log.update!(postcode_full: "m1 1ae") + check_property_postcode_fields + + address_case_log.update!(postcode_full: "m11Ae") + check_property_postcode_fields + + address_case_log.update!(postcode_full: "m11ae") + check_property_postcode_fields + end + it "correctly infers la" do record_from_db = ActiveRecord::Base.connection.execute("select la from case_logs where id=#{address_case_log.id}").to_a[0] expect(address_case_log.la).to eq("E08000003") @@ -1197,7 +1224,7 @@ RSpec.describe CaseLog do address_case_log.update!({ postcode_known: 1, postcode_full: "M1 1AD" }) record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from case_logs where id=#{address_case_log.id}").to_a[0] - expect(record_from_db["postcode_full"]).to eq("M1 1AD") + expect(record_from_db["postcode_full"]).to eq("M11AD") expect(address_case_log.la).to eq("E08000003") expect(record_from_db["la"]).to eq("E08000003") end @@ -1218,6 +1245,24 @@ RSpec.describe CaseLog do }) end + def check_previous_postcode_fields + check_postcode_fields("ppostcode_full", "ppostc1", "ppostc2") + end + + it "correctly formats previous postcode" do + address_case_log.update!(ppostcode_full: "M1 1AE") + check_previous_postcode_fields + + address_case_log.update!(ppostcode_full: "m1 1ae") + check_previous_postcode_fields + + address_case_log.update!(ppostcode_full: "m11Ae") + check_previous_postcode_fields + + address_case_log.update!(ppostcode_full: "m11ae") + check_previous_postcode_fields + end + it "correctly infers prevloc" do record_from_db = ActiveRecord::Base.connection.execute("select prevloc from case_logs where id=#{address_case_log.id}").to_a[0] expect(address_case_log.prevloc).to eq("E08000003") @@ -1268,7 +1313,7 @@ RSpec.describe CaseLog do address_case_log.update!({ previous_postcode_known: 0, ppostcode_full: "M1 1AD" }) record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from case_logs where id=#{address_case_log.id}").to_a[0] - expect(record_from_db["ppostcode_full"]).to eq("M1 1AD") + expect(record_from_db["ppostcode_full"]).to eq("M11AD") expect(address_case_log.prevloc).to eq("E08000003") expect(record_from_db["prevloc"]).to eq("E08000003") end diff --git a/spec/requests/case_logs_controller_spec.rb b/spec/requests/case_logs_controller_spec.rb index 346f61182..0c1e3524a 100644 --- a/spec/requests/case_logs_controller_spec.rb +++ b/spec/requests/case_logs_controller_spec.rb @@ -29,7 +29,7 @@ RSpec.describe CaseLogsController, type: :request do let(:age1) { 35 } let(:offered) { 12 } let(:period) { 2 } - let(:postcode_full) { "SE11 6TY" } + let(:postcode_full) { "SE116TY" } let(:in_progress) { "in_progress" } let(:completed) { "completed" } @@ -327,7 +327,7 @@ RSpec.describe CaseLogsController, type: :request do it "updates the case log with the given fields and keeps original values where none are passed" do case_log.reload expect(case_log.tenant_code).to eq("New Value") - expect(case_log.postcode_full).to eq("M1 1AE") + expect(case_log.postcode_full).to eq("M11AE") end context "with an invalid case log id" do @@ -385,7 +385,7 @@ RSpec.describe CaseLogsController, type: :request do it "updates the case log with the given fields and keeps original values where none are passed" do case_log.reload expect(case_log.tenant_code).to eq("New Value") - expect(case_log.postcode_full).to eq("SW1A 2AA") + expect(case_log.postcode_full).to eq("SW1A2AA") end context "with an invalid case log id" do