From bf7d6556013a98547e3fa0ed038a364b09a884b8 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Thu, 19 Feb 2026 14:39:58 +0000 Subject: [PATCH] CLDC-4173: add sales csv export tests for 25 and 26 including buildheightclass --- spec/factories/sales_log.rb | 1 + spec/fixtures/exports/sales_log_25_26.xml | 154 +++++++++++++++++ spec/fixtures/exports/sales_log_26_27.xml | 161 ++++++++++++++++++ .../exports/sales_log_export_service_spec.rb | 64 +++++++ 4 files changed, 380 insertions(+) create mode 100644 spec/fixtures/exports/sales_log_25_26.xml create mode 100644 spec/fixtures/exports/sales_log_26_27.xml diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index d2ad621b0..81d679ab6 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -294,6 +294,7 @@ FactoryBot.define do buy1livein { 1 } relat2 { "P" } proptype { 1 } + buildheightclass { 2 } age2_known { 0 } age2 { 33 } builtype { 1 } diff --git a/spec/fixtures/exports/sales_log_25_26.xml b/spec/fixtures/exports/sales_log_25_26.xml new file mode 100644 index 000000000..e9190c390 --- /dev/null +++ b/spec/fixtures/exports/sales_log_25_26.xml @@ -0,0 +1,154 @@ + + +
+ {id} + 1 + 123 + 8 + 1 + 2 + 27 + F + 17 + 1 + 1 + 33 + P + X + 2 + 1 + 1 + 1 + 1 + 4 + 14 + E09000033 + 10000 + 18 + 40 + 40 + 1 + 10000 + 1 + + 1 + F + 20000.0 + 1 + 9 + 3 + 2 + 1 + X + X + R + R + 4 + X + M + X + + + + + + + 80000.0 + + 1 + 110000.0 + + + 10000.0 + 0 + SW1A + 1AA + E09000033 + 7 + + + 100.0 + 1 + 1 + 1 + 5 + + + + + + 1 + 6 + + 2 + 3 + + + + + + + 1 + 4 + 2025 + 2025-04-01T00:00:00+01:00 + {created_by_email} + {created_by_id} + {assigned_to_email} + {assigned_to_id} + 2025-04-01T00:00:00+01:00 + + + {owning_org_id} + {owning_org_name} + {managing_org_id} + {managing_org_name} + 1 + + 2025 + 2 + 1 + 17 + 17 + 1 + 1 + + + 0 + 0 + SW1A 1AA + true + 10 + + + Address line 1 + + City + Westminster + Address line 1 + SW1A 1AA + + + + + + + + 826 + 826 + Westminster + 1 + 1 + + + + + + + + + + + + +
diff --git a/spec/fixtures/exports/sales_log_26_27.xml b/spec/fixtures/exports/sales_log_26_27.xml new file mode 100644 index 000000000..71278bbda --- /dev/null +++ b/spec/fixtures/exports/sales_log_26_27.xml @@ -0,0 +1,161 @@ + + +
+ {id} + 1 + 123 + 8 + 1 + 2 + 27 + F + 17 + 1 + 1 + 33 + P + X + 2 + 1 + 1 + 1 + 1 + 4 + 14 + E09000033 + 10000 + 18 + 40 + 40 + 1 + 10000 + 1 + + 1 + F + 20000.0 + 1 + 9 + 3 + 2 + 1 + X + X + R + R + 4 + X + M + X + + + + + + + 80000.0 + + 1 + 110000.0 + + + 10000.0 + 0 + SW1A + 1AA + E09000033 + 7 + + + 100.0 + 1 + 1 + 1 + 5 + + + + + + 1 + 6 + + 2 + 3 + + + + + + + F + + F + + M + + 2 + 1 + 4 + 2026 + 2026-04-01T00:00:00+01:00 + {created_by_email} + {created_by_id} + {assigned_to_email} + {assigned_to_id} + 2026-04-01T00:00:00+01:00 + + + {owning_org_id} + {owning_org_name} + {managing_org_id} + {managing_org_name} + 1 + + 2026 + 2 + 1 + 17 + 17 + 1 + 1 + + + 0 + 0 + SW1A 1AA + true + 10 + + + Address line 1 + + City + Westminster + Address line 1 + SW1A 1AA + + + + + + + + 826 + 826 + Westminster + 1 + 1 + + + + + + + + + + + + +
diff --git a/spec/services/exports/sales_log_export_service_spec.rb b/spec/services/exports/sales_log_export_service_spec.rb index 5b9a41d02..14e138449 100644 --- a/spec/services/exports/sales_log_export_service_spec.rb +++ b/spec/services/exports/sales_log_export_service_spec.rb @@ -365,6 +365,70 @@ RSpec.describe Exports::SalesLogExportService do end end + context "when exporting only 25/26 collection period" do + let(:start_time) { Time.zone.local(2025, 4, 1) } + + before do + Timecop.freeze(start_time) + Singleton.__init__(FormHandler) + end + + after do + Timecop.unfreeze + Singleton.__init__(FormHandler) + end + + context "and one sales log is available for export" do + let!(:sales_log) { FactoryBot.create(:sales_log, :export) } + let(:expected_zip_filename) { "core_sales_2025_2026_apr_mar_f0001_inc0001.zip" } + let(:expected_data_filename) { "core_sales_2025_2026_apr_mar_f0001_inc0001_pt001.xml" } + let(:xml_export_file) { File.open("spec/fixtures/exports/sales_log_25_26.xml", "r:UTF-8") } + + it "generates an XML export file with the expected content within the ZIP file" do + expected_content = replace_entity_ids(sales_log, xml_export_file.read) + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content| + entry = Zip::File.open_buffer(content).find_entry(expected_data_filename) + expect(entry).not_to be_nil + expect(entry.get_input_stream.read).to have_same_xml_contents_as(expected_content) + end + + export_service.export_xml_sales_logs(full_update: true, collection_year: 2025) + end + end + end + + context "when exporting only 26/27 collection period" do + let(:start_time) { Time.zone.local(2026, 4, 1) } + + before do + Timecop.freeze(start_time) + Singleton.__init__(FormHandler) + end + + after do + Timecop.unfreeze + Singleton.__init__(FormHandler) + end + + context "and one sales log is available for export" do + let!(:sales_log) { FactoryBot.create(:sales_log, :export) } + let(:expected_zip_filename) { "core_sales_2026_2027_apr_mar_f0001_inc0001.zip" } + let(:expected_data_filename) { "core_sales_2026_2027_apr_mar_f0001_inc0001_pt001.xml" } + let(:xml_export_file) { File.open("spec/fixtures/exports/sales_log_26_27.xml", "r:UTF-8") } + + it "generates an XML export file with the expected content within the ZIP file" do + expected_content = replace_entity_ids(sales_log, xml_export_file.read) + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content| + entry = Zip::File.open_buffer(content).find_entry(expected_data_filename) + expect(entry).not_to be_nil + expect(entry.get_input_stream.read).to have_same_xml_contents_as(expected_content) + end + + export_service.export_xml_sales_logs(full_update: true, collection_year: 2026) + end + end + end + context "when exporting various fees, correctly maps the values" do context "with discounted ownership and mscharge" do let!(:sales_log) { FactoryBot.create(:sales_log, :export, mscharge: 123) }