From 194f95b21300a76d8a4034813d4f819caa0ab281 Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 13 Jul 2023 15:18:23 +0100 Subject: [PATCH] Save total logs count for bulk upload --- .../bulk_upload/lettings/validator.rb | 4 +++ app/services/bulk_upload/processor.rb | 1 + app/services/bulk_upload/sales/validator.rb | 4 +++ ...231_add_total_logs_count_to_bulk_upload.rb | 5 ++++ db/schema.rb | 3 ++- .../bulk_upload/lettings/validator_spec.rb | 4 +++ spec/services/bulk_upload/processor_spec.rb | 10 +++++++ .../bulk_upload/sales/validator_spec.rb | 27 +++++++++++++++++++ 8 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20230713140231_add_total_logs_count_to_bulk_upload.rb diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index 14c31b6d7..0759a5cd2 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/app/services/bulk_upload/lettings/validator.rb @@ -73,6 +73,10 @@ class BulkUpload::Lettings::Validator row_parsers.any?(&:log_already_exists?) end + def total_logs_count + csv_parser.body_rows.count + end + private # n^2 algo diff --git a/app/services/bulk_upload/processor.rb b/app/services/bulk_upload/processor.rb index 711996fcf..3fbb1e2d4 100644 --- a/app/services/bulk_upload/processor.rb +++ b/app/services/bulk_upload/processor.rb @@ -10,6 +10,7 @@ class BulkUpload::Processor download + @bulk_upload.update!(total_logs_count: validator.total_logs_count) return send_failure_mail(errors: validator.errors.full_messages) if validator.invalid? validator.call diff --git a/app/services/bulk_upload/sales/validator.rb b/app/services/bulk_upload/sales/validator.rb index 9552bbc69..5e5cf3a89 100644 --- a/app/services/bulk_upload/sales/validator.rb +++ b/app/services/bulk_upload/sales/validator.rb @@ -67,6 +67,10 @@ class BulkUpload::Sales::Validator errors.count == errors.where(category: "soft_validation").count && errors.count.positive? end + def total_logs_count + csv_parser.body_rows.count + end + private # n^2 algo diff --git a/db/migrate/20230713140231_add_total_logs_count_to_bulk_upload.rb b/db/migrate/20230713140231_add_total_logs_count_to_bulk_upload.rb new file mode 100644 index 000000000..fbaeacb37 --- /dev/null +++ b/db/migrate/20230713140231_add_total_logs_count_to_bulk_upload.rb @@ -0,0 +1,5 @@ +class AddTotalLogsCountToBulkUpload < ActiveRecord::Migration[7.0] + def change + add_column :bulk_uploads, :total_logs_count, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 111396ef3..81d233874 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_07_10_101532) do +ActiveRecord::Schema[7.0].define(version: 2023_07_13_140231) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -40,6 +40,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_10_101532) do t.text "filename" t.integer "needstype" t.text "choice" + t.integer "total_logs_count" t.index ["identifier"], name: "index_bulk_uploads_on_identifier", unique: true t.index ["user_id"], name: "index_bulk_uploads_on_user_id" end diff --git a/spec/services/bulk_upload/lettings/validator_spec.rb b/spec/services/bulk_upload/lettings/validator_spec.rb index fa913e091..a9c181b00 100644 --- a/spec/services/bulk_upload/lettings/validator_spec.rb +++ b/spec/services/bulk_upload/lettings/validator_spec.rb @@ -65,6 +65,10 @@ RSpec.describe BulkUpload::Lettings::Validator do it "is valid" do expect(validator).to be_valid end + + it "returns correct total logs count" do + expect(validator.total_logs_count).to be(1) + end end context "and file has too few valid headers" do diff --git a/spec/services/bulk_upload/processor_spec.rb b/spec/services/bulk_upload/processor_spec.rb index 2314a325f..733f8ed5e 100644 --- a/spec/services/bulk_upload/processor_spec.rb +++ b/spec/services/bulk_upload/processor_spec.rb @@ -33,6 +33,7 @@ RSpec.describe BulkUpload::Processor do BulkUpload::Lettings::Validator, invalid?: true, call: nil, + total_logs_count: 1, errors: [], ) end @@ -58,6 +59,13 @@ RSpec.describe BulkUpload::Processor do expect(mock_validator).not_to have_received(:call) end + + it "sets total number of logs on bulk upload" do + processor.call + + bulk_upload.reload + expect(bulk_upload.total_logs_count).to eq(1) + end end context "when the bulk upload processing throws an error" do @@ -74,6 +82,7 @@ RSpec.describe BulkUpload::Processor do instance_double( BulkUpload::Lettings::Validator, invalid?: false, + total_logs_count: 1, ) end @@ -119,6 +128,7 @@ RSpec.describe BulkUpload::Processor do BulkUpload::Lettings::Validator, invalid?: false, call: nil, + total_logs_count: 1, any_setup_errors?: true, ) end diff --git a/spec/services/bulk_upload/sales/validator_spec.rb b/spec/services/bulk_upload/sales/validator_spec.rb index 851109772..8d543b4a6 100644 --- a/spec/services/bulk_upload/sales/validator_spec.rb +++ b/spec/services/bulk_upload/sales/validator_spec.rb @@ -246,4 +246,31 @@ RSpec.describe BulkUpload::Sales::Validator do end end end + + describe "#total_logs_count?" do + around do |example| + Timecop.freeze(Time.zone.local(2023, 2, 22)) do + Singleton.__init__(FormHandler) + example.run + end + Timecop.return + Singleton.__init__(FormHandler) + end + + context "when all logs are valid" do + let(:target_path) { file_fixture("completed_2022_23_sales_bulk_upload.csv") } + + before do + target_array = File.open(target_path).readlines + target_array[0..118].each do |line| + file.write line + end + file.rewind + end + + it "returns correct total logs count" do + expect(validator.total_logs_count).to be(1) + end + end + end end