From cacd29fdb94cce9c5a28cd4615eefebb24c661c5 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 15 Sep 2025 15:40:08 +0100 Subject: [PATCH 01/23] Added basic test to see if a scottish lodgment could go to scotland schema --- spec/acceptance/scotland-schema/lodge_spec.rb | 104 ++++++++++++++++++ .../add_country_id_from_address_spec.rb | 2 +- 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 spec/acceptance/scotland-schema/lodge_spec.rb diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb new file mode 100644 index 000000000..f04b3359c --- /dev/null +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -0,0 +1,104 @@ +describe "Acceptance::Assessment::Lodge", :set_with_timecop do + include RSpecRegisterApiServiceMixin + + before do + add_countries + end + + let(:valid_rdsap_xml) { Samples.xml "RdSAP-Schema-S-19.0" } + let(:scheme_id) { add_scheme_and_get_id } + let(:valid_assessor_request_body) do + AssessorStub.new.fetch_request_body( + domestic_rd_sap: "ACTIVE", + domestic_sap: "ACTIVE", + non_domestic_nos3: "ACTIVE", + non_domestic_dec: "ACTIVE", + non_domestic_cc4: "ACTIVE", + non_domestic_sp3: "ACTIVE", + ) + end + + context "when migrating an assessment" do + let(:scheme_id) { add_scheme_and_get_id } + + let(:migrated_column) do + # ActiveRecord::Base.connection.exec_query( + # "SELECT migrated FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + # ) + ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ) + end + + before do + add_assessor scheme_id:, assessor_id: "SPEC000000", body: valid_assessor_request_body + lodge_assessment assessment_body: valid_rdsap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: "true" + end + + it "is true in migrated column" do + # pp migrated_column + expect(migrated_column.entries).to eq "boop" + end + + # context "when migrating the same assessment ID" do + # before do + # lodge_assessment(assessment_body: valid_rdsap_xml, + # accepted_responses: [201], + # scopes: %w[assessment:lodge migrate:assessment], + # auth_data: { + # scheme_ids: [scheme_id], + # }, + # migrated: true) + # end + # + # it "is true in migrated column" do + # expect(migrated_column.entries.first["migrated"]).to be_truthy + # end + # end + + # context "when migrating an assessment submitted by an assessor who is now unqualified" do + # let(:rdsap_xml) do + # add_assessor scheme_id:, + # assessor_id: "UNQU000000", + # body: AssessorStub.new.fetch_request_body( + # domestic_rd_sap: "INACTIVE", + # ) + # + # xml = Nokogiri.XML valid_rdsap_xml + # + # xml.css("Certificate-Number").children.first.content = "UNQU000000" + # + # xml.to_s + # end + # + # it "is true in migrated column" do + # expect(lodge_assessment(assessment_body: rdsap_xml, + # accepted_responses: [201], + # scopes: %w[assessment:lodge migrate:assessment], + # auth_data: { + # scheme_ids: [scheme_id], + # }, + # migrated: true).status).to eq 201 + # end + # end + + # it "rejects a migration from a client without migration role" do + # expect(lodge_assessment( + # assessment_body: valid_rdsap_xml, + # accepted_responses: [403], + # scopes: %w[assessment:lodge], + # auth_data: { + # scheme_ids: [scheme_id], + # }, + # migrated: true, + # ).status).to eq(403) + # end + end +end diff --git a/spec/unit/use_case/add_country_id_from_address_spec.rb b/spec/unit/use_case/add_country_id_from_address_spec.rb index 79987ded7..b8a86053c 100644 --- a/spec/unit/use_case/add_country_id_from_address_spec.rb +++ b/spec/unit/use_case/add_country_id_from_address_spec.rb @@ -14,7 +14,7 @@ end let(:northern_ireland_domain) do - Domain::CountryLookup.new(country_codes: [:N]) + Domain::CountrLookup.new(country_codes: [:N]) end let(:gateway) do From 3fae7e62d8152f2222d69c37784c7e59b54e24e2 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 7 Oct 2025 15:49:18 +0100 Subject: [PATCH 02/23] EPBR-9018 Update the migrate lodgement process to add Scottish RdSAP assessments to the Scotland schema Updated the foreign keys in the Scotland schema tables to point to tables in the correct schema (not always the Scotland schema) Gone through the lodge_ assessment use case. I have added in an is_scottish flag which can then be passed into the dependant methods and gateways. I have only altered things which are necessary for migration not lodgement. I have added #TODO flags where things will need to be changed later. In the gateways I have added the is_scottish flag which then allows the gateway to swap between schemas. I have added tests for Scottish assessments in the gateway unit tests and end to end acceptance tests for lodging a Scottish assessment. --- ...orrect_foreign_keys_from_scotland_table.rb | 5 + ...eign_keys_from_scotland_table_continued.rb | 8 + ..._forgein_keys_to_scotland_schema_tables.rb | 7 + ...eys_to_scotland_schema_tables_continued.rb | 13 ++ ...129_add_green_deal_plans_scotland_table.rb | 22 +++ ..._key_to_scotland_green_deal_assessments.rb | 9 + db/schema.rb | 14 +- lib/gateway/assessments_address_id_gateway.rb | 22 ++- lib/gateway/assessments_country_id_gateway.rb | 8 +- lib/gateway/assessments_gateway.rb | 132 ++++++++------- lib/gateway/assessments_xml_gateway.rb | 8 +- lib/gateway/green_deal_plans_gateway.rb | 21 ++- lib/gateway/related_assessments_gateway.rb | 6 +- lib/gateway/search_address_gateway.rb | 7 +- lib/use_case/get_canonical_address_id.rb | 4 +- lib/use_case/lodge_assessment.rb | 39 +++-- spec/acceptance/scotland-schema/lodge_spec.rb | 159 ++++++++++-------- .../scotland_schema_migration_spec.rb | 4 +- spec/spec_helper.rb | 22 +-- .../assessments_address_id_gateway_spec.rb | 68 ++++++++ .../assessments_country_id_gateway_spec.rb | 10 ++ .../related_assessments_gateway_spec.rb | 11 +- .../gateway/search_address_gateway_spec.rb | 40 +++-- .../add_country_id_from_address_spec.rb | 2 +- spec/unit/use_case/lodge_assessment_spec.rb | 5 +- 25 files changed, 443 insertions(+), 203 deletions(-) create mode 100644 db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb create mode 100644 db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb create mode 100644 db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb create mode 100644 db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb create mode 100644 db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb create mode 100644 db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb diff --git a/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb b/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb new file mode 100644 index 000000000..49d00b4b9 --- /dev/null +++ b/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb @@ -0,0 +1,5 @@ +class RemoveIncorrectForeignKeysFromScotlandTable < ActiveRecord::Migration[8.0] + def change + remove_foreign_key "scotland.assessments_xml", name: "fk_rails_e74bdd4563" + end +end diff --git a/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb b/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb new file mode 100644 index 000000000..95b7863a1 --- /dev/null +++ b/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb @@ -0,0 +1,8 @@ +class RemoveIncorrectForeignKeysFromScotlandTableContinued < ActiveRecord::Migration[8.0] + def change + remove_foreign_key "scotland.assessments_country_ids", name: "fks_assessments_country_ids_countries" + remove_foreign_key "scotland.assessments", name: "fk_rails_4307e1668a" + remove_foreign_key "scotland.green_deal_assessments", name: "fk_assessment_id_assessments" + remove_foreign_key "scotland.green_deal_assessments", name: "fk_green_deal_plan_id_green_deal_plans" + end +end diff --git a/db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb b/db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb new file mode 100644 index 000000000..a37f2af72 --- /dev/null +++ b/db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb @@ -0,0 +1,7 @@ +class AddCorrectForgeinKeysToScotlandSchemaTables < ActiveRecord::Migration[8.0] + def change + add_foreign_key "scotland.assessments_xml", + "scotland.assessments", + column: :assessment_id, primary_key: :assessment_id + end +end diff --git a/db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb b/db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb new file mode 100644 index 000000000..2298b0b1f --- /dev/null +++ b/db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb @@ -0,0 +1,13 @@ +class AddCorrectForgeinKeysToScotlandSchemaTablesContinued < ActiveRecord::Migration[8.0] + def change + add_foreign_key "scotland.assessments_country_ids", + "countries", + column: :country_id, primary_key: :country_id + add_foreign_key "scotland.assessments", + "assessors", + column: :scheme_assessor_id, primary_key: :scheme_assessor_id + add_foreign_key "scotland.green_deal_assessments", + "scotland.assessments", + column: :assessment_id, primary_key: :assessment_id + end +end diff --git a/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb new file mode 100644 index 000000000..40cd2988d --- /dev/null +++ b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb @@ -0,0 +1,22 @@ +class AddGreenDealPlansScotlandTable < ActiveRecord::Migration[8.0] + def change + create_table "scotland.green_deal_plans", primary_key: :green_deal_plan_id, id: false do |t| + t.string :green_deal_plan_id + t.datetime :start_date + t.datetime :end_date + t.string :provider_name + t.string :provider_telephone + t.string :provider_email + t.decimal :interest_rate + t.boolean :fixed_interest_rate + t.decimal :charge_uplift_amount + t.datetime :charge_uplift_date + t.boolean :cca_regulated + t.boolean :structure_changed + t.boolean :measures_removed + t.jsonb :measures, null: false, default: "[]" + t.jsonb :charges, null: false, default: "[]" + t.jsonb :savings, null: false, default: "[]" + end + end +end diff --git a/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb new file mode 100644 index 000000000..0741e7dcd --- /dev/null +++ b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb @@ -0,0 +1,9 @@ +class AddGreenDealPlansForeignKeyToScotlandGreenDealAssessments < ActiveRecord::Migration[8.0] + def change + add_index "scotland.green_deal_plans", :green_deal_plan_id, unique: true + + add_foreign_key "scotland.green_deal_assessments", + "scotland.green_deal_plans", + column: :green_deal_plan_id, primary_key: :green_deal_plan_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 0f88864da..9f33b85c9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_05_19_124713) do +ActiveRecord::Schema[8.0].define(version: 2025_09_22_151938) do # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" enable_extension "pg_catalog.plpgsql" @@ -32,6 +32,18 @@ t.index ["town"], name: "index_address_base_on_town" end + create_table "address_base_tmp", primary_key: "uprn", id: :string, force: :cascade do |t| + t.string "postcode" + t.string "address_line1" + t.string "address_line2" + t.string "address_line3" + t.string "address_line4" + t.string "town" + t.string "classification_code", limit: 6 + t.string "address_type", limit: 15 + t.string "country_code", limit: 1 + end + create_table "address_base_versions", primary_key: "version_number", id: :integer, default: nil, force: :cascade do |t| t.string "version_name", null: false t.datetime "created_at", null: false diff --git a/lib/gateway/assessments_address_id_gateway.rb b/lib/gateway/assessments_address_id_gateway.rb index cb00896b9..4f166697b 100644 --- a/lib/gateway/assessments_address_id_gateway.rb +++ b/lib/gateway/assessments_address_id_gateway.rb @@ -11,14 +11,24 @@ class AssessmentsAddressIdGateway class AssessmentsAddressId < ActiveRecord::Base end - def fetch(assessment_id) - AssessmentsAddressId.find(assessment_id).as_json.symbolize_keys + class AssessmentsAddressIdScotland < ActiveRecord::Base + self.table_name = "scotland.assessments_address_id" end - def send_to_db(record) - existing_assessment_address_id = - AssessmentsAddressId.find_by assessment_id: record[:assessment_id] - AssessmentsAddressId.create(record) if existing_assessment_address_id.nil? + def fetch(assessment_id, is_scottish = false) + is_scottish ? AssessmentsAddressIdScotland.find(assessment_id).as_json.symbolize_keys : AssessmentsAddressId.find(assessment_id).as_json.symbolize_keys + end + + def send_to_db(record, is_scottish = false) + if is_scottish + existing_assessment_address_id = + AssessmentsAddressIdScotland.find_by assessment_id: record[:assessment_id] + AssessmentsAddressIdScotland.create(record) if existing_assessment_address_id.nil? + else + existing_assessment_address_id = + AssessmentsAddressId.find_by assessment_id: record[:assessment_id] + AssessmentsAddressId.create(record) if existing_assessment_address_id.nil? + end end def update_assessments_address_id_mapping( diff --git a/lib/gateway/assessments_country_id_gateway.rb b/lib/gateway/assessments_country_id_gateway.rb index eda8f37a0..87742d7a5 100644 --- a/lib/gateway/assessments_country_id_gateway.rb +++ b/lib/gateway/assessments_country_id_gateway.rb @@ -3,16 +3,18 @@ class AssessmentsCountryIdGateway class AssessmentsCountryId < ActiveRecord::Base end - def insert(assessment_id:, country_id:, upsert: false) + def insert(assessment_id:, country_id:, upsert: false, is_scottish: false) + schema = is_scottish ? "scotland." : "public." + sql = if upsert <<-SQL - INSERT INTO assessments_country_ids (assessment_id,country_id) VALUES ($1, $2) + INSERT INTO #{schema}assessments_country_ids (assessment_id,country_id) VALUES ($1, $2) ON CONFLICT(assessment_id) DO UPDATE SET country_id=$2 SQL else <<-SQL - INSERT INTO assessments_country_ids (assessment_id,country_id) VALUES ($1, $2) + INSERT INTO #{schema}assessments_country_ids (assessment_id,country_id) VALUES ($1, $2) SQL end diff --git a/lib/gateway/assessments_gateway.rb b/lib/gateway/assessments_gateway.rb index 026780bbb..83d715e2e 100644 --- a/lib/gateway/assessments_gateway.rb +++ b/lib/gateway/assessments_gateway.rb @@ -6,6 +6,10 @@ class AssessmentsGateway class Assessment < ActiveRecord::Base; end + class AssessmentScotland < ActiveRecord::Base + self.table_name = "scotland.assessments" + end + class InvalidAssessmentType < StandardError; end class AssessmentAlreadyExists < StandardError; end @@ -21,9 +25,9 @@ class AssessmentAlreadyExists < StandardError; end AC-REPORT ].freeze - def insert_or_update(assessment) + def insert_or_update(assessment, is_scottish) check_valid_energy_ratings assessment - send_update_to_db assessment + send_update_to_db(assessment, is_scottish) end def insert(assessment) @@ -223,78 +227,92 @@ def send_insert_to_db(assessment) end end - def send_update_to_db(assessment) + def send_update_to_db(assessment, is_scottish) ActiveRecord::Base.transaction do - existing_assessment = - Assessment.exists? assessment_id: assessment.get(:assessment_id) + existing_assessment = if is_scottish + AssessmentScotland.exists?(assessment_id: assessment.get(:assessment_id)) + else + Assessment.exists?(assessment_id: assessment.get(:assessment_id)) + end if existing_assessment - delete_xml = <<-SQL - DELETE FROM assessments_xml WHERE assessment_id = $1 - SQL + schema = is_scottish ? "scotland." : "public." + remove_and_relodge_assessment(assessment, schema) + else + is_scottish ? AssessmentScotland.create(assessment.to_record) : Assessment.create(assessment.to_record) + end - delete_address_id = <<-SQL - DELETE FROM assessments_address_id WHERE assessment_id = $1 - SQL + # We are going to have to re-think related assessments for Scotland non-dom + unless assessment.get(:related_rrn).nil? + add_linked_assessment assessment + end + end + end - green_deal_plan_id = <<-SQL - SELECT green_deal_plan_id FROM green_deal_assessments WHERE assessment_id = $1 - SQL + def remove_and_relodge_assessment(assessment, schema) + delete_xml = <<-SQL + DELETE FROM #{schema}assessments_xml WHERE assessment_id = $1 + SQL - delete_green_deal_assessment = <<-SQL - DELETE FROM green_deal_assessments WHERE assessment_id = $1 - SQL + delete_address_id = <<-SQL + DELETE FROM #{schema}assessments_address_id WHERE assessment_id = $1 + SQL - delete_assessment = <<-SQL - DELETE FROM assessments WHERE assessment_id = $1 - SQL + green_deal_plan_id = <<-SQL + SELECT green_deal_plan_id FROM #{schema}green_deal_assessments WHERE assessment_id = $1 + SQL - delete_linked_assessment = <<-SQL - DELETE FROM linked_assessments WHERE assessment_id = $1 - SQL + delete_green_deal_assessment = <<-SQL + DELETE FROM #{schema}green_deal_assessments WHERE assessment_id = $1 + SQL - binds = [ - ActiveRecord::Relation::QueryAttribute.new( - "id", - assessment.get(:assessment_id), - ActiveRecord::Type::String.new, - ), - ] + delete_assessment = <<-SQL + DELETE FROM #{schema}assessments WHERE assessment_id = $1 + SQL - ActiveRecord::Base.connection.exec_query delete_xml, "SQL", binds + delete_linked_assessment = <<-SQL + DELETE FROM #{schema}linked_assessments WHERE assessment_id = $1 + SQL - green_deal_plan_ids = - ActiveRecord::Base.connection.exec_query green_deal_plan_id, - "SQL", - binds + binds = [ + ActiveRecord::Relation::QueryAttribute.new( + "id", + assessment.get(:assessment_id), + ActiveRecord::Type::String.new, + ), + ] - ActiveRecord::Base.connection.exec_query delete_green_deal_assessment, - "SQL", - binds + ActiveRecord::Base.connection.exec_query delete_xml, "SQL", binds - ActiveRecord::Base.connection.exec_query delete_assessment, - "SQL", - binds + green_deal_plan_ids = + ActiveRecord::Base.connection.exec_query green_deal_plan_id, + "SQL", + binds - ActiveRecord::Base.connection.exec_query delete_address_id, - "SQL", - binds + ActiveRecord::Base.connection.exec_query delete_green_deal_assessment, + "SQL", + binds - ActiveRecord::Base.connection.exec_query delete_linked_assessment, - "SQL", - binds + ActiveRecord::Base.connection.exec_query delete_assessment, + "SQL", + binds - Assessment.create assessment.to_record + ActiveRecord::Base.connection.exec_query delete_address_id, + "SQL", + binds - reattach_green_deal_plans(green_deal_plan_ids, binds) - else - Assessment.create assessment.to_record - end + ActiveRecord::Base.connection.exec_query delete_linked_assessment, + "SQL", + binds - unless assessment.get(:related_rrn).nil? - add_linked_assessment assessment - end + if schema == "scotland." + AssessmentScotland.create assessment.to_record + else + Assessment.create assessment.to_record end + + # Need to test this + reattach_green_deal_plans(green_deal_plan_ids, binds, schema) end def check_valid_energy_ratings(assessment) @@ -319,9 +337,9 @@ def check_valid_energy_ratings(assessment) end end - def reattach_green_deal_plans(green_deal_plan_ids, binds) + def reattach_green_deal_plans(green_deal_plan_ids, binds, schema) add_green_deal_plan = <<-SQL - INSERT INTO green_deal_assessments (assessment_id, green_deal_plan_id) + INSERT INTO #{schema}green_deal_assessments (assessment_id, green_deal_plan_id) VALUES ($1, $2) SQL diff --git a/lib/gateway/assessments_xml_gateway.rb b/lib/gateway/assessments_xml_gateway.rb index a054f23bd..18a3458d4 100644 --- a/lib/gateway/assessments_xml_gateway.rb +++ b/lib/gateway/assessments_xml_gateway.rb @@ -9,8 +9,12 @@ class AssessmentsXmlGateway class AssessmentsXml < ActiveRecord::Base end - def send_to_db(record) - AssessmentsXml.create(record) + class AssessmentsXmlScotland < ActiveRecord::Base + self.table_name = "scotland.assessments_xml" + end + + def send_to_db(record, is_scottish) + is_scottish ? AssessmentsXmlScotland.create(record) : AssessmentsXml.create(record) end def fetch(assessment_id) diff --git a/lib/gateway/green_deal_plans_gateway.rb b/lib/gateway/green_deal_plans_gateway.rb index ff66c24a9..e3fb8671b 100644 --- a/lib/gateway/green_deal_plans_gateway.rb +++ b/lib/gateway/green_deal_plans_gateway.rb @@ -3,6 +3,10 @@ class GreenDealPlansGateway class GreenDealPlan < ActiveRecord::Base end + class GreenDealPlanScotland < ActiveRecord::Base + self.table_name = "scotland.green_deal_plan" + end + def exists?(green_deal_plan_id) sql = <<-SQL SELECT EXISTS ( @@ -33,9 +37,10 @@ def add(green_deal_plan, assessment_id) link_green_deal_to_assessment green_deal_plan.green_deal_plan_id, assessment_id end - def link_green_deal_to_assessment(green_deal_plan_id, assessment_id) + def link_green_deal_to_assessment(green_deal_plan_id, assessment_id, is_scottish = false) + schema = is_scottish ? "scotland." : "public." sql = <<-SQL - INSERT INTO green_deal_assessments (green_deal_plan_id, assessment_id) + INSERT INTO #{schema}green_deal_assessments (green_deal_plan_id, assessment_id) VALUES ($1, $2) SQL @@ -72,7 +77,8 @@ def update_end_date_and_charges(green_deal_plan_id:, end_date:, charges:) GreenDealPlan.update(green_deal_plan_id, { end_date: end_date, charges: charges }) end - def fetch(assessment_id) + def fetch(assessment_id, is_scottish = false) + schema = is_scottish ? "scotland." : "public." sql = <<-SQL SELECT b.green_deal_plan_id, b.start_date, b.end_date, @@ -81,14 +87,17 @@ def fetch(assessment_id) b.charge_uplift_date, b.cca_regulated, b.structure_changed, b.measures_removed, b.charges, b.measures, b.savings FROM - green_deal_assessments a + #{schema}green_deal_assessments a INNER JOIN - green_deal_plans b ON a.green_deal_plan_id = b.green_deal_plan_id + #{schema}green_deal_plans b ON a.green_deal_plan_id = b.green_deal_plan_id WHERE assessment_id = $1 ORDER BY b.green_deal_plan_id SQL - response = GreenDealPlan.connection.exec_query( + + table = is_scottish ? GreenDealPlanScotland : GreenDealPlan + + response = table.connection.exec_query( sql, "SQL", [ diff --git a/lib/gateway/related_assessments_gateway.rb b/lib/gateway/related_assessments_gateway.rb index 1937a1327..ad274224f 100644 --- a/lib/gateway/related_assessments_gateway.rb +++ b/lib/gateway/related_assessments_gateway.rb @@ -3,13 +3,15 @@ class RelatedAssessmentsGateway class Assessment < ActiveRecord::Base end - def related_assessment_ids(address_id) + def related_assessment_ids(address_id, is_scottish = false) return [] if address_id.blank? + schema = is_scottish ? "scotland." : "public." + ActiveRecord::Base .connection .exec_query( - "SELECT assessment_id FROM assessments_address_id WHERE address_id = $1", + "SELECT assessment_id FROM #{schema}assessments_address_id WHERE address_id = $1", "SQL", [ ActiveRecord::Relation::QueryAttribute.new( diff --git a/lib/gateway/search_address_gateway.rb b/lib/gateway/search_address_gateway.rb index e0bed34fd..07df420da 100644 --- a/lib/gateway/search_address_gateway.rb +++ b/lib/gateway/search_address_gateway.rb @@ -1,10 +1,11 @@ module Gateway class SearchAddressGateway < StandardError - def insert(object) + def insert(object, is_scottish = false) + schema = is_scottish ? "scotland." : "public." insert_sql = <<-SQL - INSERT INTO assessment_search_address(assessment_id, address) + INSERT INTO #{schema}assessment_search_address(assessment_id, address) SELECT $1, $2 - WHERE NOT EXISTS(SELECT * FROM assessment_search_address WHERE assessment_id = $3) + WHERE NOT EXISTS(SELECT * FROM #{schema}assessment_search_address WHERE assessment_id = $3) SQL bindings = [ diff --git a/lib/use_case/get_canonical_address_id.rb b/lib/use_case/get_canonical_address_id.rb index c7df4b47f..429712f9f 100644 --- a/lib/use_case/get_canonical_address_id.rb +++ b/lib/use_case/get_canonical_address_id.rb @@ -12,7 +12,7 @@ def initialize( @assessments_search_gateway = assessments_search_gateway || Gateway::AssessmentsSearchGateway.new end - def execute(rrn:, address_id:, type_of_assessment: nil, related_rrn: nil) + def execute(rrn:, address_id:, type_of_assessment: nil, related_rrn: nil, is_scottish: false) if address_id.nil? return default_address_id(rrn:, related_rrn:, type_of_assessment:) elsif address_id.start_with?("UPRN-") @@ -23,7 +23,7 @@ def execute(rrn:, address_id:, type_of_assessment: nil, related_rrn: nil) related_assessment_id = address_id[4..] begin related_assessment = - @assessments_address_id_gateway.fetch(related_assessment_id) + @assessments_address_id_gateway.fetch(related_assessment_id, is_scottish) rescue ActiveRecord::RecordNotFound related_assessment = nil end diff --git a/lib/use_case/lodge_assessment.rb b/lib/use_case/lodge_assessment.rb index 7372e17b0..835b1b9fa 100644 --- a/lib/use_case/lodge_assessment.rb +++ b/lib/use_case/lodge_assessment.rb @@ -39,8 +39,10 @@ def initialize( end def execute(data, migrated, schema_name) - assessment_id = data[:assessment_id] + is_scottish = schema_name.include?("-S-") || false + assessment_id = data[:assessment_id] + # TODO: UPDATE WHEN DOING LODGEMENT if !migrated && find_assessment_by_id(assessment_id) raise DuplicateAssessmentIdException end @@ -83,32 +85,30 @@ def execute(data, migrated, schema_name) ) if migrated - @assessments_gateway.insert_or_update assessment - insert_country_id(data[:assessment_id], data[:country_id], upsert: true) + @assessments_gateway.insert_or_update(assessment, is_scottish) + insert_country_id(data[:assessment_id], is_scottish, data[:country_id], upsert: true) else begin + # TODO: UPDATE WHEN DOING LODGEMENT @assessments_gateway.insert assessment - insert_country_id(data[:assessment_id], data[:country_id]) + insert_country_id(data[:assessment_id], is_scottish, data[:country_id]) rescue Gateway::AssessmentsGateway::AssessmentAlreadyExists raise DuplicateAssessmentIdException end end - - insert_assessment_address_id assessment - - associate_related_green_deals assessment if assessment.type_of_assessment == "RdSAP" - + insert_assessment_address_id(assessment, is_scottish) + # TODO: UPDATE WHEN DOING LODGEMENT + associate_related_green_deals(assessment, is_scottish) if assessment.type_of_assessment == "RdSAP" && !migrated @assessments_xml_gateway.send_to_db( { assessment_id: data[:assessment_id], xml: data[:raw_data], schema_type: schema_name, }, + is_scottish, ) - search_address = Domain::SearchAddress.new(data).to_hash - @search_address_gateway.insert search_address - + @search_address_gateway.insert(search_address, is_scottish) @event_broadcaster.broadcast :assessment_lodged, assessment_id: assessment.assessment_id assessment @@ -178,30 +178,32 @@ def find_related_rrn(wrapper_hash) related_rrn end - def insert_assessment_address_id(assessment) + def insert_assessment_address_id(assessment, is_scottish) canonical_address_id = get_canonical_address_id(assessment) source = get_assessments_address_id_source( lodged_address_id: assessment.address_id, canonical_address_id:, ) - @assessments_address_id_gateway.send_to_db( { assessment_id: assessment.assessment_id, address_id: canonical_address_id, source:, }, + is_scottish, ) end - def associate_related_green_deals(assessment) - canonical_address_id = @assessments_address_id_gateway.fetch(assessment.assessment_id)[:address_id] + def associate_related_green_deals(assessment, is_scottish) + canonical_address_id = @assessments_address_id_gateway.fetch(assessment.assessment_id, is_scottish)[:address_id] related_assessment_ids = @related_assessments_gateway.related_assessment_ids(canonical_address_id).reject { |id| id == assessment.assessment_id } + # Need to update the lodge_assessment method in assertive client green_deal_plan_sets = related_assessment_ids.map { |assessment_id| @green_deal_plans_gateway.fetch assessment_id } flat_mapped = green_deal_plan_sets.flat_map(&:itself) green_deal_plan_ids = flat_mapped.map(&:green_deal_plan_id).uniq green_deal_plan_ids.each do |green_deal_plan_id| + # Need to update the lodge_assessment method in assertive client @green_deal_plans_gateway.link_green_deal_to_assessment green_deal_plan_id, assessment.assessment_id end rescue StandardError => e @@ -217,6 +219,7 @@ def get_canonical_address_id(assessment) ) end + # TODO: UPDATE WHEN DOING LODGEMENT def find_assessment_by_id(assessment_id) @assessments_search_gateway.search_by_assessment_id(assessment_id, restrictive: false) .first @@ -233,8 +236,8 @@ def get_assessments_address_id_source( end end - def insert_country_id(assessment_id, country_id = nil, upsert: false) - @assessments_country_id_gateway.insert(assessment_id:, country_id:, upsert:) unless country_id.nil? + def insert_country_id(assessment_id, is_scottish, country_id = nil, upsert: false) + @assessments_country_id_gateway.insert(assessment_id:, country_id:, upsert:, is_scottish:) unless country_id.nil? end end end diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb index f04b3359c..959d4ea80 100644 --- a/spec/acceptance/scotland-schema/lodge_spec.rb +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -15,90 +15,105 @@ non_domestic_dec: "ACTIVE", non_domestic_cc4: "ACTIVE", non_domestic_sp3: "ACTIVE", - ) + ) + end + let(:expected_lodgement) do + {} end - context "when migrating an assessment" do + context "when migrating a Scottish assessment" do let(:scheme_id) { add_scheme_and_get_id } - let(:migrated_column) do - # ActiveRecord::Base.connection.exec_query( - # "SELECT migrated FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - # ) - ActiveRecord::Base.connection.exec_query( - "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ) + let(:migrated_column_scotland) do + ActiveRecord::Base.connection.exec_query( + "SELECT migrated FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ) end before do add_assessor scheme_id:, assessor_id: "SPEC000000", body: valid_assessor_request_body - lodge_assessment assessment_body: valid_rdsap_xml, - accepted_responses: [201], - scopes: %w[assessment:lodge migrate:assessment], - auth_data: { - scheme_ids: [scheme_id], - }, - schema_name: "RdSAP-Schema-S-19.0", - migrated: "true" + end + + it "rejects a migration from a client without migration role" do + expect(lodge_assessment( + assessment_body: valid_rdsap_xml, + accepted_responses: [403], + scopes: %w[assessment:lodge], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: true, + ).status).to eq(403) end it "is true in migrated column" do - # pp migrated_column - expect(migrated_column.entries).to eq "boop" + response = lodge_assessment assessment_body: valid_rdsap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: "true" + + expect(JSON.parse(response.body, symbolize_names: true)[:data][:assessments].first).to eq "0000-0000-0000-0000-0000" + expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy end - # context "when migrating the same assessment ID" do - # before do - # lodge_assessment(assessment_body: valid_rdsap_xml, - # accepted_responses: [201], - # scopes: %w[assessment:lodge migrate:assessment], - # auth_data: { - # scheme_ids: [scheme_id], - # }, - # migrated: true) - # end - # - # it "is true in migrated column" do - # expect(migrated_column.entries.first["migrated"]).to be_truthy - # end - # end - - # context "when migrating an assessment submitted by an assessor who is now unqualified" do - # let(:rdsap_xml) do - # add_assessor scheme_id:, - # assessor_id: "UNQU000000", - # body: AssessorStub.new.fetch_request_body( - # domestic_rd_sap: "INACTIVE", - # ) - # - # xml = Nokogiri.XML valid_rdsap_xml - # - # xml.css("Certificate-Number").children.first.content = "UNQU000000" - # - # xml.to_s - # end - # - # it "is true in migrated column" do - # expect(lodge_assessment(assessment_body: rdsap_xml, - # accepted_responses: [201], - # scopes: %w[assessment:lodge migrate:assessment], - # auth_data: { - # scheme_ids: [scheme_id], - # }, - # migrated: true).status).to eq 201 - # end - # end - - # it "rejects a migration from a client without migration role" do - # expect(lodge_assessment( - # assessment_body: valid_rdsap_xml, - # accepted_responses: [403], - # scopes: %w[assessment:lodge], - # auth_data: { - # scheme_ids: [scheme_id], - # }, - # migrated: true, - # ).status).to eq(403) - # end + context "when migrating the same assessment ID" do + before do + lodge_assessment assessment_body: valid_rdsap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: "true" + end + + it "is true in migrated column" do + lodge_assessment assessment_body: valid_rdsap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: "true" + expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy + end + end + + context "when migrating an assessment submitted by an assessor who is now unqualified" do + let(:rdsap_xml) do + add_assessor scheme_id:, + assessor_id: "UNQU000000", + body: AssessorStub.new.fetch_request_body( + domestic_rd_sap: "INACTIVE", + ) + + xml = Nokogiri.XML valid_rdsap_xml + + xml.css("Membership-Number").children.first.content = "UNQU000000" + + xml.to_s + end + + it "is true in migrated column" do + response = lodge_assessment(assessment_body: rdsap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "RdSAP-Schema-S-19.0", + migrated: true).status + + expect(response).to eq 201 + expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy + end + end end end diff --git a/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb b/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb index f0bedafce..240637323 100644 --- a/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb +++ b/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb @@ -16,13 +16,15 @@ it "creates the required new scotland tables" do expected_tables = %w[assessment_search_address assessments_address_id + green_deal_plans linked_assessments overridden_lodgement_events schema_migrations assessments_xml assessments_country_ids assessments - green_deal_assessments] + green_deal_assessments + ar_internal_metadata] table_results = ActiveRecord::Base.connection.exec_query <<~SQL SELECT table_name FROM information_schema.tables WHERE table_schema = 'scotland'; SQL diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 94f83a415..c9ba68640 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -114,7 +114,7 @@ def add_postcodes( }', #{latitude.to_f}, #{longitude.to_f}, #{ region.nil? ? 'NULL' : (db.connection.quote region) })", - ) + ) end def add_outcodes( @@ -132,18 +132,18 @@ def add_outcodes( "INSERT INTO postcode_outcode_geolocations (outcode, latitude, longitude, region) VALUES('#{ db.sanitize_sql(outcode) }', #{latitude.to_f}, #{longitude.to_f}, '#{region}')", - ) + ) end def truncate(postcode) if postcode == Regexp.new(Helper::RegexHelper::POSTCODE, Regexp::IGNORECASE) ActiveRecord::Base.connection.exec_query( "TRUNCATE TABLE postcode_geolocation", - ) + ) else ActiveRecord::Base.connection.exec_query( "TRUNCATE TABLE postcode_outcode_geolocations", - ) + ) end end @@ -178,7 +178,7 @@ def add_address_base(uprn:, postcode: nil, country_code: nil) ActiveRecord::Relation::QueryAttribute.new("postcode", postcode, ActiveRecord::Type::String.new), ActiveRecord::Relation::QueryAttribute.new("country_code", country_code, ActiveRecord::Type::String.new), ], - ) + ) end def insert_into_address_base(rrn, post_code, address1, address2, town, country_code) @@ -199,32 +199,32 @@ def insert_into_address_base(rrn, post_code, address1, address2, town, country_c "uprn", rrn.to_i.to_s, ActiveRecord::Type::String.new, - ), + ), ActiveRecord::Relation::QueryAttribute.new( "postcode", post_code, ActiveRecord::Type::String.new, - ), + ), ActiveRecord::Relation::QueryAttribute.new( "address1", address1, ActiveRecord::Type::String.new, - ), + ), ActiveRecord::Relation::QueryAttribute.new( "address2", address2, ActiveRecord::Type::String.new, - ), + ), ActiveRecord::Relation::QueryAttribute.new( "town", town, ActiveRecord::Type::String.new, - ), + ), ActiveRecord::Relation::QueryAttribute.new( "country_code", country_code, ActiveRecord::Type::String.new, - ), + ), ] ActiveRecord::Base.connection.exec_query sql, "SQL", binds diff --git a/spec/unit/gateway/assessments_address_id_gateway_spec.rb b/spec/unit/gateway/assessments_address_id_gateway_spec.rb index d14f1ea64..3a7eadcdc 100644 --- a/spec/unit/gateway/assessments_address_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_address_id_gateway_spec.rb @@ -45,6 +45,74 @@ end end + describe "#fetch" do + context "when fetching an assessment id" do + it "returns the expected response" do + expected_response = { + address_id: "RRN-0000-0000-0000-0000-0001", + address_updated_at: nil, + assessment_id: "0000-0000-0000-0000-0001", + source: "lodgement", + } + assessment_id = "0000-0000-0000-0000-0001" + response = gateway.fetch(assessment_id) + + expect(response).to eq expected_response + end + + it "returns the expected response for a Scottish assessment" do + ActiveRecord::Base.connection.exec_query( + "INSERT INTO scotland.assessments_address_id(assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0001', 'RRN-0000-0000-0000-0000-0001', 'lodgement', null)", + ) + + expected_response = { + address_id: "RRN-0000-0000-0000-0000-0001", + address_updated_at: nil, + assessment_id: "0000-0000-0000-0000-0001", + source: "lodgement", + } + assessment_id = "0000-0000-0000-0000-0001" + response = gateway.fetch(assessment_id, true) + + expect(response).to eq expected_response + end + end + end + + describe "#send_to_db" do + context "when creating an assessment" do + it "returns the expected response" do + entry = { + assessment_id: "0000-0000-0000-0000-0001", + address_id: "RRN-0000-0000-0000-0000-0001", + source: "lodgement", + + } + gateway.send_to_db(entry) + row = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM assessments_address_id WHERE assessment_id = '0000-0000-0000-0000-0001'", + ) + + expect(row.entries.first["assessment_id"]).to eq "0000-0000-0000-0000-0001" + end + + it "returns the expected response for a Scottish entry" do + entry = { + assessment_id: "0000-0000-0000-0000-0001", + address_id: "RRN-0000-0000-0000-0000-0001", + source: "lodgement", + + } + gateway.send_to_db(entry, true) + row = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments_address_id WHERE assessment_id = '0000-0000-0000-0000-0001'", + ) + + expect(row.entries.first["assessment_id"]).to eq "0000-0000-0000-0000-0001" + end + end + end + describe "#fetch_updated_group_count" do context "when fetching updated group count" do it "returns the number of updated address groups" do diff --git a/spec/unit/gateway/assessments_country_id_gateway_spec.rb b/spec/unit/gateway/assessments_country_id_gateway_spec.rb index e28bd8652..797729a9d 100644 --- a/spec/unit/gateway/assessments_country_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_country_id_gateway_spec.rb @@ -25,6 +25,16 @@ expect { gateway.insert(assessment_id:, country_id: 1) }.to raise_error Gateway::AssessmentsGateway::AssessmentAlreadyExists end end + + context "when inserting a scottish assessment_id" do + it "updates the row without error using upsert" do + gateway.insert(assessment_id:, country_id: 2, upsert: true, is_scottish: true) + row = ActiveRecord::Base.connection.exec_query( + "SELECT country_id FROM scotland.assessments_country_ids WHERE assessment_id = '0000-0000-0001-1234-0000'", + ) + expect(row.entries.first["country_id"]).to eq 2 + end + end end describe "fetch_country_name" do diff --git a/spec/unit/gateway/related_assessments_gateway_spec.rb b/spec/unit/gateway/related_assessments_gateway_spec.rb index 0e86b549c..7f46d0fc2 100644 --- a/spec/unit/gateway/related_assessments_gateway_spec.rb +++ b/spec/unit/gateway/related_assessments_gateway_spec.rb @@ -34,8 +34,15 @@ end end - it "returns related assessment IDs when calling related_assessment_ids" do - expect(gateway.related_assessment_ids(address_id).sort).to eq related_assessment_ids + describe "#related_assessment_ids" do + it "returns related assessment IDs when calling related_assessment_ids" do + expect(gateway.related_assessment_ids(address_id).sort).to eq related_assessment_ids + end + + it "returns related assessment IDs when calling related_assessment_ids for a Sottish assessment" do + ActiveRecord::Base.connection.exec_query("INSERT INTO scotland.assessments_address_id (assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0001','UPRN-000000000000', 'lodgement', '02/02/2023');") + expect(gateway.related_assessment_ids(address_id, true).sort).to eq %w[0000-0000-0000-0000-0001] + end end end end diff --git a/spec/unit/gateway/search_address_gateway_spec.rb b/spec/unit/gateway/search_address_gateway_spec.rb index 2815c40d5..2d49203b2 100644 --- a/spec/unit/gateway/search_address_gateway_spec.rb +++ b/spec/unit/gateway/search_address_gateway_spec.rb @@ -21,23 +21,35 @@ let(:search_address) { Domain::SearchAddress.new record } describe "#insert" do - it "saves data to the search address table without error" do - expect { gateway.insert search_address.to_hash }.not_to raise_error - end + context "when inserting row" do + it "saves data to the search address table without error" do + expect { gateway.insert search_address.to_hash }.not_to raise_error + end - it "the saved data is correct" do - gateway.insert search_address.to_hash - saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM assessment_search_address") - expect(saved_data.rows.length).to eq 1 - expect(saved_data[0]["assessment_id"]).to eq "0000-0000-0000-0000-0005" - expect(saved_data[0]["address"]).to eq "22 acacia avenue some place" + it "the saved data is correct" do + gateway.insert search_address.to_hash + saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM assessment_search_address") + expect(saved_data.rows.length).to eq 1 + expect(saved_data[0]["assessment_id"]).to eq "0000-0000-0000-0000-0005" + expect(saved_data[0]["address"]).to eq "22 acacia avenue some place" + end + + it "does not duplicate rows" do + gateway.insert search_address.to_hash + gateway.insert search_address.to_hash + saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM assessment_search_address") + expect(saved_data.rows.length).to eq 1 + end end - it "does not duplicate rows" do - gateway.insert search_address.to_hash - gateway.insert search_address.to_hash - saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM assessment_search_address") - expect(saved_data.rows.length).to eq 1 + context "when inserting Scotland row" do + it "the saved data is correct" do + gateway.insert(search_address.to_hash, true) + saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM scotland.assessment_search_address") + expect(saved_data.rows.length).to eq 1 + expect(saved_data[0]["assessment_id"]).to eq "0000-0000-0000-0000-0005" + expect(saved_data[0]["address"]).to eq "22 acacia avenue some place" + end end end diff --git a/spec/unit/use_case/add_country_id_from_address_spec.rb b/spec/unit/use_case/add_country_id_from_address_spec.rb index b8a86053c..79987ded7 100644 --- a/spec/unit/use_case/add_country_id_from_address_spec.rb +++ b/spec/unit/use_case/add_country_id_from_address_spec.rb @@ -14,7 +14,7 @@ end let(:northern_ireland_domain) do - Domain::CountrLookup.new(country_codes: [:N]) + Domain::CountryLookup.new(country_codes: [:N]) end let(:gateway) do diff --git a/spec/unit/use_case/lodge_assessment_spec.rb b/spec/unit/use_case/lodge_assessment_spec.rb index 31492380c..dd51bff4f 100644 --- a/spec/unit/use_case/lodge_assessment_spec.rb +++ b/spec/unit/use_case/lodge_assessment_spec.rb @@ -221,7 +221,7 @@ use_case.execute(data, true, "SAP-Schema-18.0.0") expect(assessments_gateway).to have_received(:insert_or_update) - expect(search_address_gateway).to have_received(:insert).with({ assessment_id: "2000-0000-0000-0000-0001", address: "1 some street some area some county" }) + expect(search_address_gateway).to have_received(:insert).with({ assessment_id: "2000-0000-0000-0000-0001", address: "1 some street some area some county" }, false) end it "calls AssessmentsXMLGateway to save the XML data to the assessments_xml table" do @@ -233,6 +233,7 @@ xml: "", schema_type: "SAP-Schema-18.0.0", }, + false, ) end end @@ -264,7 +265,7 @@ end it "sends the country to the assessments_country_id gateway" do - expect(assessments_country_id_gateway).to have_received(:insert).with(assessment_id: data[:assessment_id], country_id: 1, upsert: false) + expect(assessments_country_id_gateway).to have_received(:insert).with(assessment_id: data[:assessment_id], country_id: 1, upsert: false, is_scottish: false) end end From f4356d73d6cb43821528a1c4554beb2dcb2eb329 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Wed, 8 Oct 2025 12:04:26 +0100 Subject: [PATCH 03/23] EPBR-9159 Expand tests to include SAP --- spec/acceptance/scotland-schema/lodge_spec.rb | 90 ++++++++++++++++--- 1 file changed, 79 insertions(+), 11 deletions(-) diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb index 959d4ea80..1cda04f8f 100644 --- a/spec/acceptance/scotland-schema/lodge_spec.rb +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -2,11 +2,12 @@ include RSpecRegisterApiServiceMixin before do + Events::Broadcaster.enable! add_countries end let(:valid_rdsap_xml) { Samples.xml "RdSAP-Schema-S-19.0" } - let(:scheme_id) { add_scheme_and_get_id } + let(:valid_sap_xml) { Samples.xml "SAP-Schema-S-19.0.0" } let(:valid_assessor_request_body) do AssessorStub.new.fetch_request_body( domestic_rd_sap: "ACTIVE", @@ -17,17 +18,14 @@ non_domestic_sp3: "ACTIVE", ) end - let(:expected_lodgement) do - {} - end context "when migrating a Scottish assessment" do let(:scheme_id) { add_scheme_and_get_id } - let(:migrated_column_scotland) do + let(:migrated_scotland_rdsap_data) do ActiveRecord::Base.connection.exec_query( - "SELECT migrated FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ) + "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ).entries.first end before do @@ -47,7 +45,32 @@ ).status).to eq(403) end - it "is true in migrated column" do + it "has all expected data points present" do + + expected_rdsap_data = { + "assessment_id"=>"0000-0000-0000-0000-0000", + "date_of_assessment"=>'2023-06-27', + "date_registered"=>'2023-06-27', + "type_of_assessment"=>"RdSAP", + "current_energy_efficiency_rating"=>79, + "postcode"=>"FK1 1XE", + "date_of_expiry"=>'2033-06-26', + "address_line1"=>"1 Some Street", + "address_line2"=>"", + "address_line3"=>"", + "address_line4"=>"", + "town"=>"Newkirk", + "scheme_assessor_id"=>"SPEC000000", + "opt_out"=>false, + "address_id"=>"LPRN-0000000000", + "migrated"=>true, + "cancelled_at"=>nil, + "not_for_issue_at"=>nil, + "created_at"=>'2021-06-21', + "hashed_assessment_id"=>"4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", + "test_column"=>nil + } + response = lodge_assessment assessment_body: valid_rdsap_xml, accepted_responses: [201], scopes: %w[assessment:lodge migrate:assessment], @@ -58,7 +81,7 @@ migrated: "true" expect(JSON.parse(response.body, symbolize_names: true)[:data][:assessments].first).to eq "0000-0000-0000-0000-0000" - expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy + expect(migrated_scotland_rdsap_data).to eq expected_rdsap_data end context "when migrating the same assessment ID" do @@ -82,7 +105,7 @@ }, schema_name: "RdSAP-Schema-S-19.0", migrated: "true" - expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy + expect(migrated_scotland_rdsap_data["migrated"]).to be_truthy end end @@ -112,7 +135,52 @@ migrated: true).status expect(response).to eq 201 - expect(migrated_column_scotland.entries.first["migrated"]).to be_truthy + expect(migrated_scotland_rdsap_data["migrated"]).to be_truthy + end + end + + context "when migrating a Scottish SAP assessment" do + + expected_sap_assessment_data = { + "assessment_id"=>"0000-0000-0000-0000-0000", + "date_of_assessment"=>"2024-11-21", + "date_registered"=>"2024-11-21", + "type_of_assessment"=>"SAP", + "current_energy_efficiency_rating"=>91, + "postcode"=>"EH1 2NG", + "date_of_expiry"=>"2034-11-20", + "address_line1"=>"1 LOVELY ROAD", + "address_line2"=>"NICE ESTATE", + "address_line3"=>"", + "address_line4"=>nil, + "town"=>"TOWN", + "scheme_assessor_id"=>"SPEC000000", + "opt_out"=>false, + "address_id"=>"0000000001", + "migrated"=>true, + "cancelled_at"=>nil, + "not_for_issue_at"=>nil, + "created_at"=>"2021-06-21", + "hashed_assessment_id"=>"4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", + "test_column"=>nil + } + + it "is true in migrated column" do + response = lodge_assessment assessment_body: valid_sap_xml, + accepted_responses: [201], + scopes: %w[assessment:lodge migrate:assessment], + auth_data: { + scheme_ids: [scheme_id], + }, + schema_name: "SAP-Schema-S-19.0.0", + migrated: "true" + + sap_data = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ).entries.first + + expect(JSON.parse(response.body, symbolize_names: true)[:data][:assessments].first).to eq "0000-0000-0000-0000-0000" + expect(sap_data).to eq expected_sap_assessment_data end end end From 9e8085785d5bc8e7b18c3dafaafb70956de552c0 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 20 Oct 2025 16:36:56 +0100 Subject: [PATCH 04/23] EPBR-9037 Prevent scottish assessments going to data warehouse Adding an is_scottish flag to the even broadcaster in the lodge assessment file to be passed through to the notify new assessment to data warehouse use case. This means we can prevent scottish assessments being added to the queue to go to the data warehouse. --- lib/events/listener.rb | 2 +- lib/use_case/lodge_assessment.rb | 2 +- .../notify_new_assessment_to_data_warehouse.rb | 6 ++++-- spec/unit/use_case/lodge_assessment_spec.rb | 1 + .../notify_new_assessment_to_data_warehouse_spec.rb | 11 +++++++++++ 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/events/listener.rb b/lib/events/listener.rb index 9be986afd..5d8b4507b 100644 --- a/lib/events/listener.rb +++ b/lib/events/listener.rb @@ -20,7 +20,7 @@ def attach_listeners def attach_assessment_lodged @event_broadcaster.on :assessment_lodged do |**data| if notify_data_warehouse_enabled? - NotifyFactory.new_assessment_to_data_warehouse_use_case.execute(assessment_id: data[:assessment_id]) + NotifyFactory.new_assessment_to_data_warehouse_use_case.execute(assessment_id: data[:assessment_id], is_scottish: data[:is_scottish]) end NotifyFactory.lodgement_to_audit_log(entity_id: data[:assessment_id]) end diff --git a/lib/use_case/lodge_assessment.rb b/lib/use_case/lodge_assessment.rb index 835b1b9fa..22713f79f 100644 --- a/lib/use_case/lodge_assessment.rb +++ b/lib/use_case/lodge_assessment.rb @@ -109,7 +109,7 @@ def execute(data, migrated, schema_name) ) search_address = Domain::SearchAddress.new(data).to_hash @search_address_gateway.insert(search_address, is_scottish) - @event_broadcaster.broadcast :assessment_lodged, assessment_id: assessment.assessment_id + @event_broadcaster.broadcast :assessment_lodged, assessment_id: assessment.assessment_id, is_scottish: is_scottish assessment end diff --git a/lib/use_case/notify_new_assessment_to_data_warehouse.rb b/lib/use_case/notify_new_assessment_to_data_warehouse.rb index 9cfa7bbfb..7e2d772db 100644 --- a/lib/use_case/notify_new_assessment_to_data_warehouse.rb +++ b/lib/use_case/notify_new_assessment_to_data_warehouse.rb @@ -6,8 +6,10 @@ def initialize(redis_gateway:) @data_warehouse_queues_gateway = redis_gateway end - def execute(assessment_id:) - @data_warehouse_queues_gateway.push_to_queue(:assessments, assessment_id) + def execute(assessment_id:, is_scottish: false) + unless is_scottish + @data_warehouse_queues_gateway.push_to_queue(:assessments, assessment_id) + end rescue Gateway::DataWarehouseQueuesGateway::PushFailedError => e raise CouldNotCompleteError, "Notifying assessment ID #{assessment_id} failed; error from gateway: #{e.message}" end diff --git a/spec/unit/use_case/lodge_assessment_spec.rb b/spec/unit/use_case/lodge_assessment_spec.rb index dd51bff4f..a830173c7 100644 --- a/spec/unit/use_case/lodge_assessment_spec.rb +++ b/spec/unit/use_case/lodge_assessment_spec.rb @@ -292,6 +292,7 @@ expect { use_case.execute(data, true, "RdSAP-Schema-20.0.0") }.to broadcast( :assessment_lodged, assessment_id: data[:assessment_id], + is_scottish: false, ) end end diff --git a/spec/unit/use_case/notify_new_assessment_to_data_warehouse_spec.rb b/spec/unit/use_case/notify_new_assessment_to_data_warehouse_spec.rb index 03c87c284..fede19621 100644 --- a/spec/unit/use_case/notify_new_assessment_to_data_warehouse_spec.rb +++ b/spec/unit/use_case/notify_new_assessment_to_data_warehouse_spec.rb @@ -17,6 +17,17 @@ end end + describe "Scotland paths" do + before do + allow(data_warehouse_queues_gateway).to receive(:push_to_queue) + use_case.execute(assessment_id:, is_scottish: true) + end + + it "calls down to the redis gateway to push to the queue" do + expect(data_warehouse_queues_gateway).not_to have_received(:push_to_queue) + end + end + context "when the gateway is unable to push and raises an error" do before do allow(data_warehouse_queues_gateway).to receive(:push_to_queue).and_raise Gateway::DataWarehouseQueuesGateway::PushFailedError From 04524dfc758f4c8cf8f6af7f30d6c4cd61288980 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 21 Oct 2025 16:40:59 +0100 Subject: [PATCH 05/23] EPBR-9184 Update is_scottish gateway params to be named params Where the is_scottish param is added to gateways it has been made a named param. Test have also been added to cover get canonical use case and assessment address id gateway tests to fix ever passing test. --- lib/gateway/assessments_address_id_gateway.rb | 4 +- lib/gateway/assessments_gateway.rb | 2 +- lib/gateway/green_deal_plans_gateway.rb | 4 +- lib/gateway/related_assessments_gateway.rb | 2 +- lib/gateway/search_address_gateway.rb | 2 +- lib/use_case/get_canonical_address_id.rb | 2 +- lib/use_case/lodge_assessment.rb | 13 +-- spec/acceptance/scotland-schema/lodge_spec.rb | 90 +++++++++---------- .../assessments_address_id_gateway_spec.rb | 12 +-- .../related_assessments_gateway_spec.rb | 2 +- .../gateway/search_address_gateway_spec.rb | 2 +- .../use_case/get_canonical_address_id_spec.rb | 23 +++++ spec/unit/use_case/lodge_assessment_spec.rb | 2 +- 13 files changed, 91 insertions(+), 69 deletions(-) diff --git a/lib/gateway/assessments_address_id_gateway.rb b/lib/gateway/assessments_address_id_gateway.rb index 4f166697b..1f805344d 100644 --- a/lib/gateway/assessments_address_id_gateway.rb +++ b/lib/gateway/assessments_address_id_gateway.rb @@ -15,11 +15,11 @@ class AssessmentsAddressIdScotland < ActiveRecord::Base self.table_name = "scotland.assessments_address_id" end - def fetch(assessment_id, is_scottish = false) + def fetch(assessment_id, is_scottish: false) is_scottish ? AssessmentsAddressIdScotland.find(assessment_id).as_json.symbolize_keys : AssessmentsAddressId.find(assessment_id).as_json.symbolize_keys end - def send_to_db(record, is_scottish = false) + def send_to_db(record, is_scottish: false) if is_scottish existing_assessment_address_id = AssessmentsAddressIdScotland.find_by assessment_id: record[:assessment_id] diff --git a/lib/gateway/assessments_gateway.rb b/lib/gateway/assessments_gateway.rb index 83d715e2e..0c12278e7 100644 --- a/lib/gateway/assessments_gateway.rb +++ b/lib/gateway/assessments_gateway.rb @@ -25,7 +25,7 @@ class AssessmentAlreadyExists < StandardError; end AC-REPORT ].freeze - def insert_or_update(assessment, is_scottish) + def insert_or_update(assessment, is_scottish: false) check_valid_energy_ratings assessment send_update_to_db(assessment, is_scottish) end diff --git a/lib/gateway/green_deal_plans_gateway.rb b/lib/gateway/green_deal_plans_gateway.rb index e3fb8671b..d908c1abc 100644 --- a/lib/gateway/green_deal_plans_gateway.rb +++ b/lib/gateway/green_deal_plans_gateway.rb @@ -37,7 +37,7 @@ def add(green_deal_plan, assessment_id) link_green_deal_to_assessment green_deal_plan.green_deal_plan_id, assessment_id end - def link_green_deal_to_assessment(green_deal_plan_id, assessment_id, is_scottish = false) + def link_green_deal_to_assessment(green_deal_plan_id, assessment_id, is_scottish: false) schema = is_scottish ? "scotland." : "public." sql = <<-SQL INSERT INTO #{schema}green_deal_assessments (green_deal_plan_id, assessment_id) @@ -77,7 +77,7 @@ def update_end_date_and_charges(green_deal_plan_id:, end_date:, charges:) GreenDealPlan.update(green_deal_plan_id, { end_date: end_date, charges: charges }) end - def fetch(assessment_id, is_scottish = false) + def fetch(assessment_id, is_scottish: false) schema = is_scottish ? "scotland." : "public." sql = <<-SQL SELECT diff --git a/lib/gateway/related_assessments_gateway.rb b/lib/gateway/related_assessments_gateway.rb index ad274224f..63fca37c3 100644 --- a/lib/gateway/related_assessments_gateway.rb +++ b/lib/gateway/related_assessments_gateway.rb @@ -3,7 +3,7 @@ class RelatedAssessmentsGateway class Assessment < ActiveRecord::Base end - def related_assessment_ids(address_id, is_scottish = false) + def related_assessment_ids(address_id, is_scottish: false) return [] if address_id.blank? schema = is_scottish ? "scotland." : "public." diff --git a/lib/gateway/search_address_gateway.rb b/lib/gateway/search_address_gateway.rb index 07df420da..e7f600083 100644 --- a/lib/gateway/search_address_gateway.rb +++ b/lib/gateway/search_address_gateway.rb @@ -1,6 +1,6 @@ module Gateway class SearchAddressGateway < StandardError - def insert(object, is_scottish = false) + def insert(object, is_scottish: false) schema = is_scottish ? "scotland." : "public." insert_sql = <<-SQL INSERT INTO #{schema}assessment_search_address(assessment_id, address) diff --git a/lib/use_case/get_canonical_address_id.rb b/lib/use_case/get_canonical_address_id.rb index 429712f9f..17abcc6ac 100644 --- a/lib/use_case/get_canonical_address_id.rb +++ b/lib/use_case/get_canonical_address_id.rb @@ -23,7 +23,7 @@ def execute(rrn:, address_id:, type_of_assessment: nil, related_rrn: nil, is_sco related_assessment_id = address_id[4..] begin related_assessment = - @assessments_address_id_gateway.fetch(related_assessment_id, is_scottish) + @assessments_address_id_gateway.fetch(related_assessment_id, is_scottish: is_scottish) rescue ActiveRecord::RecordNotFound related_assessment = nil end diff --git a/lib/use_case/lodge_assessment.rb b/lib/use_case/lodge_assessment.rb index 22713f79f..3e2d2313e 100644 --- a/lib/use_case/lodge_assessment.rb +++ b/lib/use_case/lodge_assessment.rb @@ -85,7 +85,7 @@ def execute(data, migrated, schema_name) ) if migrated - @assessments_gateway.insert_or_update(assessment, is_scottish) + @assessments_gateway.insert_or_update(assessment, is_scottish: is_scottish) insert_country_id(data[:assessment_id], is_scottish, data[:country_id], upsert: true) else begin @@ -108,7 +108,7 @@ def execute(data, migrated, schema_name) is_scottish, ) search_address = Domain::SearchAddress.new(data).to_hash - @search_address_gateway.insert(search_address, is_scottish) + @search_address_gateway.insert(search_address, is_scottish: is_scottish) @event_broadcaster.broadcast :assessment_lodged, assessment_id: assessment.assessment_id, is_scottish: is_scottish assessment @@ -179,7 +179,7 @@ def find_related_rrn(wrapper_hash) end def insert_assessment_address_id(assessment, is_scottish) - canonical_address_id = get_canonical_address_id(assessment) + canonical_address_id = get_canonical_address_id(assessment, is_scottish) source = get_assessments_address_id_source( lodged_address_id: assessment.address_id, @@ -191,12 +191,12 @@ def insert_assessment_address_id(assessment, is_scottish) address_id: canonical_address_id, source:, }, - is_scottish, + is_scottish: is_scottish, ) end def associate_related_green_deals(assessment, is_scottish) - canonical_address_id = @assessments_address_id_gateway.fetch(assessment.assessment_id, is_scottish)[:address_id] + canonical_address_id = @assessments_address_id_gateway.fetch(assessment.assessment_id, is_scottish: is_scottish)[:address_id] related_assessment_ids = @related_assessments_gateway.related_assessment_ids(canonical_address_id).reject { |id| id == assessment.assessment_id } # Need to update the lodge_assessment method in assertive client green_deal_plan_sets = related_assessment_ids.map { |assessment_id| @green_deal_plans_gateway.fetch assessment_id } @@ -210,12 +210,13 @@ def associate_related_green_deals(assessment, is_scottish) Logger.new($stdout).error "Associating related green deals for the assessment #{assessment.assessment_id} failed with error #{e.class}, message #{e.message}, backtrace #{e.backtrace.join('; ')}" end - def get_canonical_address_id(assessment) + def get_canonical_address_id(assessment, is_scottish) @get_canonical_address_id_use_case.execute( rrn: assessment.assessment_id, related_rrn: assessment.related_rrn, address_id: assessment.address_id, type_of_assessment: assessment.type_of_assessment, + is_scottish: is_scottish, ) end diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb index 1cda04f8f..1ae31aed6 100644 --- a/spec/acceptance/scotland-schema/lodge_spec.rb +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -25,7 +25,7 @@ let(:migrated_scotland_rdsap_data) do ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ).entries.first + ).entries.first end before do @@ -46,29 +46,28 @@ end it "has all expected data points present" do - expected_rdsap_data = { - "assessment_id"=>"0000-0000-0000-0000-0000", - "date_of_assessment"=>'2023-06-27', - "date_registered"=>'2023-06-27', - "type_of_assessment"=>"RdSAP", - "current_energy_efficiency_rating"=>79, - "postcode"=>"FK1 1XE", - "date_of_expiry"=>'2033-06-26', - "address_line1"=>"1 Some Street", - "address_line2"=>"", - "address_line3"=>"", - "address_line4"=>"", - "town"=>"Newkirk", - "scheme_assessor_id"=>"SPEC000000", - "opt_out"=>false, - "address_id"=>"LPRN-0000000000", - "migrated"=>true, - "cancelled_at"=>nil, - "not_for_issue_at"=>nil, - "created_at"=>'2021-06-21', - "hashed_assessment_id"=>"4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", - "test_column"=>nil + "assessment_id" => "0000-0000-0000-0000-0000", + "date_of_assessment" => "2023-06-27", + "date_registered" => "2023-06-27", + "type_of_assessment" => "RdSAP", + "current_energy_efficiency_rating" => 79, + "postcode" => "FK1 1XE", + "date_of_expiry" => "2033-06-26", + "address_line1" => "1 Some Street", + "address_line2" => "", + "address_line3" => "", + "address_line4" => "", + "town" => "Newkirk", + "scheme_assessor_id" => "SPEC000000", + "opt_out" => false, + "address_id" => "LPRN-0000000000", + "migrated" => true, + "cancelled_at" => nil, + "not_for_issue_at" => nil, + "created_at" => "2021-06-21", + "hashed_assessment_id" => "4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", + "test_column" => nil, } response = lodge_assessment assessment_body: valid_rdsap_xml, @@ -140,29 +139,28 @@ end context "when migrating a Scottish SAP assessment" do - expected_sap_assessment_data = { - "assessment_id"=>"0000-0000-0000-0000-0000", - "date_of_assessment"=>"2024-11-21", - "date_registered"=>"2024-11-21", - "type_of_assessment"=>"SAP", - "current_energy_efficiency_rating"=>91, - "postcode"=>"EH1 2NG", - "date_of_expiry"=>"2034-11-20", - "address_line1"=>"1 LOVELY ROAD", - "address_line2"=>"NICE ESTATE", - "address_line3"=>"", - "address_line4"=>nil, - "town"=>"TOWN", - "scheme_assessor_id"=>"SPEC000000", - "opt_out"=>false, - "address_id"=>"0000000001", - "migrated"=>true, - "cancelled_at"=>nil, - "not_for_issue_at"=>nil, - "created_at"=>"2021-06-21", - "hashed_assessment_id"=>"4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", - "test_column"=>nil + "assessment_id" => "0000-0000-0000-0000-0000", + "date_of_assessment" => "2024-11-21", + "date_registered" => "2024-11-21", + "type_of_assessment" => "SAP", + "current_energy_efficiency_rating" => 91, + "postcode" => "EH1 2NG", + "date_of_expiry" => "2034-11-20", + "address_line1" => "1 LOVELY ROAD", + "address_line2" => "NICE ESTATE", + "address_line3" => "", + "address_line4" => nil, + "town" => "TOWN", + "scheme_assessor_id" => "SPEC000000", + "opt_out" => false, + "address_id" => "0000000001", + "migrated" => true, + "cancelled_at" => nil, + "not_for_issue_at" => nil, + "created_at" => "2021-06-21", + "hashed_assessment_id" => "4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a", + "test_column" => nil, } it "is true in migrated column" do @@ -177,7 +175,7 @@ sap_data = ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ).entries.first + ).entries.first expect(JSON.parse(response.body, symbolize_names: true)[:data][:assessments].first).to eq "0000-0000-0000-0000-0000" expect(sap_data).to eq expected_sap_assessment_data diff --git a/spec/unit/gateway/assessments_address_id_gateway_spec.rb b/spec/unit/gateway/assessments_address_id_gateway_spec.rb index 3a7eadcdc..416d1832f 100644 --- a/spec/unit/gateway/assessments_address_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_address_id_gateway_spec.rb @@ -62,17 +62,17 @@ it "returns the expected response for a Scottish assessment" do ActiveRecord::Base.connection.exec_query( - "INSERT INTO scotland.assessments_address_id(assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0001', 'RRN-0000-0000-0000-0000-0001', 'lodgement', null)", + "INSERT INTO scotland.assessments_address_id(assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0002', 'RRN-0000-0000-0000-0000-0002', 'lodgement', null)", ) expected_response = { - address_id: "RRN-0000-0000-0000-0000-0001", + address_id: "RRN-0000-0000-0000-0000-0002", address_updated_at: nil, - assessment_id: "0000-0000-0000-0000-0001", + assessment_id: "0000-0000-0000-0000-0002", source: "lodgement", } - assessment_id = "0000-0000-0000-0000-0001" - response = gateway.fetch(assessment_id, true) + assessment_id = "0000-0000-0000-0000-0002" + response = gateway.fetch(assessment_id, is_scottish: true) expect(response).to eq expected_response end @@ -103,7 +103,7 @@ source: "lodgement", } - gateway.send_to_db(entry, true) + gateway.send_to_db(entry, is_scottish: true) row = ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments_address_id WHERE assessment_id = '0000-0000-0000-0000-0001'", ) diff --git a/spec/unit/gateway/related_assessments_gateway_spec.rb b/spec/unit/gateway/related_assessments_gateway_spec.rb index 7f46d0fc2..b21622651 100644 --- a/spec/unit/gateway/related_assessments_gateway_spec.rb +++ b/spec/unit/gateway/related_assessments_gateway_spec.rb @@ -41,7 +41,7 @@ it "returns related assessment IDs when calling related_assessment_ids for a Sottish assessment" do ActiveRecord::Base.connection.exec_query("INSERT INTO scotland.assessments_address_id (assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0001','UPRN-000000000000', 'lodgement', '02/02/2023');") - expect(gateway.related_assessment_ids(address_id, true).sort).to eq %w[0000-0000-0000-0000-0001] + expect(gateway.related_assessment_ids(address_id, is_scottish: true).sort).to eq %w[0000-0000-0000-0000-0001] end end end diff --git a/spec/unit/gateway/search_address_gateway_spec.rb b/spec/unit/gateway/search_address_gateway_spec.rb index 2d49203b2..786d2cc28 100644 --- a/spec/unit/gateway/search_address_gateway_spec.rb +++ b/spec/unit/gateway/search_address_gateway_spec.rb @@ -44,7 +44,7 @@ context "when inserting Scotland row" do it "the saved data is correct" do - gateway.insert(search_address.to_hash, true) + gateway.insert(search_address.to_hash, is_scottish: true) saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM scotland.assessment_search_address") expect(saved_data.rows.length).to eq 1 expect(saved_data[0]["assessment_id"]).to eq "0000-0000-0000-0000-0005" diff --git a/spec/unit/use_case/get_canonical_address_id_spec.rb b/spec/unit/use_case/get_canonical_address_id_spec.rb index c40bb344b..45068a2b3 100644 --- a/spec/unit/use_case/get_canonical_address_id_spec.rb +++ b/spec/unit/use_case/get_canonical_address_id_spec.rb @@ -9,6 +9,29 @@ let(:address_base_search_gateway) { instance_double Gateway::AddressBaseSearchGateway } let(:assessments_address_id_gateway) { instance_double Gateway::AssessmentsAddressIdGateway } + context "when getting the canonical address ID for a Scottish lodgement when no UPRN is provided" do + before do + allow(address_base_search_gateway).to receive(:check_uprn_exists).and_return(false) + allow(assessments_address_id_gateway).to receive(:fetch).with("0000-0000-0000-0000-0001", is_scottish: true).and_return({ address_id: "RRN-0000-0000-0000-0000-0000" }) + end + + context "when determining the address ID for the scottish lodgement" do + let(:params) do + { + rrn: "0000-0000-0000-0000-0000", + related_rrn: "0000-0000-0000-0000-0001", + type_of_assessment: "SAP", + address_id: "RRN-0000-0000-0000-0000-0001", + is_scottish: true, + } + end + + it "assigns the address ID based on the assessment id given" do + expect(use_case.execute(**params)).to eq "RRN-0000-0000-0000-0000-0000" + end + end + end + context "when getting the canonical address ID for a CEPC dual lodgement when the UPRN provided does not exist" do before do allow(address_base_search_gateway).to receive(:check_uprn_exists).and_return(false) diff --git a/spec/unit/use_case/lodge_assessment_spec.rb b/spec/unit/use_case/lodge_assessment_spec.rb index a830173c7..4f65c3dd5 100644 --- a/spec/unit/use_case/lodge_assessment_spec.rb +++ b/spec/unit/use_case/lodge_assessment_spec.rb @@ -221,7 +221,7 @@ use_case.execute(data, true, "SAP-Schema-18.0.0") expect(assessments_gateway).to have_received(:insert_or_update) - expect(search_address_gateway).to have_received(:insert).with({ assessment_id: "2000-0000-0000-0000-0001", address: "1 some street some area some county" }, false) + expect(search_address_gateway).to have_received(:insert).with({ assessment_id: "2000-0000-0000-0000-0001", address: "1 some street some area some county" }, is_scottish: false) end it "calls AssessmentsXMLGateway to save the XML data to the assessments_xml table" do From e7971885a0102ddf7d0d2b799deb24e1989ac3ee Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Wed, 22 Oct 2025 14:23:39 +0100 Subject: [PATCH 06/23] EPBR-9159 Update assessments_country_id_gateway_spec.rb to avoid confusion due to repeated rrn --- spec/unit/gateway/assessments_country_id_gateway_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/unit/gateway/assessments_country_id_gateway_spec.rb b/spec/unit/gateway/assessments_country_id_gateway_spec.rb index 797729a9d..04517ea7e 100644 --- a/spec/unit/gateway/assessments_country_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_country_id_gateway_spec.rb @@ -28,9 +28,10 @@ context "when inserting a scottish assessment_id" do it "updates the row without error using upsert" do + assessment_id = "0000-0000-0001-1234-0022" gateway.insert(assessment_id:, country_id: 2, upsert: true, is_scottish: true) row = ActiveRecord::Base.connection.exec_query( - "SELECT country_id FROM scotland.assessments_country_ids WHERE assessment_id = '0000-0000-0001-1234-0000'", + "SELECT * FROM scotland.assessments_country_ids WHERE assessment_id = '0000-0000-0001-1234-0022'", ) expect(row.entries.first["country_id"]).to eq 2 end From 156746fce4e85152b9320f49c2c46d395c539e95 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Thu, 23 Oct 2025 12:10:35 +0100 Subject: [PATCH 07/23] EPBR-9159 Update related_assessments_gateway_spec.rb to use unique address id --- spec/unit/gateway/related_assessments_gateway_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/unit/gateway/related_assessments_gateway_spec.rb b/spec/unit/gateway/related_assessments_gateway_spec.rb index b21622651..9cefc24fe 100644 --- a/spec/unit/gateway/related_assessments_gateway_spec.rb +++ b/spec/unit/gateway/related_assessments_gateway_spec.rb @@ -40,8 +40,8 @@ end it "returns related assessment IDs when calling related_assessment_ids for a Sottish assessment" do - ActiveRecord::Base.connection.exec_query("INSERT INTO scotland.assessments_address_id (assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0001','UPRN-000000000000', 'lodgement', '02/02/2023');") - expect(gateway.related_assessment_ids(address_id, is_scottish: true).sort).to eq %w[0000-0000-0000-0000-0001] + ActiveRecord::Base.connection.exec_query("INSERT INTO scotland.assessments_address_id (assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0003','UPRN-000000000003', 'lodgement', '02/02/2023');") + expect(gateway.related_assessment_ids('UPRN-000000000003', is_scottish: true).sort).to eq %w[0000-0000-0000-0000-0003] end end end From 590461deb9247828209bf7f3e1a5aa4a6c372e42 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Thu, 23 Oct 2025 12:23:31 +0100 Subject: [PATCH 08/23] EPBR-9159 Update assessments_country_id_gateway_spec.rb test labels for clarity --- spec/unit/gateway/assessments_country_id_gateway_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/unit/gateway/assessments_country_id_gateway_spec.rb b/spec/unit/gateway/assessments_country_id_gateway_spec.rb index 04517ea7e..c4f4cb703 100644 --- a/spec/unit/gateway/assessments_country_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_country_id_gateway_spec.rb @@ -26,8 +26,8 @@ end end - context "when inserting a scottish assessment_id" do - it "updates the row without error using upsert" do + context "when inserting an assessment into the scotland equivalent of the assessments_country_ids table" do + it "it saves the row to the table" do assessment_id = "0000-0000-0001-1234-0022" gateway.insert(assessment_id:, country_id: 2, upsert: true, is_scottish: true) row = ActiveRecord::Base.connection.exec_query( From bae195a9dc35b3406a2bfdfc6ff5b05626d0ebf0 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Thu, 23 Oct 2025 12:47:33 +0100 Subject: [PATCH 09/23] EPBR-9159 Update search_address_gateway_spec.rb to remove redundant test and update label --- spec/unit/gateway/search_address_gateway_spec.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/unit/gateway/search_address_gateway_spec.rb b/spec/unit/gateway/search_address_gateway_spec.rb index 786d2cc28..d69f95a63 100644 --- a/spec/unit/gateway/search_address_gateway_spec.rb +++ b/spec/unit/gateway/search_address_gateway_spec.rb @@ -22,10 +22,6 @@ describe "#insert" do context "when inserting row" do - it "saves data to the search address table without error" do - expect { gateway.insert search_address.to_hash }.not_to raise_error - end - it "the saved data is correct" do gateway.insert search_address.to_hash saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM assessment_search_address") @@ -42,7 +38,7 @@ end end - context "when inserting Scotland row" do + context "when inserting into the Scotland version of the table" do it "the saved data is correct" do gateway.insert(search_address.to_hash, is_scottish: true) saved_data = ActiveRecord::Base.connection.exec_query("SELECT * FROM scotland.assessment_search_address") From 771c80183defadd052b56dfff157a1737e0a6d20 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Thu, 30 Oct 2025 11:34:46 +0000 Subject: [PATCH 10/23] EPBR-9159 Add tests to cover the insert or update method --- lib/gateway/assessments_gateway.rb | 11 +- spec/unit/gateway/assessments_gateway_spec.rb | 175 ++++++++++++++++++ 2 files changed, 180 insertions(+), 6 deletions(-) diff --git a/lib/gateway/assessments_gateway.rb b/lib/gateway/assessments_gateway.rb index 0c12278e7..e2d39c0d2 100644 --- a/lib/gateway/assessments_gateway.rb +++ b/lib/gateway/assessments_gateway.rb @@ -222,7 +222,7 @@ def send_insert_to_db(assessment) end unless assessment.get(:related_rrn).nil? - add_linked_assessment assessment + add_linked_assessment(assessment, 'public.') end end end @@ -242,9 +242,8 @@ def send_update_to_db(assessment, is_scottish) is_scottish ? AssessmentScotland.create(assessment.to_record) : Assessment.create(assessment.to_record) end - # We are going to have to re-think related assessments for Scotland non-dom unless assessment.get(:related_rrn).nil? - add_linked_assessment assessment + add_linked_assessment(assessment, schema) end end end @@ -311,7 +310,7 @@ def remove_and_relodge_assessment(assessment, schema) Assessment.create assessment.to_record end - # Need to test this + #TODO Need to test this reattach_green_deal_plans(green_deal_plan_ids, binds, schema) end @@ -358,9 +357,9 @@ def reattach_green_deal_plans(green_deal_plan_ids, binds, schema) end end - def add_linked_assessment(assessment) + def add_linked_assessment(assessment, schema) add_linked_assessment = <<-SQL - INSERT INTO linked_assessments (assessment_id, linked_assessment_id) + INSERT INTO #{schema}linked_assessments (assessment_id, linked_assessment_id) VALUES ($1, $2) SQL diff --git a/spec/unit/gateway/assessments_gateway_spec.rb b/spec/unit/gateway/assessments_gateway_spec.rb index 6963bd1ca..40bdaab4a 100644 --- a/spec/unit/gateway/assessments_gateway_spec.rb +++ b/spec/unit/gateway/assessments_gateway_spec.rb @@ -14,6 +14,8 @@ def fetch_created_at(assessment_id) "9999" end + let(:fetch_assessor_stub) { AssessorStub.new } + include RSpecRegisterApiServiceMixin include_context "when updating EPC dates" @@ -245,4 +247,177 @@ def fetch_created_at(assessment_id) expect(gateway.update_created_at_from_landmark?("0000-0000-0000-0000-0001", landmark_date)).to be false end end + + describe "#insert_or_update" do + + let(:scheme_id) { add_scheme_and_get_id } + let(:assessment) { + Domain::AssessmentIndexRecord.new( + assessment_id: '0000-0000-0000-0000-0000', + type_of_assessment: 'RdSAP', + date_of_assessment: '2024-01-16 17:52:43.00000', + date_registered: '2024-01-16 17:52:43.00000', + date_of_expiry: '2024-01-16 17:52:43.00000', + assessor: Domain::Assessor.new( + scheme_assessor_id: "SPEC000000" , + first_name: 'Test', + last_name: 'Assessor', + middle_names: 'Brian', + date_of_birth: '2000-10-01', + email: 'test@example.com', + telephone_number: '07865672531', + registered_by_id: scheme_id, + registered_by_name: scheme_id, + search_results_comparison_postcode: + 'SE32 5TR', + also_known_as: 'Bob', + address_line1: '6 Street place', + address_line2: 'Whimple area', + address_line3: 'Bloopshire', + town: 'London', + postcode: 'we 32 4ew', + company_reg_no: '23222', + company_address_line1: '3 Week street', + company_address_line2: 'Bloop place', + company_address_line3: 'London', + company_town: 'London', + company_postcode: 'AA1 2AA', + company_website: 'test.com', + company_telephone_number: '07865672531', + company_email: 'test@example.com', + company_name: 'Test', + domestic_sap_qualification: 'ACTIVE', + domestic_rd_sap_qualification: 'ACTIVE', + non_domestic_sp3_qualification: 'ACTIVE', + non_domestic_cc4_qualification: 'ACTIVE', + non_domestic_dec_qualification: 'ACTIVE', + non_domestic_nos3_qualification:'ACTIVE', + non_domestic_nos4_qualification: 'ACTIVE', + non_domestic_nos5_qualification: 'ACTIVE', + gda_qualification: 'ACTIVE', + ), + current_energy_efficiency_rating: 23, + potential_energy_efficiency_rating: 45, + address_id: 'RRN-0000-0000-0000-0000-0000', + address_line1: '4 Bloop lane', + address_line2: 'Gloop area', + address_line3: '', + address_line4: '', + town: 'London', + postcode: 'DW12 1WS', + xml: 'XML', + migrated: true, + related_rrn: '', + hashed_assessment_id: 'Hash23123213', + country_id: 1, + ) + } + + let(:updated_assessment) { + Domain::AssessmentIndexRecord.new( + assessment_id: '0000-0000-0000-0000-0000', + type_of_assessment: 'SAP', + date_of_assessment: '2024-01-16 17:52:43.00000', + date_registered: '2024-01-16 17:52:43.00000', + date_of_expiry: '2024-01-16 17:52:43.00000', + assessor: Domain::Assessor.new( + scheme_assessor_id: "SPEC000000" , + first_name: 'Test', + last_name: 'Assessor', + middle_names: 'Brian', + date_of_birth: '2000-10-01', + email: 'test@example.com', + telephone_number: '07865672531', + registered_by_id: scheme_id, + registered_by_name: scheme_id, + search_results_comparison_postcode: + 'SE32 5TR', + also_known_as: 'Bob', + address_line1: '6 Street place', + address_line2: 'Whimple area', + address_line3: 'Bloopshire', + town: 'London', + postcode: 'we 32 4ew', + company_reg_no: '23222', + company_address_line1: '3 Week street', + company_address_line2: 'Bloop place', + company_address_line3: 'London', + company_town: 'London', + company_postcode: 'AA1 2AA', + company_website: 'test.com', + company_telephone_number: '07865672531', + company_email: 'test@example.com', + company_name: 'Test', + domestic_sap_qualification: 'ACTIVE', + domestic_rd_sap_qualification: 'ACTIVE', + non_domestic_sp3_qualification: 'ACTIVE', + non_domestic_cc4_qualification: 'ACTIVE', + non_domestic_dec_qualification: 'ACTIVE', + non_domestic_nos3_qualification:'ACTIVE', + non_domestic_nos4_qualification: 'ACTIVE', + non_domestic_nos5_qualification: 'ACTIVE', + gda_qualification: 'ACTIVE', + ), + current_energy_efficiency_rating: 70, + potential_energy_efficiency_rating: 80, + address_id: 'RRN-0000-0000-0000-0000-0000', + address_line1: '4 Bloop lane', + address_line2: 'Gloop area', + address_line3: '', + address_line4: '', + town: 'London', + postcode: 'DW12 1WS', + xml: 'XML', + migrated: true, + related_rrn: '', + hashed_assessment_id: 'Hash23123213', + country_id: 1, + ) + } + + before do + add_assessor( + scheme_id:, + assessor_id: "SPEC000000", + body: fetch_assessor_stub.fetch_request_body( + non_domestic_nos3: "ACTIVE", + domestic_rd_sap: "ACTIVE", + ), + ) + end + + it "inserts the assessment" do + gateway.insert_or_update(assessment, is_scottish: false) + result = Gateway::AssessmentsGateway::Assessment.find_by(assessment_id: "0000-0000-0000-0000-0000") + expect(result.type_of_assessment).to eq("RdSAP") + end + + it "updates the original assessment" do + gateway.insert_or_update(assessment, is_scottish: false) + gateway.insert_or_update(updated_assessment, is_scottish: false) + result = Gateway::AssessmentsGateway::Assessment.find_by(assessment_id: "0000-0000-0000-0000-0000") + expect(result.type_of_assessment).to eq("SAP") + end + + it "does not raise an error when no ID is found" do + expect { gateway.update_field("0000-0000-0000-0000-0004", "created_at", "2024-01-16 17:52:43.00000") }.not_to raise_error + end + + it "inserts the scottish assessment to the scottish schema" do + gateway.insert_or_update(assessment, is_scottish: true) + result = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ).entries.first + expect(result['type_of_assessment']).to eq("RdSAP") + end + + it "updates the original scottish assessment in the scottish schema" do + gateway.insert_or_update(assessment, is_scottish: true) + gateway.insert_or_update(updated_assessment, is_scottish: true) + result = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", + ).entries.first + expect(result['type_of_assessment']).to eq("SAP") + end + end end From e8447a3a4fa35fbf0668d43e691c024935e65574 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Thu, 30 Oct 2025 16:26:29 +0000 Subject: [PATCH 11/23] EPBR-9159 Add tests to cover the sent to db method in the assessment_xml_gateway --- .../gateway/assessments_xml_gateway_spec.rb | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 spec/unit/gateway/assessments_xml_gateway_spec.rb diff --git a/spec/unit/gateway/assessments_xml_gateway_spec.rb b/spec/unit/gateway/assessments_xml_gateway_spec.rb new file mode 100644 index 000000000..986323c97 --- /dev/null +++ b/spec/unit/gateway/assessments_xml_gateway_spec.rb @@ -0,0 +1,45 @@ +describe Gateway::AssessmentsXmlGateway do + include RSpecRegisterApiServiceMixin + context "interacting with the assessments xml tables" do + subject(:gateway) { described_class.new } + + + let(:record) do + { + assessment_id: "0000-0000-0000-0000-0000", + xml: '0000-0000-0000-0000-0000', + schema_type: "RdSAP-Schema-19.0.0" + } + end + + let(:scottish_record) do + { + assessment_id: "0000-0000-0000-0000-0001", + xml: '0000-0000-0000-0000-0001', + schema_type: "RdSAP-Schema-S-19.0" + } + end + + before do + Gateway::SchemesGateway::Scheme.create(scheme_id: '1') + Gateway::AssessorsGateway::Assessor.create(scheme_assessor_id: '12', first_name: "test_forename", last_name: "test_surname", date_of_birth: "1970-01-05", registered_by: '1') + end + + context "#sent_to_db" do + it "sends the xml record to the assessments xml table" do + Gateway::AssessmentsGateway::Assessment.create(assessment_id: "0000-0000-0000-0000-0000", scheme_assessor_id: '12', type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) + expect(gateway.send_to_db(record, false).assessment_id).to eq('0000-0000-0000-0000-0000') + end + + it "sends the Scottish xml record to the Scottish assessments xml table" do + Gateway::AssessmentsGateway::AssessmentScotland.create(assessment_id: "0000-0000-0000-0000-0001", scheme_assessor_id: '12', type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) + gateway.send_to_db(scottish_record, true) + result = ActiveRecord::Base.connection.exec_query( + "SELECT * FROM scotland.assessments_xml WHERE assessment_id = '0000-0000-0000-0000-0001'", + ).entries.first + + expect(result['assessment_id']).to eq('0000-0000-0000-0000-0001') + end + end + end +end From 803b4bd990a06b722fbeca91f407dae5f2bfc6c5 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 10:45:48 +0000 Subject: [PATCH 12/23] EPBR-9159 Update insert_country fall back param to named param in lodge_assessment.rb --- lib/use_case/lodge_assessment.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/use_case/lodge_assessment.rb b/lib/use_case/lodge_assessment.rb index 3e2d2313e..683466b1a 100644 --- a/lib/use_case/lodge_assessment.rb +++ b/lib/use_case/lodge_assessment.rb @@ -86,12 +86,12 @@ def execute(data, migrated, schema_name) if migrated @assessments_gateway.insert_or_update(assessment, is_scottish: is_scottish) - insert_country_id(data[:assessment_id], is_scottish, data[:country_id], upsert: true) + insert_country_id(data[:assessment_id], is_scottish, country_id: data[:country_id], upsert: true) else begin # TODO: UPDATE WHEN DOING LODGEMENT @assessments_gateway.insert assessment - insert_country_id(data[:assessment_id], is_scottish, data[:country_id]) + insert_country_id(data[:assessment_id], is_scottish, country_id: data[:country_id]) rescue Gateway::AssessmentsGateway::AssessmentAlreadyExists raise DuplicateAssessmentIdException end @@ -237,7 +237,7 @@ def get_assessments_address_id_source( end end - def insert_country_id(assessment_id, is_scottish, country_id = nil, upsert: false) + def insert_country_id(assessment_id, is_scottish, country_id: nil, upsert: false) @assessments_country_id_gateway.insert(assessment_id:, country_id:, upsert:, is_scottish:) unless country_id.nil? end end From 942cb5b3c994ecfbec6b3f519b84666a47a9e342 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 11:02:53 +0000 Subject: [PATCH 13/23] EPBR-9159 Update lodge_spec.rb for clarity --- spec/acceptance/scotland-schema/lodge_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb index 1ae31aed6..5c0a8843a 100644 --- a/spec/acceptance/scotland-schema/lodge_spec.rb +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -19,7 +19,7 @@ ) end - context "when migrating a Scottish assessment" do + context "when migrating a domestic Scottish assessment" do let(:scheme_id) { add_scheme_and_get_id } let(:migrated_scotland_rdsap_data) do @@ -95,7 +95,7 @@ migrated: "true" end - it "is true in migrated column" do + it "it doesn't raise and error" do lodge_assessment assessment_body: valid_rdsap_xml, accepted_responses: [201], scopes: %w[assessment:lodge migrate:assessment], @@ -104,7 +104,7 @@ }, schema_name: "RdSAP-Schema-S-19.0", migrated: "true" - expect(migrated_scotland_rdsap_data["migrated"]).to be_truthy + expect { migrated_scotland_rdsap_data["migrated"] }.not_to raise_error end end From 9c1314bb6f9c7cf8ad2901930d4bb67b7d6bb349 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 12:16:08 +0000 Subject: [PATCH 14/23] EPBR-9159 Update scotland_schema_migration_spec.rb tables test to exclude metadata --- .../scotland-schema/scotland_schema_migration_spec.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb b/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb index 240637323..d71407519 100644 --- a/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb +++ b/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb @@ -23,13 +23,14 @@ assessments_xml assessments_country_ids assessments - green_deal_assessments - ar_internal_metadata] + green_deal_assessments] table_results = ActiveRecord::Base.connection.exec_query <<~SQL SELECT table_name FROM information_schema.tables WHERE table_schema = 'scotland'; SQL tables = table_results.rows.flatten - + if tables.include?("ar_internal_metadata") + tables.delete("ar_internal_metadata") + end expect(tables).to match_array(expected_tables) end end From a4b760c8a2fd7bab49b22ee9c8fc35da7bea7919 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 12:16:27 +0000 Subject: [PATCH 15/23] EPBR-9159 Run make format --- lib/gateway/assessments_gateway.rb | 4 +- spec/acceptance/scotland-schema/lodge_spec.rb | 2 +- .../assessments_country_id_gateway_spec.rb | 2 +- spec/unit/gateway/assessments_gateway_spec.rb | 221 +++++++++--------- .../gateway/assessments_xml_gateway_spec.rb | 27 ++- .../related_assessments_gateway_spec.rb | 2 +- 6 files changed, 128 insertions(+), 130 deletions(-) diff --git a/lib/gateway/assessments_gateway.rb b/lib/gateway/assessments_gateway.rb index e2d39c0d2..531b91f79 100644 --- a/lib/gateway/assessments_gateway.rb +++ b/lib/gateway/assessments_gateway.rb @@ -222,7 +222,7 @@ def send_insert_to_db(assessment) end unless assessment.get(:related_rrn).nil? - add_linked_assessment(assessment, 'public.') + add_linked_assessment(assessment, "public.") end end end @@ -310,7 +310,7 @@ def remove_and_relodge_assessment(assessment, schema) Assessment.create assessment.to_record end - #TODO Need to test this + # TODO: Need to test this reattach_green_deal_plans(green_deal_plan_ids, binds, schema) end diff --git a/spec/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb index 5c0a8843a..610a26cb0 100644 --- a/spec/acceptance/scotland-schema/lodge_spec.rb +++ b/spec/acceptance/scotland-schema/lodge_spec.rb @@ -95,7 +95,7 @@ migrated: "true" end - it "it doesn't raise and error" do + it "doesn't raise and error" do lodge_assessment assessment_body: valid_rdsap_xml, accepted_responses: [201], scopes: %w[assessment:lodge migrate:assessment], diff --git a/spec/unit/gateway/assessments_country_id_gateway_spec.rb b/spec/unit/gateway/assessments_country_id_gateway_spec.rb index c4f4cb703..127996b94 100644 --- a/spec/unit/gateway/assessments_country_id_gateway_spec.rb +++ b/spec/unit/gateway/assessments_country_id_gateway_spec.rb @@ -27,7 +27,7 @@ end context "when inserting an assessment into the scotland equivalent of the assessments_country_ids table" do - it "it saves the row to the table" do + it "saves the row to the table" do assessment_id = "0000-0000-0001-1234-0022" gateway.insert(assessment_id:, country_id: 2, upsert: true, is_scottish: true) row = ActiveRecord::Base.connection.exec_query( diff --git a/spec/unit/gateway/assessments_gateway_spec.rb b/spec/unit/gateway/assessments_gateway_spec.rb index 40bdaab4a..bebc87bdf 100644 --- a/spec/unit/gateway/assessments_gateway_spec.rb +++ b/spec/unit/gateway/assessments_gateway_spec.rb @@ -249,131 +249,130 @@ def fetch_created_at(assessment_id) end describe "#insert_or_update" do - let(:scheme_id) { add_scheme_and_get_id } - let(:assessment) { + let(:assessment) do Domain::AssessmentIndexRecord.new( - assessment_id: '0000-0000-0000-0000-0000', - type_of_assessment: 'RdSAP', - date_of_assessment: '2024-01-16 17:52:43.00000', - date_registered: '2024-01-16 17:52:43.00000', - date_of_expiry: '2024-01-16 17:52:43.00000', + assessment_id: "0000-0000-0000-0000-0000", + type_of_assessment: "RdSAP", + date_of_assessment: "2024-01-16 17:52:43.00000", + date_registered: "2024-01-16 17:52:43.00000", + date_of_expiry: "2024-01-16 17:52:43.00000", assessor: Domain::Assessor.new( - scheme_assessor_id: "SPEC000000" , - first_name: 'Test', - last_name: 'Assessor', - middle_names: 'Brian', - date_of_birth: '2000-10-01', - email: 'test@example.com', - telephone_number: '07865672531', + scheme_assessor_id: "SPEC000000", + first_name: "Test", + last_name: "Assessor", + middle_names: "Brian", + date_of_birth: "2000-10-01", + email: "test@example.com", + telephone_number: "07865672531", registered_by_id: scheme_id, registered_by_name: scheme_id, search_results_comparison_postcode: - 'SE32 5TR', - also_known_as: 'Bob', - address_line1: '6 Street place', - address_line2: 'Whimple area', - address_line3: 'Bloopshire', - town: 'London', - postcode: 'we 32 4ew', - company_reg_no: '23222', - company_address_line1: '3 Week street', - company_address_line2: 'Bloop place', - company_address_line3: 'London', - company_town: 'London', - company_postcode: 'AA1 2AA', - company_website: 'test.com', - company_telephone_number: '07865672531', - company_email: 'test@example.com', - company_name: 'Test', - domestic_sap_qualification: 'ACTIVE', - domestic_rd_sap_qualification: 'ACTIVE', - non_domestic_sp3_qualification: 'ACTIVE', - non_domestic_cc4_qualification: 'ACTIVE', - non_domestic_dec_qualification: 'ACTIVE', - non_domestic_nos3_qualification:'ACTIVE', - non_domestic_nos4_qualification: 'ACTIVE', - non_domestic_nos5_qualification: 'ACTIVE', - gda_qualification: 'ACTIVE', - ), + "SE32 5TR", + also_known_as: "Bob", + address_line1: "6 Street place", + address_line2: "Whimple area", + address_line3: "Bloopshire", + town: "London", + postcode: "we 32 4ew", + company_reg_no: "23222", + company_address_line1: "3 Week street", + company_address_line2: "Bloop place", + company_address_line3: "London", + company_town: "London", + company_postcode: "AA1 2AA", + company_website: "test.com", + company_telephone_number: "07865672531", + company_email: "test@example.com", + company_name: "Test", + domestic_sap_qualification: "ACTIVE", + domestic_rd_sap_qualification: "ACTIVE", + non_domestic_sp3_qualification: "ACTIVE", + non_domestic_cc4_qualification: "ACTIVE", + non_domestic_dec_qualification: "ACTIVE", + non_domestic_nos3_qualification: "ACTIVE", + non_domestic_nos4_qualification: "ACTIVE", + non_domestic_nos5_qualification: "ACTIVE", + gda_qualification: "ACTIVE", + ), current_energy_efficiency_rating: 23, - potential_energy_efficiency_rating: 45, - address_id: 'RRN-0000-0000-0000-0000-0000', - address_line1: '4 Bloop lane', - address_line2: 'Gloop area', - address_line3: '', - address_line4: '', - town: 'London', - postcode: 'DW12 1WS', - xml: 'XML', + potential_energy_efficiency_rating: 45, + address_id: "RRN-0000-0000-0000-0000-0000", + address_line1: "4 Bloop lane", + address_line2: "Gloop area", + address_line3: "", + address_line4: "", + town: "London", + postcode: "DW12 1WS", + xml: "XML", migrated: true, - related_rrn: '', - hashed_assessment_id: 'Hash23123213', + related_rrn: "", + hashed_assessment_id: "Hash23123213", country_id: 1, ) - } + end - let(:updated_assessment) { + let(:updated_assessment) do Domain::AssessmentIndexRecord.new( - assessment_id: '0000-0000-0000-0000-0000', - type_of_assessment: 'SAP', - date_of_assessment: '2024-01-16 17:52:43.00000', - date_registered: '2024-01-16 17:52:43.00000', - date_of_expiry: '2024-01-16 17:52:43.00000', + assessment_id: "0000-0000-0000-0000-0000", + type_of_assessment: "SAP", + date_of_assessment: "2024-01-16 17:52:43.00000", + date_registered: "2024-01-16 17:52:43.00000", + date_of_expiry: "2024-01-16 17:52:43.00000", assessor: Domain::Assessor.new( - scheme_assessor_id: "SPEC000000" , - first_name: 'Test', - last_name: 'Assessor', - middle_names: 'Brian', - date_of_birth: '2000-10-01', - email: 'test@example.com', - telephone_number: '07865672531', + scheme_assessor_id: "SPEC000000", + first_name: "Test", + last_name: "Assessor", + middle_names: "Brian", + date_of_birth: "2000-10-01", + email: "test@example.com", + telephone_number: "07865672531", registered_by_id: scheme_id, registered_by_name: scheme_id, search_results_comparison_postcode: - 'SE32 5TR', - also_known_as: 'Bob', - address_line1: '6 Street place', - address_line2: 'Whimple area', - address_line3: 'Bloopshire', - town: 'London', - postcode: 'we 32 4ew', - company_reg_no: '23222', - company_address_line1: '3 Week street', - company_address_line2: 'Bloop place', - company_address_line3: 'London', - company_town: 'London', - company_postcode: 'AA1 2AA', - company_website: 'test.com', - company_telephone_number: '07865672531', - company_email: 'test@example.com', - company_name: 'Test', - domestic_sap_qualification: 'ACTIVE', - domestic_rd_sap_qualification: 'ACTIVE', - non_domestic_sp3_qualification: 'ACTIVE', - non_domestic_cc4_qualification: 'ACTIVE', - non_domestic_dec_qualification: 'ACTIVE', - non_domestic_nos3_qualification:'ACTIVE', - non_domestic_nos4_qualification: 'ACTIVE', - non_domestic_nos5_qualification: 'ACTIVE', - gda_qualification: 'ACTIVE', - ), + "SE32 5TR", + also_known_as: "Bob", + address_line1: "6 Street place", + address_line2: "Whimple area", + address_line3: "Bloopshire", + town: "London", + postcode: "we 32 4ew", + company_reg_no: "23222", + company_address_line1: "3 Week street", + company_address_line2: "Bloop place", + company_address_line3: "London", + company_town: "London", + company_postcode: "AA1 2AA", + company_website: "test.com", + company_telephone_number: "07865672531", + company_email: "test@example.com", + company_name: "Test", + domestic_sap_qualification: "ACTIVE", + domestic_rd_sap_qualification: "ACTIVE", + non_domestic_sp3_qualification: "ACTIVE", + non_domestic_cc4_qualification: "ACTIVE", + non_domestic_dec_qualification: "ACTIVE", + non_domestic_nos3_qualification: "ACTIVE", + non_domestic_nos4_qualification: "ACTIVE", + non_domestic_nos5_qualification: "ACTIVE", + gda_qualification: "ACTIVE", + ), current_energy_efficiency_rating: 70, potential_energy_efficiency_rating: 80, - address_id: 'RRN-0000-0000-0000-0000-0000', - address_line1: '4 Bloop lane', - address_line2: 'Gloop area', - address_line3: '', - address_line4: '', - town: 'London', - postcode: 'DW12 1WS', - xml: 'XML', + address_id: "RRN-0000-0000-0000-0000-0000", + address_line1: "4 Bloop lane", + address_line2: "Gloop area", + address_line3: "", + address_line4: "", + town: "London", + postcode: "DW12 1WS", + xml: "XML", migrated: true, - related_rrn: '', - hashed_assessment_id: 'Hash23123213', + related_rrn: "", + hashed_assessment_id: "Hash23123213", country_id: 1, - ) - } + ) + end before do add_assessor( @@ -382,8 +381,8 @@ def fetch_created_at(assessment_id) body: fetch_assessor_stub.fetch_request_body( non_domestic_nos3: "ACTIVE", domestic_rd_sap: "ACTIVE", - ), - ) + ), + ) end it "inserts the assessment" do @@ -407,8 +406,8 @@ def fetch_created_at(assessment_id) gateway.insert_or_update(assessment, is_scottish: true) result = ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ).entries.first - expect(result['type_of_assessment']).to eq("RdSAP") + ).entries.first + expect(result["type_of_assessment"]).to eq("RdSAP") end it "updates the original scottish assessment in the scottish schema" do @@ -416,8 +415,8 @@ def fetch_created_at(assessment_id) gateway.insert_or_update(updated_assessment, is_scottish: true) result = ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'", - ).entries.first - expect(result['type_of_assessment']).to eq("SAP") + ).entries.first + expect(result["type_of_assessment"]).to eq("SAP") end end end diff --git a/spec/unit/gateway/assessments_xml_gateway_spec.rb b/spec/unit/gateway/assessments_xml_gateway_spec.rb index 986323c97..83f8c2ea4 100644 --- a/spec/unit/gateway/assessments_xml_gateway_spec.rb +++ b/spec/unit/gateway/assessments_xml_gateway_spec.rb @@ -1,44 +1,43 @@ describe Gateway::AssessmentsXmlGateway do include RSpecRegisterApiServiceMixin - context "interacting with the assessments xml tables" do + context "when interacting with the assessments xml tables" do subject(:gateway) { described_class.new } - let(:record) do { assessment_id: "0000-0000-0000-0000-0000", - xml: '0000-0000-0000-0000-0000', - schema_type: "RdSAP-Schema-19.0.0" + xml: "0000-0000-0000-0000-0000", + schema_type: "RdSAP-Schema-19.0.0", } end let(:scottish_record) do { assessment_id: "0000-0000-0000-0000-0001", - xml: '0000-0000-0000-0000-0001', - schema_type: "RdSAP-Schema-S-19.0" + xml: "0000-0000-0000-0000-0001", + schema_type: "RdSAP-Schema-S-19.0", } end before do - Gateway::SchemesGateway::Scheme.create(scheme_id: '1') - Gateway::AssessorsGateway::Assessor.create(scheme_assessor_id: '12', first_name: "test_forename", last_name: "test_surname", date_of_birth: "1970-01-05", registered_by: '1') + Gateway::SchemesGateway::Scheme.create(scheme_id: "1") + Gateway::AssessorsGateway::Assessor.create(scheme_assessor_id: "12", first_name: "test_forename", last_name: "test_surname", date_of_birth: "1970-01-05", registered_by: "1") end - context "#sent_to_db" do + describe "#sent_to_db" do it "sends the xml record to the assessments xml table" do - Gateway::AssessmentsGateway::Assessment.create(assessment_id: "0000-0000-0000-0000-0000", scheme_assessor_id: '12', type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) - expect(gateway.send_to_db(record, false).assessment_id).to eq('0000-0000-0000-0000-0000') + Gateway::AssessmentsGateway::Assessment.create(assessment_id: "0000-0000-0000-0000-0000", scheme_assessor_id: "12", type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) + expect(gateway.send_to_db(record, false).assessment_id).to eq("0000-0000-0000-0000-0000") end it "sends the Scottish xml record to the Scottish assessments xml table" do - Gateway::AssessmentsGateway::AssessmentScotland.create(assessment_id: "0000-0000-0000-0000-0001", scheme_assessor_id: '12', type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) + Gateway::AssessmentsGateway::AssessmentScotland.create(assessment_id: "0000-0000-0000-0000-0001", scheme_assessor_id: "12", type_of_assessment: "SAP", date_of_assessment: "2010-01-01", date_registered: "2010-01-01", created_at: "2010-01-02", date_of_expiry: "2070-01-02", current_energy_efficiency_rating: 50) gateway.send_to_db(scottish_record, true) result = ActiveRecord::Base.connection.exec_query( "SELECT * FROM scotland.assessments_xml WHERE assessment_id = '0000-0000-0000-0000-0001'", - ).entries.first + ).entries.first - expect(result['assessment_id']).to eq('0000-0000-0000-0000-0001') + expect(result["assessment_id"]).to eq("0000-0000-0000-0000-0001") end end end diff --git a/spec/unit/gateway/related_assessments_gateway_spec.rb b/spec/unit/gateway/related_assessments_gateway_spec.rb index 9cefc24fe..f764f7e6a 100644 --- a/spec/unit/gateway/related_assessments_gateway_spec.rb +++ b/spec/unit/gateway/related_assessments_gateway_spec.rb @@ -41,7 +41,7 @@ it "returns related assessment IDs when calling related_assessment_ids for a Sottish assessment" do ActiveRecord::Base.connection.exec_query("INSERT INTO scotland.assessments_address_id (assessment_id, address_id, source, address_updated_at) VALUES('0000-0000-0000-0000-0003','UPRN-000000000003', 'lodgement', '02/02/2023');") - expect(gateway.related_assessment_ids('UPRN-000000000003', is_scottish: true).sort).to eq %w[0000-0000-0000-0000-0003] + expect(gateway.related_assessment_ids("UPRN-000000000003", is_scottish: true).sort).to eq %w[0000-0000-0000-0000-0003] end end end From 39ed832615148b852e37410cbcf7e7c14066eeb4 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 13:11:35 +0000 Subject: [PATCH 16/23] EPBR-9159 Add scottish assessment migration tests to lodge_assessment_spec.rb --- spec/unit/use_case/lodge_assessment_spec.rb | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/unit/use_case/lodge_assessment_spec.rb b/spec/unit/use_case/lodge_assessment_spec.rb index 4f65c3dd5..e9f4f404b 100644 --- a/spec/unit/use_case/lodge_assessment_spec.rb +++ b/spec/unit/use_case/lodge_assessment_spec.rb @@ -238,6 +238,28 @@ end end + context "when the Scottish assessment is passed as being migrated" do + it "calls AssessmentsGateway to save the assessment data to the assessments table" do + use_case.execute(data, true, "SAP-Schema-S-19.0.0") + + expect(assessments_gateway).to have_received(:insert_or_update) + expect(search_address_gateway).to have_received(:insert).with({ assessment_id: "2000-0000-0000-0000-0001", address: "1 some street some area some county" }, is_scottish: true) + end + + it "calls AssessmentsXMLGateway to save the XML data to the assessments_xml table" do + use_case.execute(data, true, "SAP-Schema-S-19.0.0") + + expect(assessments_xml_gateway).to have_received(:send_to_db).with( + { + assessment_id: "2000-0000-0000-0000-0001", + xml: "", + schema_type: "SAP-Schema-S-19.0.0", + }, + true, + ) + end + end + context "when the assessment is passed as being new and not migrated" do before do allow(assessments_search_gateway).to receive(:search_by_assessment_id).and_return([]) From 29d4ef2afaed039a54e2003ee86e99bd6ee5b030 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 13:23:42 +0000 Subject: [PATCH 17/23] EPBR-9159 Fix the typo in the name of foreign key migrations --- ...2141707_add_correct_foreign_keys_to_scotland_schema_tables.rb} | 0 ...d_correct_foreign_keys_to_scotland_schema_tables_continued.rb} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename db/migrate/{20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb => 20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb} (100%) rename db/migrate/{20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb => 20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb} (100%) diff --git a/db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb similarity index 100% rename from db/migrate/20250922141707_add_correct_forgein_keys_to_scotland_schema_tables.rb rename to db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb diff --git a/db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb b/db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb similarity index 100% rename from db/migrate/20250922142442_add_correct_forgein_keys_to_scotland_schema_tables_continued.rb rename to db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb From a4e4bab69b413356e12e89d001b612d13e84f416 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 3 Nov 2025 15:51:14 +0000 Subject: [PATCH 18/23] EPBR-9159 Add scotland schema helper --- lib/gateway/assessments_country_id_gateway.rb | 2 +- lib/gateway/assessments_gateway.rb | 2 +- lib/gateway/green_deal_plans_gateway.rb | 4 ++-- lib/gateway/related_assessments_gateway.rb | 2 +- lib/gateway/search_address_gateway.rb | 2 +- lib/helper/scotland_helper.rb | 10 ++++++++++ 6 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 lib/helper/scotland_helper.rb diff --git a/lib/gateway/assessments_country_id_gateway.rb b/lib/gateway/assessments_country_id_gateway.rb index 87742d7a5..434067369 100644 --- a/lib/gateway/assessments_country_id_gateway.rb +++ b/lib/gateway/assessments_country_id_gateway.rb @@ -4,7 +4,7 @@ class AssessmentsCountryId < ActiveRecord::Base end def insert(assessment_id:, country_id:, upsert: false, is_scottish: false) - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) sql = if upsert <<-SQL diff --git a/lib/gateway/assessments_gateway.rb b/lib/gateway/assessments_gateway.rb index 531b91f79..61db5c8b9 100644 --- a/lib/gateway/assessments_gateway.rb +++ b/lib/gateway/assessments_gateway.rb @@ -236,7 +236,7 @@ def send_update_to_db(assessment, is_scottish) end if existing_assessment - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) remove_and_relodge_assessment(assessment, schema) else is_scottish ? AssessmentScotland.create(assessment.to_record) : Assessment.create(assessment.to_record) diff --git a/lib/gateway/green_deal_plans_gateway.rb b/lib/gateway/green_deal_plans_gateway.rb index d908c1abc..8083a75f6 100644 --- a/lib/gateway/green_deal_plans_gateway.rb +++ b/lib/gateway/green_deal_plans_gateway.rb @@ -38,7 +38,7 @@ def add(green_deal_plan, assessment_id) end def link_green_deal_to_assessment(green_deal_plan_id, assessment_id, is_scottish: false) - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) sql = <<-SQL INSERT INTO #{schema}green_deal_assessments (green_deal_plan_id, assessment_id) VALUES ($1, $2) @@ -78,7 +78,7 @@ def update_end_date_and_charges(green_deal_plan_id:, end_date:, charges:) end def fetch(assessment_id, is_scottish: false) - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) sql = <<-SQL SELECT b.green_deal_plan_id, b.start_date, b.end_date, diff --git a/lib/gateway/related_assessments_gateway.rb b/lib/gateway/related_assessments_gateway.rb index 63fca37c3..aede7a23d 100644 --- a/lib/gateway/related_assessments_gateway.rb +++ b/lib/gateway/related_assessments_gateway.rb @@ -6,7 +6,7 @@ class Assessment < ActiveRecord::Base def related_assessment_ids(address_id, is_scottish: false) return [] if address_id.blank? - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) ActiveRecord::Base .connection diff --git a/lib/gateway/search_address_gateway.rb b/lib/gateway/search_address_gateway.rb index e7f600083..c559bc542 100644 --- a/lib/gateway/search_address_gateway.rb +++ b/lib/gateway/search_address_gateway.rb @@ -1,7 +1,7 @@ module Gateway class SearchAddressGateway < StandardError def insert(object, is_scottish: false) - schema = is_scottish ? "scotland." : "public." + schema = Helper::ScotlandHelper.select_schema(is_scottish) insert_sql = <<-SQL INSERT INTO #{schema}assessment_search_address(assessment_id, address) SELECT $1, $2 diff --git a/lib/helper/scotland_helper.rb b/lib/helper/scotland_helper.rb new file mode 100644 index 000000000..b197c6ebb --- /dev/null +++ b/lib/helper/scotland_helper.rb @@ -0,0 +1,10 @@ +module Helper + class ScotlandHelper + SCOTTISH_SCHEMA = "scotland." + PUBLIC_SCHEMA = "public." + + def self.select_schema(is_scottish) + is_scottish ? SCOTTISH_SCHEMA : PUBLIC_SCHEMA + end + end +end From 347cccf50a07be5eb76093b84517c2f14e2a8303 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 4 Nov 2025 11:53:12 +0000 Subject: [PATCH 19/23] EPBR-9159 Update Ruby --- Gemfile | 2 +- Gemfile.lock | 2 +- buildspec/run_app_tests.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 69d957d36..41570b035 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ # frozen_string_literal: true -ruby "3.3.4" +ruby "3.4.7" source "https://rubygems.org" group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 56efaba64..8bff59220 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -315,7 +315,7 @@ DEPENDENCIES zeitwerk (~> 2.7.2) RUBY VERSION - ruby 3.3.4p94 + ruby 3.4.7p58 BUNDLED WITH 2.5.11 diff --git a/buildspec/run_app_tests.yml b/buildspec/run_app_tests.yml index daab0cd5b..73dce9b1a 100644 --- a/buildspec/run_app_tests.yml +++ b/buildspec/run_app_tests.yml @@ -1,7 +1,7 @@ version: 0.2 runtime-versions: - ruby: 3.1 + ruby: 3.4 env: parameter-store: @@ -12,7 +12,7 @@ env: phases: install: runtime-versions: - ruby: 3.1 + ruby: 3.4 nodejs: 20 commands: - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.eu-west-2.amazonaws.com From 9dc368733dfd62ca17b9ab19deca41447998135f Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 4 Nov 2025 14:59:42 +0000 Subject: [PATCH 20/23] EPBR-9159 Clean up migrations --- ...ve_incorrect_foreign_keys_from_scotland_table.rb | 4 +++- ...ct_foreign_keys_from_scotland_table_continued.rb | 8 -------- ...orrect_foreign_keys_to_scotland_schema_tables.rb | 9 ++++++++- ...eign_keys_to_scotland_schema_tables_continued.rb | 13 ------------- ...922145129_add_green_deal_plans_scotland_table.rb | 5 +++++ ...oreign_key_to_scotland_green_deal_assessments.rb | 10 +++++----- 6 files changed, 21 insertions(+), 28 deletions(-) delete mode 100644 db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb delete mode 100644 db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb diff --git a/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb b/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb index 49d00b4b9..bdd56c109 100644 --- a/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb +++ b/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb @@ -1,5 +1,7 @@ class RemoveIncorrectForeignKeysFromScotlandTable < ActiveRecord::Migration[8.0] def change - remove_foreign_key "scotland.assessments_xml", name: "fk_rails_e74bdd4563" + remove_foreign_key "scotland.assessments_xml", "assessments" + remove_foreign_key "scotland.green_deal_assessments", "assessments" + remove_foreign_key "scotland.green_deal_assessments", "green_deal_plans" end end diff --git a/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb b/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb deleted file mode 100644 index 95b7863a1..000000000 --- a/db/migrate/20250922140130_remove_incorrect_foreign_keys_from_scotland_table_continued.rb +++ /dev/null @@ -1,8 +0,0 @@ -class RemoveIncorrectForeignKeysFromScotlandTableContinued < ActiveRecord::Migration[8.0] - def change - remove_foreign_key "scotland.assessments_country_ids", name: "fks_assessments_country_ids_countries" - remove_foreign_key "scotland.assessments", name: "fk_rails_4307e1668a" - remove_foreign_key "scotland.green_deal_assessments", name: "fk_assessment_id_assessments" - remove_foreign_key "scotland.green_deal_assessments", name: "fk_green_deal_plan_id_green_deal_plans" - end -end diff --git a/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb index a37f2af72..e639d9783 100644 --- a/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb +++ b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb @@ -2,6 +2,13 @@ class AddCorrectForgeinKeysToScotlandSchemaTables < ActiveRecord::Migration[8.0] def change add_foreign_key "scotland.assessments_xml", "scotland.assessments", - column: :assessment_id, primary_key: :assessment_id + column: :assessment_id, + primary_key: :assessment_id, + name: "fk_scotland_assessment_xml_scotland_assessments" + add_foreign_key "scotland.green_deal_assessments", + "scotland.assessments", + column: :assessment_id, + primary_key: :assessment_id, + name: "fk_scotland_green_deal_assessments_scotland_assessments" end end diff --git a/db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb b/db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb deleted file mode 100644 index 2298b0b1f..000000000 --- a/db/migrate/20250922142442_add_correct_foreign_keys_to_scotland_schema_tables_continued.rb +++ /dev/null @@ -1,13 +0,0 @@ -class AddCorrectForgeinKeysToScotlandSchemaTablesContinued < ActiveRecord::Migration[8.0] - def change - add_foreign_key "scotland.assessments_country_ids", - "countries", - column: :country_id, primary_key: :country_id - add_foreign_key "scotland.assessments", - "assessors", - column: :scheme_assessor_id, primary_key: :scheme_assessor_id - add_foreign_key "scotland.green_deal_assessments", - "scotland.assessments", - column: :assessment_id, primary_key: :assessment_id - end -end diff --git a/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb index 40cd2988d..82084615b 100644 --- a/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb +++ b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb @@ -17,6 +17,11 @@ def change t.jsonb :measures, null: false, default: "[]" t.jsonb :charges, null: false, default: "[]" t.jsonb :savings, null: false, default: "[]" + t.index "scotland.green_deal_plans", :green_deal_plan_id, unique: true end + + add_foreign_key "scotland.green_deal_assessments", + "scotland.green_deal_plans", + column: :green_deal_plan_id, primary_key: :green_deal_plan_id end end diff --git a/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb index 0741e7dcd..d4b1cfe6c 100644 --- a/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb +++ b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb @@ -1,9 +1,9 @@ class AddGreenDealPlansForeignKeyToScotlandGreenDealAssessments < ActiveRecord::Migration[8.0] def change - add_index "scotland.green_deal_plans", :green_deal_plan_id, unique: true - - add_foreign_key "scotland.green_deal_assessments", - "scotland.green_deal_plans", - column: :green_deal_plan_id, primary_key: :green_deal_plan_id + # add_index "scotland.green_deal_plans", :green_deal_plan_id, unique: true + # + # add_foreign_key "scotland.green_deal_assessments", + # "scotland.green_deal_plans", + # column: :green_deal_plan_id, primary_key: :green_deal_plan_id end end From 4541c67503f0b9ed7d03d378a5946026f1cee450 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 4 Nov 2025 15:24:19 +0000 Subject: [PATCH 21/23] EPBR-9159 Clean up migrations which corrected foreign key issues and missing green deal plan --- ...rrect_foreign_keys_to_scotland_schema_tables.rb | 2 +- ...22145129_add_green_deal_plans_scotland_table.rb | 5 ----- ...reign_key_to_scotland_green_deal_assessments.rb | 10 +++++----- db/schema.rb | 14 ++------------ 4 files changed, 8 insertions(+), 23 deletions(-) diff --git a/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb index e639d9783..503e8e1b9 100644 --- a/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb +++ b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb @@ -1,4 +1,4 @@ -class AddCorrectForgeinKeysToScotlandSchemaTables < ActiveRecord::Migration[8.0] +class AddCorrectForeignKeysToScotlandSchemaTables < ActiveRecord::Migration[8.0] def change add_foreign_key "scotland.assessments_xml", "scotland.assessments", diff --git a/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb index 82084615b..40cd2988d 100644 --- a/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb +++ b/db/migrate/20250922145129_add_green_deal_plans_scotland_table.rb @@ -17,11 +17,6 @@ def change t.jsonb :measures, null: false, default: "[]" t.jsonb :charges, null: false, default: "[]" t.jsonb :savings, null: false, default: "[]" - t.index "scotland.green_deal_plans", :green_deal_plan_id, unique: true end - - add_foreign_key "scotland.green_deal_assessments", - "scotland.green_deal_plans", - column: :green_deal_plan_id, primary_key: :green_deal_plan_id end end diff --git a/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb index d4b1cfe6c..0741e7dcd 100644 --- a/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb +++ b/db/migrate/20250922151938_add_green_deal_plans_foreign_key_to_scotland_green_deal_assessments.rb @@ -1,9 +1,9 @@ class AddGreenDealPlansForeignKeyToScotlandGreenDealAssessments < ActiveRecord::Migration[8.0] def change - # add_index "scotland.green_deal_plans", :green_deal_plan_id, unique: true - # - # add_foreign_key "scotland.green_deal_assessments", - # "scotland.green_deal_plans", - # column: :green_deal_plan_id, primary_key: :green_deal_plan_id + add_index "scotland.green_deal_plans", :green_deal_plan_id, unique: true + + add_foreign_key "scotland.green_deal_assessments", + "scotland.green_deal_plans", + column: :green_deal_plan_id, primary_key: :green_deal_plan_id end end diff --git a/db/schema.rb b/db/schema.rb index 9f33b85c9..a34ce5b1d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,6 +11,8 @@ # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema[8.0].define(version: 2025_09_22_151938) do + create_schema "scotland" + # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" enable_extension "pg_catalog.plpgsql" @@ -32,18 +34,6 @@ t.index ["town"], name: "index_address_base_on_town" end - create_table "address_base_tmp", primary_key: "uprn", id: :string, force: :cascade do |t| - t.string "postcode" - t.string "address_line1" - t.string "address_line2" - t.string "address_line3" - t.string "address_line4" - t.string "town" - t.string "classification_code", limit: 6 - t.string "address_type", limit: 15 - t.string "country_code", limit: 1 - end - create_table "address_base_versions", primary_key: "version_number", id: :integer, default: nil, force: :cascade do |t| t.string "version_name", null: false t.datetime "created_at", null: false From 8e5898dbfa70511a026afa848a08113c5518e170 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Tue, 4 Nov 2025 15:59:33 +0000 Subject: [PATCH 22/23] EPBR-9159 Remove scotland schema from schema.rb and make format --- db/schema.rb | 2 -- spec/unit/use_case/lodge_assessment_spec.rb | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index a34ce5b1d..c0f829ce9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,8 +11,6 @@ # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema[8.0].define(version: 2025_09_22_151938) do - create_schema "scotland" - # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" enable_extension "pg_catalog.plpgsql" diff --git a/spec/unit/use_case/lodge_assessment_spec.rb b/spec/unit/use_case/lodge_assessment_spec.rb index e9f4f404b..bbb7c2f54 100644 --- a/spec/unit/use_case/lodge_assessment_spec.rb +++ b/spec/unit/use_case/lodge_assessment_spec.rb @@ -256,7 +256,7 @@ schema_type: "SAP-Schema-S-19.0.0", }, true, - ) + ) end end From a89133316c25b57a95d796dd0b3aa995009b1cb8 Mon Sep 17 00:00:00 2001 From: christinehorrocks Date: Mon, 10 Nov 2025 10:10:09 +0000 Subject: [PATCH 23/23] EPBR-9159 Correct scotland_helper.rb to constant --- lib/helper/scotland_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/helper/scotland_helper.rb b/lib/helper/scotland_helper.rb index b197c6ebb..2b6129817 100644 --- a/lib/helper/scotland_helper.rb +++ b/lib/helper/scotland_helper.rb @@ -1,7 +1,7 @@ module Helper class ScotlandHelper - SCOTTISH_SCHEMA = "scotland." - PUBLIC_SCHEMA = "public." + SCOTTISH_SCHEMA = "scotland.".freeze + PUBLIC_SCHEMA = "public.".freeze def self.select_schema(is_scottish) is_scottish ? SCOTTISH_SCHEMA : PUBLIC_SCHEMA