From f268357616a7de4a820fb8436caf357474c23b93 Mon Sep 17 00:00:00 2001 From: carolynbarker <8038496+carolynbarker@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:53:43 +0000 Subject: [PATCH] refactor repetitive sales csv methods (#2954) * refactor repetitive sales csv methods * remove 2025 test until 2025 functionality is actually merged * fix syntax typo * fix incorrect method * fix indentation --------- Co-authored-by: Carolyn --- app/helpers/bulk_upload/sales_log_to_csv.rb | 100 +++++------------- .../bulk_upload/sales/validator_spec.rb | 4 +- .../sales/year2023/csv_parser_spec.rb | 24 ++--- .../sales/year2024/csv_parser_spec.rb | 26 ++--- 4 files changed, 53 insertions(+), 101 deletions(-) diff --git a/app/helpers/bulk_upload/sales_log_to_csv.rb b/app/helpers/bulk_upload/sales_log_to_csv.rb index 0d37fe344a..bc14351866 100644 --- a/app/helpers/bulk_upload/sales_log_to_csv.rb +++ b/app/helpers/bulk_upload/sales_log_to_csv.rb @@ -18,11 +18,9 @@ def to_csv_row(seed: nil) year = log.collection_start_year case year when 2022 - to_2022_csv_row(seed:) - when 2023 - to_2023_csv_row(seed:) - when 2024 - to_2024_csv_row(seed:) + to_2022_csv_row + when 2023, 2024 + to_year_csv_row(year, seed:) else raise NotImplementedError "No mapping function implemented for year #{year}" end @@ -30,93 +28,55 @@ def to_csv_row(seed: nil) def to_row year = log.collection_start_year - case year - when 2022 - to_2022_row - when 2023 - to_2023_row - when 2024 - to_2024_row - else - raise NotImplementedError "No mapping function implemented for year #{year}" - end + send("to_#{year}_row") + rescue NoMethodError + raise NotImplementedError "No mapping function implemented for year #{year}" end def default_field_numbers_row(seed: nil) year = log.collection_start_year - case year - when 2022 - default_2022_field_numbers_row(seed:) - when 2023 - default_2023_field_numbers_row(seed:) - when 2024 - default_2024_field_numbers_row(seed:) - else - raise NotImplementedError "No mapping function implemented for year #{year}" - end + default_field_numbers_row_for_year(year, seed:) end def default_field_numbers year = log.collection_start_year - case year - when 2022 - default_2022_field_numbers - when 2023 - default_2023_field_numbers - when 2024 - default_2024_field_numbers - else - raise NotImplementedError "No mapping function implemented for year #{year}" - end + default_field_numbers_for_year(year) end def to_2022_csv_row (row_prefix + to_2022_row).flatten.join(",") + line_ending end - def to_2023_csv_row(seed: nil) + def to_year_csv_row(year, seed: nil) + unshuffled_row = send("to_#{year}_row") if seed - row = to_2023_row.shuffle(random: Random.new(seed)) + row = unshuffled_row.shuffle(random: Random.new(seed)) (row_prefix + row).flatten.join(",") + line_ending else - (row_prefix + to_2023_row).flatten.join(",") + line_ending + (row_prefix + unshuffled_row).flatten.join(",") + line_ending end + rescue NoMethodError + raise NotImplementedError "No mapping function implemented for year #{year}" end - def to_2024_csv_row(seed: nil) - if seed - row = to_2024_row.shuffle(random: Random.new(seed)) - (row_prefix + row).flatten.join(",") + line_ending + def default_field_numbers_for_year(year) + case year + when 2022 + (1..125).to_a + when 2023 + [6, 3, 4, 5, nil, 28, 30, 38, 47, 51, 55, 59, 31, 39, 48, 52, 56, 60, 37, 46, 50, 54, 58, 35, 43, 49, 53, 57, 61, 32, 33, 78, 80, 79, 81, 83, 84, nil, 62, 66, 64, 65, 63, 67, 69, 70, 68, 76, 77, 16, 17, 18, 26, 24, 25, 27, 8, 91, 95, 96, 97, 92, 93, 94, 98, 100, 101, 103, 104, 106, 110, 111, 112, 113, 114, 9, 116, 117, 118, 120, 124, 125, 126, 10, 11, nil, 127, 129, 133, 134, 135, 1, 2, nil, 73, nil, 75, 107, 108, 121, 122, 130, 131, 82, 109, 123, 132, 115, 15, 86, 87, 29, 7, 12, 13, 14, 36, 44, 45, 88, 89, 102, 105, 119, 128, 19, 20, 21, 22, 23, 34, 40, 41, 42, 71, 72, 74, 85, 90, 99] + when 2024 + (1..131).to_a else - (row_prefix + to_2024_row).flatten.join(",") + line_ending + raise NotImplementedError "No mapping function implemented for year #{year}" end end - def default_2022_field_numbers - (1..125).to_a - end - - def default_2022_field_numbers_row(seed: nil) + def default_field_numbers_row_for_year(year, seed: nil) if seed - ["Field number"] + default_2022_field_numbers.shuffle(random: Random.new(seed)) + ["Field number"] + default_field_numbers_for_year(year).shuffle(random: Random.new(seed)) else - ["Field number"] + default_2022_field_numbers - end.flatten.join(",") + line_ending - end - - def default_2023_field_numbers_row(seed: nil) - if seed - ["Field number"] + default_2023_field_numbers.shuffle(random: Random.new(seed)) - else - ["Field number"] + default_2023_field_numbers - end.flatten.join(",") + line_ending - end - - def default_2024_field_numbers_row(seed: nil) - if seed - ["Field number"] + default_2024_field_numbers.shuffle(random: Random.new(seed)) - else - ["Field number"] + default_2024_field_numbers + ["Field number"] + default_field_numbers_for_year(year) end.flatten.join(",") + line_ending end @@ -435,10 +395,6 @@ def to_2024_row ] end - def default_2023_field_numbers - [6, 3, 4, 5, nil, 28, 30, 38, 47, 51, 55, 59, 31, 39, 48, 52, 56, 60, 37, 46, 50, 54, 58, 35, 43, 49, 53, 57, 61, 32, 33, 78, 80, 79, 81, 83, 84, nil, 62, 66, 64, 65, 63, 67, 69, 70, 68, 76, 77, 16, 17, 18, 26, 24, 25, 27, 8, 91, 95, 96, 97, 92, 93, 94, 98, 100, 101, 103, 104, 106, 110, 111, 112, 113, 114, 9, 116, 117, 118, 120, 124, 125, 126, 10, 11, nil, 127, 129, 133, 134, 135, 1, 2, nil, 73, nil, 75, 107, 108, 121, 122, 130, 131, 82, 109, 123, 132, 115, 15, 86, 87, 29, 7, 12, 13, 14, 36, 44, 45, 88, 89, 102, 105, 119, 128, 19, 20, 21, 22, 23, 34, 40, 41, 42, 71, 72, 74, 85, 90, 99] - end - def custom_field_numbers_row(seed: nil, field_numbers: nil) if seed ["Field number"] + field_numbers.shuffle(random: Random.new(seed)) @@ -452,10 +408,6 @@ def to_custom_csv_row(seed: nil, field_values: nil) (row_prefix + row).flatten.join(",") + line_ending end - def default_2024_field_numbers - (1..131).to_a - end - private def hhregres diff --git a/spec/services/bulk_upload/sales/validator_spec.rb b/spec/services/bulk_upload/sales/validator_spec.rb index 968014e7c6..71a94a7255 100644 --- a/spec/services/bulk_upload/sales/validator_spec.rb +++ b/spec/services/bulk_upload/sales/validator_spec.rb @@ -47,8 +47,8 @@ let(:log) { build(:sales_log, :completed, saledate: Time.zone.local(2023, 10, 10), assigned_to: user) } before do - file.write(log_to_csv.default_2024_field_numbers_row) - file.write(log_to_csv.to_2024_csv_row) + file.write(log_to_csv.default_field_numbers_row_for_year(2024)) + file.write(log_to_csv.to_year_csv_row(2024)) file.rewind end diff --git a/spec/services/bulk_upload/sales/year2023/csv_parser_spec.rb b/spec/services/bulk_upload/sales/year2023/csv_parser_spec.rb index 6738eb3f3a..794cce0e3f 100644 --- a/spec/services/bulk_upload/sales/year2023/csv_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2023/csv_parser_spec.rb @@ -15,8 +15,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -44,8 +44,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2023_field_numbers_row(seed:)) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2023_csv_row(seed:)) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2023, seed:)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2023, seed:)) file.rewind end @@ -65,7 +65,7 @@ let(:log) { build(:sales_log, :completed, :with_uprn) } before do - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -87,7 +87,7 @@ before do file.write(bom) - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.close end @@ -104,7 +104,7 @@ before do file.write(invalid_sequence) - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.close end @@ -122,8 +122,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -139,7 +139,7 @@ let(:log) { build(:sales_log, :completed, :with_uprn) } before do - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -158,8 +158,8 @@ file.write("Can be empty?\r") file.write("Type of letting the question applies to\r\n") file.write("Duplicate check field?\r") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end diff --git a/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb index 5f9f003d07..49f48f607e 100644 --- a/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb @@ -15,8 +15,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2024)) file.write("\n") file.rewind end @@ -47,8 +47,8 @@ file.write("\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2024)) file.write("\n") file.rewind end @@ -81,8 +81,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2024_field_numbers_row(seed:)) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2024_csv_row(seed:)) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2024, seed:)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2024, seed:)) file.rewind end @@ -102,7 +102,7 @@ let(:log) { build(:sales_log, :completed, :with_uprn) } before do - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.rewind end @@ -124,7 +124,7 @@ before do file.write(bom) - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.close end @@ -141,7 +141,7 @@ before do file.write(invalid_sequence) - file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.close end @@ -159,8 +159,8 @@ file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end @@ -179,8 +179,8 @@ file.write("Can be empty?\r") file.write("Type of letting the question applies to\r\n") file.write("Duplicate check field?\r") - file.write(BulkUpload::SalesLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::SalesLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::SalesLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::SalesLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end