diff --git a/spec/services/exports/sales_log_export_service_spec.rb b/spec/services/exports/sales_log_export_service_spec.rb
index 25709fdb8..66ed11534 100644
--- a/spec/services/exports/sales_log_export_service_spec.rb
+++ b/spec/services/exports/sales_log_export_service_spec.rb
@@ -451,18 +451,12 @@ RSpec.describe Exports::SalesLogExportService do
end
context "with shared ownership and mscharge" do
- let!(:sales_log) { FactoryBot.create(:sales_log, :export, ownershipsch: 1, staircase: 2, type: 30, mscharge: 321, has_management_fee: 1, management_fee: 222) }
-
- def replace_mscharge_and_shared_ownership_values(export_file)
+ def replace_shared_ownership_values(export_file)
export_file.sub!("", "1")
export_file.sub!("", "321.0")
- export_file.sub!("", "1")
- export_file.sub!("", "222.0")
export_file.sub!("100.0", "")
export_file.sub!("1", "")
- export_file.sub!("8", "30")
- export_file.sub!("", "2")
export_file.sub!("10000.0", "")
export_file.sub!("0", "1")
export_file.sub!("SW1A", "")
@@ -474,16 +468,93 @@ RSpec.describe Exports::SalesLogExportService do
export_file.sub!("Westminster", "")
end
- it "exports mscharge fields as hasmscharge and mscharge" do
- expected_content = replace_entity_ids(sales_log, xml_export_file.read)
- expected_content = replace_mscharge_and_shared_ownership_values(expected_content)
- 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)
+ context "when not staircasing" do
+ let!(:sales_log) { FactoryBot.create(:sales_log, :export, ownershipsch: 1, staircase: 2, type: 30, mscharge: 321, has_management_fee: 1, management_fee: 222) }
+
+ def replace_non_staircasing_values(export_file)
+ export_file.sub!("", "1")
+ export_file.sub!("", "222.0")
+ export_file.sub!("8", "30")
+ export_file.sub!("", "2")
end
- export_service.export_xml_sales_logs
+ it "exports mscharge fields as hasmscharge and mscharge" do
+ expected_content = replace_entity_ids(sales_log, xml_export_file.read)
+ replace_shared_ownership_values(expected_content)
+ replace_non_staircasing_values(expected_content)
+ 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
+ end
+ end
+
+ context "when staircasing" do
+ context "when exporting only 26/27 collection period", metadata: { year: 26 } do
+ let(:start_time) { collection_start_date_for_year(2026) }
+ 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") }
+ let!(:sales_log) { FactoryBot.create(:sales_log, :export, ownershipsch: 1, staircase: 1, type: 2, mscharge: 321, has_management_fee: 1, management_fee: 222, hasservicechargeschanged: 1, newservicecharges: 150) }
+
+ def replace_staircasing_values(export_file)
+ export_file.sub!("", "1")
+ export_file.sub!("", "222.0")
+ export_file.sub!("8", "2")
+ export_file.sub!("", "1")
+ export_file.sub!("5", "")
+ export_file.sub!("1", "")
+ export_file.sub!("3", "")
+ export_file.sub!("80000.0", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("222.0", "")
+ export_file.sub!("17", "")
+ export_file.sub!("17", "")
+ export_file.sub!("17", "")
+ export_file.sub!("1", "")
+ export_file.sub!("4", "")
+ export_file.sub!("4", "")
+ export_file.sub!("7", "")
+ export_file.sub!("1", "")
+ export_file.sub!("0", "")
+ export_file.sub!("1", "")
+ export_file.sub!("0", "")
+ export_file.sub!("10000", "")
+ export_file.sub!("10000", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("20000.0", "")
+ export_file.sub!("10", "")
+ export_file.sub!("826", "")
+ export_file.sub!("826", "")
+ export_file.sub!("1", "")
+ export_file.sub!("2", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("1", "")
+ export_file.sub!("", "1")
+ export_file.sub!("", "150.0")
+ end
+
+ it "exports mscharge fields and hasservicechargeschanged and newservicecharges" do
+ expected_content = replace_entity_ids(sales_log, xml_export_file.read)
+ replace_shared_ownership_values(expected_content)
+ replace_staircasing_values(expected_content)
+ 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
end
end