Skip to content

Commit 3110b3d

Browse files
EPBR-9262 Add action plans to the scottish register
Add the schema, fixtures and test to make sure the action plans can be migrated and extracted.
1 parent d3c9a8a commit 3110b3d

8 files changed

Lines changed: 1555 additions & 4 deletions

File tree

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ gem "archive-zip"
2323
gem "aws-sdk-s3", "= 1.209.0"
2424
gem "csv", "~> 3.3"
2525
gem "epb-auth-tools", "~> 1.1.0"
26-
gem "epb_view_models", "~> 2.2.1"
26+
gem "epb_view_models", "~> 2.2.2"
2727
gem "geocoder", "~> 1.8.6"
2828
gem "json-schema", "~> 6.0"
2929
gem "namecase", "~> 2.0"

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ GEM
6464
epb-auth-tools (1.1.0)
6565
jwt (~> 2.3)
6666
oauth2 (>= 1.4, < 3.0)
67-
epb_view_models (2.2.1)
67+
epb_view_models (2.2.2)
6868
nokogiri (~> 1.16)
6969
zeitwerk (~> 2.6)
7070
faraday (2.14.0)
@@ -283,7 +283,7 @@ DEPENDENCIES
283283
csv (~> 3.3)
284284
database_cleaner
285285
epb-auth-tools (~> 1.1.0)
286-
epb_view_models (~> 2.2.1)
286+
epb_view_models (~> 2.2.2)
287287
geocoder (~> 1.8.6)
288288
json-schema (~> 6.0)
289289
mock_redis (~> 0.52)

api/schemas/data/orchestrate.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,8 @@
231231
},
232232
"CEPC-S-7.1": {
233233
"schema_path": "api/schemas/xml/CEPC-S-7.1/Reports/CEPC-Reports.xsd"
234+
},
235+
"CS63-S-7.0": {
236+
"schema_path": "api/schemas/xml/CS63-S-7.0/ActionPlan.xsd"
234237
}
235238
}

api/schemas/xml/CS63-S-7.0/ActionPlan.xsd

Lines changed: 818 additions & 0 deletions
Large diffs are not rendered by default.

lib/use_case/certificate_summary.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def execute(assessment_id, is_scottish: false)
2828
schema_type = assessment["schema_type"]
2929

3030
# placeholder logic until other to_certificate_summary_created
31-
unless schema_type.start_with?("RdSAP", "SAP", "CEPC")
31+
unless schema_type.start_with?("RdSAP", "SAP", "CEPC", "CS63")
3232
raise Boundary::InvalidAssessment, schema_type
3333
end
3434

spec/acceptance/scotland-schema/lodge_spec.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
let(:valid_rdsap_not_scottish_xml) { Samples.xml "RdSAP-Schema-19.0" }
1313
let(:valid_sap_xml) { Samples.xml "SAP-Schema-S-19.0.0" }
1414
let(:valid_cepc_xml) { Samples.xml "CEPC-S-7.1", "cepc" }
15+
let(:valid_action_plan_xml) { Samples.xml "CS63-S-7.0", "cs63" }
1516
let(:valid_assessor_request_body) do
1617
AssessorStub.new.fetch_request_body(
1718
domestic_rd_sap: "ACTIVE",
@@ -239,6 +240,49 @@
239240
end
240241
end
241242

243+
context "when migrating a valid Scottish Action Plan assessment" do
244+
expected_action_plan_assessment_data = {
245+
"assessment_id" => "0000-0000-0000-0000-0000",
246+
"date_of_assessment" => "2025-06-04",
247+
"date_registered" => "2025-06-11",
248+
"type_of_assessment" => "CS63",
249+
"current_energy_efficiency_rating" => 0,
250+
"postcode" => "FK1 1XE",
251+
"date_of_expiry" => "2028-12-11",
252+
"address_line1" => "Non-dom Property",
253+
"address_line2" => "",
254+
"address_line3" => "",
255+
"address_line4" => "",
256+
"town" => "Town",
257+
"scheme_assessor_id" => "SPEC000000",
258+
"opt_out" => false,
259+
"address_id" => "0000000001",
260+
"migrated" => true,
261+
"cancelled_at" => nil,
262+
"not_for_issue_at" => nil,
263+
"created_at" => "2021-06-21",
264+
"hashed_assessment_id" => "4af9d2c31cf53e72ef6f59d3f59a1bfc500ebc2b1027bc5ca47361435d988e1a",
265+
}
266+
267+
it "successfully migrates the assessment" do
268+
response = lodge_assessment assessment_body: valid_action_plan_xml,
269+
accepted_responses: [201],
270+
scopes: %w[migrate:scotland],
271+
auth_data: {
272+
scheme_ids: [scheme_id],
273+
},
274+
schema_name: "CS63-S-7.0",
275+
migrated: "true"
276+
277+
action_plan_data = ActiveRecord::Base.connection.exec_query(
278+
"SELECT * FROM scotland.assessments WHERE assessment_id = '0000-0000-0000-0000-0000'",
279+
).entries.first
280+
281+
expect(JSON.parse(response.body, symbolize_names: true)[:data][:assessments].first).to eq "0000-0000-0000-0000-0000"
282+
expect(action_plan_data).to eq expected_action_plan_assessment_data
283+
end
284+
end
285+
242286
context "when migrating a non-Scottish domestic assessment" do
243287
it "rejects a migration" do
244288
expect(lodge_assessment(

spec/acceptance/scotland-schema/scotland_certificate_summary_spec.rb

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,5 +460,78 @@
460460
expect(response[:data]).to eq(expected_response)
461461
end
462462
end
463+
464+
context "when requesting an Action Plan assessment" do
465+
before do
466+
action_plan_xml = Nokogiri.XML Samples.xml("CS63-S-7.0", "cs63")
467+
action_plan_xml
468+
.xpath("//*[local-name() = 'RRN']")
469+
.each do |node|
470+
node.content = "0000-0000-0000-0003-0000"
471+
end
472+
lodge_assessment(
473+
assessment_body: action_plan_xml.to_xml,
474+
accepted_responses: [201],
475+
auth_data: {
476+
scheme_ids: [scheme_id],
477+
},
478+
schema_name: "CS63-S-7.0",
479+
migrated: true,
480+
)
481+
end
482+
483+
it "returns the expected Action Plan" do
484+
response =
485+
JSON.parse(
486+
fetch_scottish_certificate_summary(id: "0000-0000-0000-0003-0000").body,
487+
symbolize_names: true,
488+
)
489+
490+
expected_response = { typeOfAssessment: "CS63",
491+
assessmentId: "0000-0000-0000-0003-0000",
492+
epcAssessmentId: "0000-0000-0000-0000-0001",
493+
saleLeaseDate: "2025-06-13",
494+
reportType: "9",
495+
dateOfAssessment: "2025-06-04",
496+
planReportDate: "2025-06-11",
497+
address: { addressLine1: "Non-dom Property", addressLine2: "", addressLine3: "", addressLine4: "", town: "Town", postcode: "FK1 1XE" },
498+
assessor:
499+
{ schemeAssessorId: "SPEC000000",
500+
contactDetails: { email: "sessor@email.co.uk", tradingAddress: "6 Unit Business Park Town", telephoneNumber: "00000000073" },
501+
companyName: "EPC R Us Ltd",
502+
status: "Registered",
503+
firstName: "Someone",
504+
lastName: "Person",
505+
registeredBy: { name: "test scheme", schemeId: scheme_id } },
506+
ownerCommissionReport: "Y",
507+
delegatedPersonCommissionReport: "N",
508+
propertyTypeShortDescription: "General Industrial",
509+
propertyTypeLongDescription: "B2 to B7 General Industrial and Special Industrial Groups",
510+
buildingImprovements: "N",
511+
operationalRatings: "Y",
512+
dec: "N",
513+
plannedCompletionDate: "2028-12-12",
514+
actualCompletionDate: nil,
515+
targetEmissionSavings: "1.61",
516+
targetEnergySavings: "10.11",
517+
acceptPrescriptiveImprovements: "Y",
518+
prescriptiveImprovements:
519+
[{ measureDescriptionShort: "Central time heating control", measureDescriptionLong: nil, measureValid: "N", measureType: nil },
520+
{ measureDescriptionShort: "Lighting controls", measureDescriptionLong: nil, measureValid: "Y", measureType: nil },
521+
{ measureDescriptionShort: "Draught-stripping windows and doors", measureDescriptionLong: nil, measureValid: "Y", measureType: nil },
522+
{ measureDescriptionShort: "Hot water storage insulation", measureDescriptionLong: nil, measureValid: "N", measureType: nil },
523+
{ measureDescriptionShort: "Lamp replacement", measureDescriptionLong: nil, measureValid: "N", measureType: nil },
524+
{ measureDescriptionShort: "Boiler replacement", measureDescriptionLong: nil, measureValid: "N", measureType: nil },
525+
{ measureDescriptionShort: "Roof insulation", measureDescriptionLong: nil, measureValid: "N", measureType: nil }],
526+
alternativeImprovements: [],
527+
addressId: "RRN-0000-0000-0000-0003-0000",
528+
optOut: false,
529+
relatedAssessments: [],
530+
supersededBy: nil,
531+
countryName: "Unknown" }
532+
533+
expect(response[:data]).to eq(expected_response)
534+
end
535+
end
463536
end
464537
end

0 commit comments

Comments
 (0)