From 7a752f770e4becda61c4ac6e9e305d691f426a69 Mon Sep 17 00:00:00 2001 From: Kat <54268893+kosiakkatrina@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:57:26 +0100 Subject: [PATCH] Validate BU file size --- .../bulk_upload_lettings/upload_your_file.rb | 11 ++++++++++ .../bulk_upload_sales/upload_your_file.rb | 11 ++++++++++ config/locales/en.yml | 2 ++ .../bulk_upload_lettings_logs_spec.rb | 19 ++++++++++++++++++ spec/features/bulk_upload_sales_logs_spec.rb | 20 +++++++++++++++++++ 5 files changed, 63 insertions(+) diff --git a/app/models/forms/bulk_upload_lettings/upload_your_file.rb b/app/models/forms/bulk_upload_lettings/upload_your_file.rb index 954c6e6e6..817c25753 100644 --- a/app/models/forms/bulk_upload_lettings/upload_your_file.rb +++ b/app/models/forms/bulk_upload_lettings/upload_your_file.rb @@ -15,6 +15,7 @@ module Forms validates :file, presence: true validate :validate_file_is_csv + validate :validate_file_size def view_path "bulk_upload_lettings_logs/forms/upload_your_file" @@ -73,6 +74,16 @@ module Forms errors.add(:file, :not_csv) end end + + MAX_FILE_SIZE = 10.megabytes + + def validate_file_size + return unless file + + if file.size > MAX_FILE_SIZE + errors.add(:file, :file_too_large) + end + end end end end diff --git a/app/models/forms/bulk_upload_sales/upload_your_file.rb b/app/models/forms/bulk_upload_sales/upload_your_file.rb index 5a0114caf..6be624312 100644 --- a/app/models/forms/bulk_upload_sales/upload_your_file.rb +++ b/app/models/forms/bulk_upload_sales/upload_your_file.rb @@ -14,6 +14,7 @@ module Forms validates :file, presence: true validate :validate_file_is_csv + validate :validate_file_size def view_path "bulk_upload_sales_logs/forms/upload_your_file" @@ -67,6 +68,16 @@ module Forms errors.add(:file, :not_csv) end end + + MAX_FILE_SIZE = 10.megabytes + + def validate_file_size + return unless file + + if file.size > MAX_FILE_SIZE + errors.add(:file, :file_too_large) + end + end end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index faced2c11..7815595e3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -90,11 +90,13 @@ en: file: blank: "Select which file to upload." not_csv: "Your file must be in CSV format." + file_too_large: "File must be 10MB or less." forms/bulk_upload_sales/upload_your_file: attributes: file: blank: "Select which file to upload." not_csv: "Your file must be in CSV format." + file_too_large: "File must be 10MB or less." forms/bulk_upload_lettings/needstype: attributes: needstype: diff --git a/spec/features/bulk_upload_lettings_logs_spec.rb b/spec/features/bulk_upload_lettings_logs_spec.rb index 5d48d9ee0..f4442351e 100644 --- a/spec/features/bulk_upload_lettings_logs_spec.rb +++ b/spec/features/bulk_upload_lettings_logs_spec.rb @@ -75,6 +75,25 @@ RSpec.describe "Bulk upload lettings log" do expect(page).to have_content("Upload lettings logs in bulk") end + + it "shows file to large error" do + stub_const("Forms::BulkUploadLettings::UploadYourFile::MAX_FILE_SIZE", 1.bytes) + visit("/lettings-logs") + + click_link("Upload lettings logs in bulk") + expect(page).to have_content("Which year") + click_button("Continue") + choose(current_formatted_year) + click_button("Continue") + click_button("Continue") + + allow_any_instance_of(Forms::BulkUploadLettings::UploadYourFile).to receive(:`).and_return("text/csv") + + attach_file "file", file_fixture("2023_24_lettings_bulk_upload.xlsx") + click_button("Upload") + + expect(page).to have_content("File must be 10MB or less") + end end # rubocop:enable RSpec/AnyInstance diff --git a/spec/features/bulk_upload_sales_logs_spec.rb b/spec/features/bulk_upload_sales_logs_spec.rb index e47273cdc..57c882af1 100644 --- a/spec/features/bulk_upload_sales_logs_spec.rb +++ b/spec/features/bulk_upload_sales_logs_spec.rb @@ -71,6 +71,26 @@ RSpec.describe "Bulk upload sales log" do expect(page).to have_content("Upload sales logs in bulk") end + + it "shows file to large error" do + stub_const("Forms::BulkUploadSales::UploadYourFile::MAX_FILE_SIZE", 1.bytes) + visit("/sales-logs") + click_link("Upload sales logs in bulk") + + expect(page).to have_content("Which year") + click_button("Continue") + click_button("Continue") + choose("2023/2024") + click_button("Continue") + click_button("Continue") + + allow_any_instance_of(Forms::BulkUploadSales::UploadYourFile).to receive(:`).and_return("text/csv") + + attach_file "file", file_fixture("2023_24_lettings_bulk_upload.xlsx") + click_button("Upload") + + expect(page).to have_content("File must be 10MB or less") + end end # rubocop:enable RSpec/AnyInstance