diff --git a/app/services/exports/lettings_log_export_constants.rb b/app/services/exports/lettings_log_export_constants.rb index 3ae7d71fa..45a874828 100644 --- a/app/services/exports/lettings_log_export_constants.rb +++ b/app/services/exports/lettings_log_export_constants.rb @@ -60,6 +60,13 @@ module Exports::LettingsLogExportConstants "owningorgid", "owningorgname", "period", + "uprn", + "uprn_known", + "uprn_confirmed", + "address_line1", + "address_line2", + "town_or_city", + "county", "postcode_full", "ppcodenk", "ppostcode_full", diff --git a/spec/fixtures/exports/general_needs_log_23_24.xml b/spec/fixtures/exports/general_needs_log_23_24.xml new file mode 100644 index 000000000..9ea5a6172 --- /dev/null +++ b/spec/fixtures/exports/general_needs_log_23_24.xml @@ -0,0 +1,157 @@ + + +
+ 1 + BZ737 + 35 + F + 2 + 13 + 6 + 0 + 2 + 32 + M + 6 + + + + + + + + + + + + + + + + + + + 1 + 4 + 1 + 1 + 1 + 2 + 1 + + + SE2 6RT + 6 + 7 + 3 + 2 + 1 + 68 + 1 + 1 + 2 + 2 + 7 + + 1 + 2 + 1 + 2 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 4 + 123 + E09000003 + E07000105 + 6 + 1 + 2022-05-05T10:36:49+01:00 + 0 + 2023-04-02T10:36:49+01:00 + 1 + 2 + 1 + 2021-11-03T00:00:00+00:00 + 2 + 1 + 7 + 0 + 0 + 2 + 0 + 2 + 200.0 + 50.0 + 40.0 + 35.0 + 325.0 + 12.0 + + 1 + 1 + 0 + 100.0 + 25.0 + 20.0 + 17.5 + 162.5 + 6.0 + 0 + 1 + + 2 + P + + + + + + + + + + + 4 + 2 + 332 + 100023336956 + 1 + + Fake, Org, Name, Building, Name, Number, Data, Thing + + London + + {id} + {owning_org_id} + DLUHC + 1234 + {managing_org_id} + DLUHC + 1234 + 2023-04-03T00:00:00+01:00 + 2023-04-03T00:00:00+01:00 + 1 + +
diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index 7c17f95dc..ababe7d9d 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -35,6 +35,7 @@ RSpec.describe Exports::LettingsLogExportService do # Stub the form handler to use the real form allow(FormHandler.instance).to receive(:get_form).with("previous_lettings").and_return(real_2021_2022_form) allow(FormHandler.instance).to receive(:get_form).with("current_lettings").and_return(real_2022_2023_form) + allow(FormHandler.instance).to receive(:get_form).with("next_lettings").and_return(real_2022_2023_form) end after do @@ -107,6 +108,50 @@ RSpec.describe Exports::LettingsLogExportService do end end + context "with 23/24 collection period" do + before do + Timecop.freeze(Time.zone.local(2023, 4, 3)) + Singleton.__init__(FormHandler) + stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=100023336956") + .to_return(status: 200, body: '{ "status": 200, + "results": [ + { "DPA": { + "PO_BOX_NUMBER": "fake", + "ORGANISATION_NAME": "org", + "DEPARTMENT_NAME": "name", + "SUB_BUILDING_NAME": "building", + "BUILDING_NAME": "name", + "BUILDING_NUMBER": "number", + "DEPENDENT_THOROUGHFARE_NAME": "data", + "THOROUGHFARE_NAME": "thing", + "POST_TOWN": "London", + } }, + ] }', headers: {}) + end + + after do + Timecop.unfreeze + end + + context "and one lettings log is available for export" do + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, uprn_known: 1, uprn: "100023336956", propcode: "123", ppostcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2023, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } + let(:expected_zip_filename) { "core_2023_2024_apr_mar_f0001_inc0001.zip" } + let(:expected_data_filename) { "core_2023_2024_apr_mar_f0001_inc0001_pt001.xml" } + let(:xml_export_file) { File.open("spec/fixtures/exports/general_needs_log_23_24.xml", "r:UTF-8") } + + it "generates an XML export file with the expected content within the ZIP file" do + expected_content = replace_entity_ids(lettings_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 eq(expected_content) + end + + export_service.export_xml_lettings_logs + end + end + end + context "and multiple lettings logs are available for export on different periods" do let(:expected_zip_filename2) { "core_2022_2023_apr_mar_f0001_inc0001.zip" }