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..bdd56c109
--- /dev/null
+++ b/db/migrate/20250922132926_remove_incorrect_foreign_keys_from_scotland_table.rb
@@ -0,0 +1,7 @@
+class RemoveIncorrectForeignKeysFromScotlandTable < ActiveRecord::Migration[8.0]
+ def change
+ 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/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb
new file mode 100644
index 000000000..503e8e1b9
--- /dev/null
+++ b/db/migrate/20250922141707_add_correct_foreign_keys_to_scotland_schema_tables.rb
@@ -0,0 +1,14 @@
+class AddCorrectForeignKeysToScotlandSchemaTables < ActiveRecord::Migration[8.0]
+ def change
+ add_foreign_key "scotland.assessments_xml",
+ "scotland.assessments",
+ 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/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 09f3bda6b..b847fcf42 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"
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/gateway/assessments_address_id_gateway.rb b/lib/gateway/assessments_address_id_gateway.rb
index cb00896b9..1f805344d 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..434067369 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 = Helper::ScotlandHelper.select_schema(is_scottish)
+
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..61db5c8b9 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: false)
check_valid_energy_ratings assessment
- send_update_to_db assessment
+ send_update_to_db(assessment, is_scottish)
end
def insert(assessment)
@@ -218,83 +222,96 @@ 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
- 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 = 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)
+ end
- delete_address_id = <<-SQL
- DELETE FROM assessments_address_id WHERE assessment_id = $1
- SQL
+ unless assessment.get(:related_rrn).nil?
+ add_linked_assessment(assessment, schema)
+ 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
+
+ # TODO: Need to test this
+ reattach_green_deal_plans(green_deal_plan_ids, binds, schema)
end
def check_valid_energy_ratings(assessment)
@@ -319,9 +336,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
@@ -340,9 +357,9 @@ def reattach_green_deal_plans(green_deal_plan_ids, binds)
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/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..8083a75f6 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 = Helper::ScotlandHelper.select_schema(is_scottish)
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 = Helper::ScotlandHelper.select_schema(is_scottish)
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..aede7a23d 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 = Helper::ScotlandHelper.select_schema(is_scottish)
+
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..c559bc542 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 = Helper::ScotlandHelper.select_schema(is_scottish)
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/helper/scotland_helper.rb b/lib/helper/scotland_helper.rb
new file mode 100644
index 000000000..2b6129817
--- /dev/null
+++ b/lib/helper/scotland_helper.rb
@@ -0,0 +1,10 @@
+module Helper
+ class ScotlandHelper
+ SCOTTISH_SCHEMA = "scotland.".freeze
+ PUBLIC_SCHEMA = "public.".freeze
+
+ def self.select_schema(is_scottish)
+ is_scottish ? SCOTTISH_SCHEMA : PUBLIC_SCHEMA
+ end
+ end
+end
diff --git a/lib/use_case/get_canonical_address_id.rb b/lib/use_case/get_canonical_address_id.rb
index c7df4b47f..17abcc6ac 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: 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..683466b1a 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,33 +85,31 @@ 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: is_scottish)
+ 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], data[:country_id])
+ insert_country_id(data[:assessment_id], is_scottish, country_id: 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
-
- @event_broadcaster.broadcast :assessment_lodged, assessment_id: assessment.assessment_id
+ @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
end
@@ -178,45 +178,49 @@ def find_related_rrn(wrapper_hash)
related_rrn
end
- def insert_assessment_address_id(assessment)
- canonical_address_id = get_canonical_address_id(assessment)
+ def insert_assessment_address_id(assessment, is_scottish)
+ canonical_address_id = get_canonical_address_id(assessment, is_scottish)
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: 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: 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
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
+ # 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 +237,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/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/acceptance/scotland-schema/lodge_spec.rb b/spec/acceptance/scotland-schema/lodge_spec.rb
new file mode 100644
index 000000000..610a26cb0
--- /dev/null
+++ b/spec/acceptance/scotland-schema/lodge_spec.rb
@@ -0,0 +1,185 @@
+describe "Acceptance::Assessment::Lodge", :set_with_timecop do
+ include RSpecRegisterApiServiceMixin
+
+ before do
+ Events::Broadcaster.enable!
+ add_countries
+ end
+
+ let(:valid_rdsap_xml) { Samples.xml "RdSAP-Schema-S-19.0" }
+ 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",
+ domestic_sap: "ACTIVE",
+ non_domestic_nos3: "ACTIVE",
+ non_domestic_dec: "ACTIVE",
+ non_domestic_cc4: "ACTIVE",
+ non_domestic_sp3: "ACTIVE",
+ )
+ end
+
+ context "when migrating a domestic Scottish assessment" do
+ let(:scheme_id) { add_scheme_and_get_id }
+
+ 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
+ end
+
+ before do
+ add_assessor scheme_id:, assessor_id: "SPEC000000", body: valid_assessor_request_body
+ 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 "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],
+ 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_scotland_rdsap_data).to eq expected_rdsap_data
+ 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 "doesn't raise and error" 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_scotland_rdsap_data["migrated"] }.not_to raise_error
+ 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_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
+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..d71407519 100644
--- a/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb
+++ b/spec/acceptance/scotland-schema/scotland_schema_migration_spec.rb
@@ -16,6 +16,7 @@
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
@@ -27,7 +28,9 @@
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
diff --git a/spec/unit/gateway/assessments_address_id_gateway_spec.rb b/spec/unit/gateway/assessments_address_id_gateway_spec.rb
index d14f1ea64..416d1832f 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-0002', 'RRN-0000-0000-0000-0000-0002', 'lodgement', null)",
+ )
+
+ expected_response = {
+ address_id: "RRN-0000-0000-0000-0000-0002",
+ address_updated_at: nil,
+ assessment_id: "0000-0000-0000-0000-0002",
+ source: "lodgement",
+ }
+ assessment_id = "0000-0000-0000-0000-0002"
+ response = gateway.fetch(assessment_id, is_scottish: 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, is_scottish: 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..127996b94 100644
--- a/spec/unit/gateway/assessments_country_id_gateway_spec.rb
+++ b/spec/unit/gateway/assessments_country_id_gateway_spec.rb
@@ -25,6 +25,17 @@
expect { gateway.insert(assessment_id:, country_id: 1) }.to raise_error Gateway::AssessmentsGateway::AssessmentAlreadyExists
end
end
+
+ context "when inserting an assessment into the scotland equivalent of the assessments_country_ids 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(
+ "SELECT * FROM scotland.assessments_country_ids WHERE assessment_id = '0000-0000-0001-1234-0022'",
+ )
+ expect(row.entries.first["country_id"]).to eq 2
+ end
+ end
end
describe "fetch_country_name" do
diff --git a/spec/unit/gateway/assessments_gateway_spec.rb b/spec/unit/gateway/assessments_gateway_spec.rb
index 6963bd1ca..bebc87bdf 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,176 @@ 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) 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",
+ 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,
+ )
+ end
+
+ 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",
+ 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,
+ )
+ end
+
+ 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
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..83f8c2ea4
--- /dev/null
+++ b/spec/unit/gateway/assessments_xml_gateway_spec.rb
@@ -0,0 +1,44 @@
+describe Gateway::AssessmentsXmlGateway do
+ include RSpecRegisterApiServiceMixin
+ 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",
+ }
+ 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
+
+ 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")
+ 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
diff --git a/spec/unit/gateway/related_assessments_gateway_spec.rb b/spec/unit/gateway/related_assessments_gateway_spec.rb
index 0e86b549c..f764f7e6a 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-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
end
diff --git a/spec/unit/gateway/search_address_gateway_spec.rb b/spec/unit/gateway/search_address_gateway_spec.rb
index 2815c40d5..d69f95a63 100644
--- a/spec/unit/gateway/search_address_gateway_spec.rb
+++ b/spec/unit/gateway/search_address_gateway_spec.rb
@@ -21,23 +21,31 @@
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 "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 "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 "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 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")
+ 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/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 31492380c..bbb7c2f54 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" }, is_scottish: false)
end
it "calls AssessmentsXMLGateway to save the XML data to the assessments_xml table" do
@@ -233,6 +233,29 @@
xml: "",
schema_type: "SAP-Schema-18.0.0",
},
+ false,
+ )
+ 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
@@ -264,7 +287,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
@@ -291,6 +314,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