From d31ffc42170a95d2d8aba4668a00c1addbf27265 Mon Sep 17 00:00:00 2001 From: Kat <54268893+kosiakkatrina@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:42:11 +0000 Subject: [PATCH] Extract test file generation --- .../create_log_actions_component.html.erb | 5 +- .../create_log_actions_component.rb | 4 + app/controllers/lettings_logs_controller.rb | 14 - app/controllers/sales_logs_controller.rb | 14 - app/controllers/test_data_controller.rb | 421 ++++++++++++++++++ config/routes.rb | 14 +- 6 files changed, 437 insertions(+), 35 deletions(-) create mode 100644 app/controllers/test_data_controller.rb diff --git a/app/components/create_log_actions_component.html.erb b/app/components/create_log_actions_component.html.erb index a600f3290..a0a87e44f 100644 --- a/app/components/create_log_actions_component.html.erb +++ b/app/components/create_log_actions_component.html.erb @@ -9,8 +9,9 @@ <% end %> <% if FeatureToggle.create_test_logs_enabled? %> - <%= govuk_button_link_to "Create test log", create_test_log_href, secondary: true %> - <%= govuk_button_link_to "Create test log (setup only)", create_setup_test_log_href, secondary: true %> + <%= govuk_link_to "Create test log", create_test_log_href, secondary: true %> + <%= govuk_link_to "Create test log (setup only)", create_setup_test_log_href, secondary: true %> + <%= govuk_link_to "Create test BU file (2024)", create_2024_test_bulk_upload_href, secondary: true %> <% end %> <% end %> diff --git a/app/components/create_log_actions_component.rb b/app/components/create_log_actions_component.rb index 896bfe97e..0abbfd385 100644 --- a/app/components/create_log_actions_component.rb +++ b/app/components/create_log_actions_component.rb @@ -42,6 +42,10 @@ class CreateLogActionsComponent < ViewComponent::Base send("create_setup_test_#{log_type}_log_path") end + def create_2024_test_bulk_upload_href + send("create_2024_test_#{log_type}_bulk_upload_path") + end + def view_uploads_button_copy "View #{log_type} bulk uploads" end diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index af3a6c32f..cc3c731d5 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -149,20 +149,6 @@ class LettingsLogsController < LogsController end end - def create_test_log - return render_not_found unless FeatureToggle.create_test_logs_enabled? - - log = FactoryBot.create(:lettings_log, :completed, assigned_to: current_user, ppostcode_full: "SW1A 1AA") - redirect_to lettings_log_path(log) - end - - def create_setup_test_log - return render_not_found unless FeatureToggle.create_test_logs_enabled? - - log = FactoryBot.create(:lettings_log, :setup_completed, assigned_to: current_user) - redirect_to lettings_log_path(log) - end - private def session_filters diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 8799fe528..af9879896 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -119,20 +119,6 @@ class SalesLogsController < LogsController end end - def create_test_log - return render_not_found unless FeatureToggle.create_test_logs_enabled? - - log = FactoryBot.create(:sales_log, :completed, assigned_to: current_user) - redirect_to sales_log_path(log) - end - - def create_setup_test_log - return render_not_found unless FeatureToggle.create_test_logs_enabled? - - log = FactoryBot.create(:sales_log, :shared_ownership_setup_complete, assigned_to: current_user) - redirect_to sales_log_path(log) - end - private def session_filters diff --git a/app/controllers/test_data_controller.rb b/app/controllers/test_data_controller.rb new file mode 100644 index 000000000..a0ec14123 --- /dev/null +++ b/app/controllers/test_data_controller.rb @@ -0,0 +1,421 @@ +class TestDataController < ApplicationController + rescue_from ActiveRecord::RecordNotFound, with: :render_not_found + + def create_test_lettings_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:lettings_log, :completed, assigned_to: current_user, ppostcode_full: "SW1A 1AA") + redirect_to lettings_log_path(log) + end + + def create_setup_test_lettings_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:lettings_log, :setup_completed, assigned_to: current_user) + redirect_to lettings_log_path(log) + end + + def create_2024_test_lettings_bulk_upload + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + file = Tempfile.new("test_lettings_log.csv") + header = ["Field number"] + (1..130).to_a + file.write("#{header.join(',')}\n") + log = FactoryBot.create(:lettings_log, :completed, assigned_to: current_user, ppostcode_full: "SW1A 1AA") + file.write("#{([nil] + to_2024_lettings_row(log)).flatten.join(',')}\n") + file.rewind + send_file file.path, type: "text/csv", + filename: "test_lettings_log.csv", + disposition: "attachment", + after_send: lambda { + file.close + file.unlink + } + end + + def create_test_sales_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:sales_log, :completed, assigned_to: current_user) + redirect_to sales_log_path(log) + end + + def create_setup_test_sales_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:sales_log, :shared_ownership_setup_complete, assigned_to: current_user) + redirect_to sales_log_path(log) + end + + def create_2024_test_sales_bulk_upload + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + file = Tempfile.new("test_sales_log.csv") + header = ["Field number"] + (1..131).to_a + file.write("#{header.join(',')}\n") + log = FactoryBot.create(:sales_log, :completed, assigned_to: current_user, value: 180_000, deposit: 150_000) + file.write("#{([nil] + to_2024_sales_row(log)).flatten.join(',')}\n") + file.rewind + send_file file.path, type: "text/csv", + filename: "test_sales_log.csv", + disposition: "attachment", + after_send: lambda { + file.close + file.unlink + } + end + +private + + def to_2024_lettings_row(log) + [ + "ORG#{log.owning_organisation_id}", # 1 + "ORG#{log.managing_organisation_id}", + log.assigned_to&.email, + log.needstype, + log.scheme&.id ? "S#{log.scheme&.id}" : "", + log.location&.id, + renewal(log), + log.startdate&.day, + log.startdate&.month, + log.startdate&.strftime("%y"), # 10 + + rent_type(log), + log.irproduct_other, + log.tenancycode, + log.propcode, + log.declaration, + log.uprn, + log.address_line1&.tr(",", " "), + log.address_line2&.tr(",", " "), + log.town_or_city, + log.county, # 20 + + ((log.postcode_full || "").split(" ") || [""]).first, + ((log.postcode_full || "").split(" ") || [""]).last, + log.la, + log.rsnvac, + log.unitletas, + log.unittype_gn, + log.builtype, + log.wchair, + log.beds, + log.voiddate&.day, # 30 + + log.voiddate&.month, + log.voiddate&.strftime("%y"), + log.mrcdate&.day, + log.mrcdate&.month, + log.mrcdate&.strftime("%y"), + log.joint, + log.startertenancy, + log.tenancy, + log.tenancyother, + log.tenancylength, # 40 + + log.sheltered, + log.age1, + log.sex1, + log.ethnic, + log.nationality_all_group, + log.ecstat1, + log.relat2, + log.age2, + log.sex2, + log.ecstat2, # 50 + + log.relat3, + log.age3, + log.sex3, + log.ecstat3, + log.relat4, + log.age4, + log.sex4, + log.ecstat4, + log.relat5, + log.age5, # 60 + + log.sex5, + log.ecstat5, + log.relat6, + log.age6, + log.sex6, + log.ecstat6, + log.relat7, + log.age7, + log.sex7, + log.ecstat7, # 70 + + log.relat8, + log.age8, + log.sex8, + log.ecstat8, + log.armedforces, + log.leftreg, + log.reservist, + log.preg_occ, + log.housingneeds_a, + log.housingneeds_b, # 80 + + log.housingneeds_c, + log.housingneeds_f, + log.housingneeds_g, + log.housingneeds_h, + log.illness, + log.illness_type_1, + log.illness_type_2, + log.illness_type_3, + log.illness_type_4, + log.illness_type_5, # 90 + + log.illness_type_6, + log.illness_type_7, + log.illness_type_8, + log.illness_type_9, + log.illness_type_10, + log.layear, + log.waityear, + log.reason, + log.reasonother, + log.prevten, # 100 + + homeless(log), + previous_postcode_known(log), + ((log.ppostcode_full || "").split(" ") || [""]).first, + ((log.ppostcode_full || "").split(" ") || [""]).last, + log.prevloc, + log.reasonpref, + log.rp_homeless, + log.rp_insan_unsat, + log.rp_medwel, + log.rp_hardship, # 110 + + log.rp_dontknow, + cbl(log), + chr(log), + cap(log), + accessible_register(log), + log.referral, + net_income_known(log), + log.incfreq, + log.earnings, + log.hb, # 120 + + log.benefits, + log.household_charge, + log.period, + log.chcharge, + log.brent, + log.scharge, + log.pscharge, + log.supcharg, + log.hbrentshortfall, + log.tshortfall, # 130 + ] + end + + def renewal(log) + checkbox_value(log.renewal) + end + + def checkbox_value(field) + case field + when 0 + 2 + when 1 + 1 + end + end + + def rent_type(log) + LettingsLog::RENTTYPE_DETAIL_MAPPING[log.rent_type] + end + + def previous_postcode_known(log) + checkbox_value(log.ppcodenk) + end + + def homeless(log) + case log.homeless + when 1 + 1 + when 11 + 12 + end + end + + def cbl(log) + checkbox_value(log.cbl) + end + + def chr(log) + checkbox_value(log.chr) + end + + def cap(log) + checkbox_value(log.cap) + end + + def accessible_register(log) + checkbox_value(log.accessible_register) + end + + def net_income_known(log) + case log.net_income_known + when 0 + 1 + when 1 + 2 + when 2 + 4 + end + end + + def to_2024_sales_row(log) + [ + "ORG#{log.owning_organisation_id}", # 1 + "ORG#{log.managing_organisation_id}", + log.assigned_to&.email, + log.saledate&.day, + log.saledate&.month, + log.saledate&.strftime("%y"), + log.purchid, + log.ownershipsch, + log.ownershipsch == 1 ? log.type : "", # field_9: "What is the type of shared ownership sale?", + log.ownershipsch == 2 ? log.type : "", # field_10: "What is the type of discounted ownership sale?", + + log.ownershipsch == 3 ? log.type : "", # field_11: "What is the type of outright sale?", + log.othtype, + log.companybuy, + log.buylivein, + log.jointpur, + log.jointmore, + log.noint, + log.privacynotice, + log.beds, + log.proptype, # 20 + + log.builtype, + log.uprn, + log.address_line1&.tr(",", " "), + log.address_line2&.tr(",", " "), + log.town_or_city, + log.county, + ((log.postcode_full || "").split(" ") || [""]).first, + ((log.postcode_full || "").split(" ") || [""]).last, + log.la, + log.wchair, # 30 + + log.age1, + log.sex1, + log.ethnic, + log.nationality_all_group, + log.ecstat1, + log.buy1livein, + log.relat2, + log.age2, + log.sex2, + log.ethnic_group2, # 40 + + log.nationality_all_buyer2_group, + log.ecstat2, + log.buy2livein, + log.hholdcount, + log.relat3, + log.age3, + log.sex3, + log.ecstat3, + log.relat4, + log.age4, # 50 + + log.sex4, + log.ecstat4, + log.relat5, + log.age5, + log.sex5, + log.ecstat5, + log.relat6, + log.age6, + log.sex6, + log.ecstat6, # 60 + + log.prevten, + log.ppcodenk, + ((log.ppostcode_full || "").split(" ") || [""]).first, + ((log.ppostcode_full || "").split(" ") || [""]).last, + log.prevloc, + log.pregyrha, + log.pregother, + log.pregla, + log.pregghb, + log.buy2living, # 70 + + log.prevtenbuy2, + log.hhregres, + log.hhregresstill, + log.armedforcesspouse, + log.disabled, + log.wheel, + log.income1, + log.inc1mort, + log.income2, + log.inc2mort, # 80 + + log.hb, + log.savings.present? || "R", + log.prevown, + log.prevshared, + log.proplen, + log.staircase, + log.stairbought, + log.stairowned, + log.staircasesale, + log.resale, # 90 + + log.exdate&.day, + log.exdate&.month, + log.exdate&.strftime("%y"), + log.hodate&.day, + log.hodate&.month, # 60 + log.hodate&.strftime("%y"), + log.lanomagr, + log.frombeds, + log.fromprop, + log.socprevten, # 100 + + log.value, + log.equity, + log.mortgageused, + log.mortgage, + log.mortgagelender, + log.mortgagelenderother, + log.mortlen, + log.extrabor, + log.deposit, + log.cashdis, # 110 + + log.mrent, + log.mscharge, + log.proplen, + log.value, + log.grant, + log.discount || 0, + log.mortgageused, + log.mortgage, + log.mortgagelender, + log.mortgagelenderother, # 120 + + log.mortlen, + log.extrabor, + log.deposit, + log.mscharge, + log.value, + log.mortgageused, + log.mortgage, + log.mortlen, + log.extrabor, + log.deposit, # 130 + log.mscharge, + ] + end +end diff --git a/config/routes.rb b/config/routes.rb index 55d58b41b..ab31b6b1b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -389,15 +389,19 @@ Rails.application.routes.draw do end end - get "create-test-lettings-log", to: "lettings_logs#create_test_log" - get "create-test-sales-log", to: "sales_logs#create_test_log" - get "create-setup-test-lettings-log", to: "lettings_logs#create_setup_test_log" - get "create-setup-test-sales-log", to: "sales_logs#create_setup_test_log" - scope via: :all do match "/404", to: "errors#not_found" match "/429", to: "errors#too_many_requests", status: 429 match "/422", to: "errors#unprocessable_entity" match "/500", to: "errors#internal_server_error" end + + if FeatureToggle.create_test_logs_enabled? + get "create-test-lettings-log", to: "test_data#create_test_lettings_log" + get "create-setup-test-lettings-log", to: "test_data#create_setup_test_lettings_log" + get "create-2024-test-lettings-bulk-upload", to: "test_data#create_2024_test_lettings_bulk_upload" + get "create-test-sales-log", to: "test_data#create_test_sales_log" + get "create-setup-test-sales-log", to: "test_data#create_setup_test_sales_log" + get "create-2024-test-sales-bulk-upload", to: "test_data#create_2024_test_sales_bulk_upload" + end end