require "rails_helper" RSpec.describe BulkUploadMailer do subject(:mailer) { described_class.new } let(:notify_client) { instance_double(Notifications::Client) } let(:user) { create(:user, email: "user@example.com") } let(:bulk_upload) { create(:bulk_upload, :lettings, user:) } before do allow(Notifications::Client).to receive(:new).and_return(notify_client) allow(notify_client).to receive(:send_email).and_return(true) end describe "#send_bulk_upload_failed_file_setup_error_mail" do before do create(:bulk_upload_error, bulk_upload:, col: "A", field: "field_1", category: "setup") create(:bulk_upload_error, bulk_upload:, col: "E", field: "field_4", category: "setup") create(:bulk_upload_error, bulk_upload:, col: "F", field: "field_5") end it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: bulk_upload.user.email, template_id: described_class::FAILED_FILE_SETUP_ERROR_TEMPLATE_ID, personalisation: { filename: bulk_upload.filename, upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), lettings_or_sales: bulk_upload.log_type, year_combo: bulk_upload.year_combo, bulk_upload_link: summary_bulk_upload_lettings_result_url(bulk_upload), }, ) mailer.send_bulk_upload_failed_file_setup_error_mail(bulk_upload:) end end describe "#send_bulk_upload_complete_mail" do it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: user.email, template_id: described_class::COMPLETE_TEMPLATE_ID, personalisation: { title: "You’ve successfully uploaded 0 logs", filename: bulk_upload.filename, log_type: "lettings", upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), success_description: "The lettings #{bulk_upload.year_combo} data you uploaded has been checked. The 0 logs you uploaded are now complete.", logs_link: clear_filters_url(filter_type: "lettings_logs"), }, ) mailer.send_bulk_upload_complete_mail(user:, bulk_upload:) end end describe "#send_bulk_upload_failed_service_error_mail" do it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: user.email, template_id: described_class::FAILED_SERVICE_ERROR_TEMPLATE_ID, personalisation: { filename: bulk_upload.filename, upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), lettings_or_sales: bulk_upload.log_type, year_combo: bulk_upload.year_combo, errors: "- foo\n- bar", bulk_upload_link: start_bulk_upload_lettings_logs_url, }, ) mailer.send_bulk_upload_failed_service_error_mail(bulk_upload:, errors: %w[foo bar]) end end describe "#send_correct_and_upload_again_mail" do context "when 2 columns with errors" do before do create(:bulk_upload_error, bulk_upload:, col: "A") create(:bulk_upload_error, bulk_upload:, col: "B") end it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: user.email, template_id: described_class::FAILED_CSV_ERRORS_TEMPLATE_ID, personalisation: { filename: bulk_upload.filename, upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), year_combo: bulk_upload.year_combo, lettings_or_sales: bulk_upload.log_type, summary_report_link: "http://localhost:3000/lettings-logs/bulk-upload-results/#{bulk_upload.id}", }, ) mailer.send_correct_and_upload_again_mail(bulk_upload:) end end end describe "#send_check_soft_validations_mail" do before do create(:bulk_upload_error, bulk_upload:, col: "A", field: "field_1", category: "soft_validation") create(:bulk_upload_error, bulk_upload:, col: "E", field: "field_4", category: "soft_validation") end it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: bulk_upload.user.email, template_id: described_class::CHECK_SOFT_VALIDATIONS_TEMPLATE_ID, personalisation: { title: "Check your file data", filename: bulk_upload.filename, upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), description: "Some of your #{bulk_upload.year_combo} lettings data might not be right. Click the link below to review the potential errors, and check your file to see if the data is correct.", cta_link: bulk_upload_lettings_soft_validations_check_url(bulk_upload, page: "confirm-soft-errors"), }, ) mailer.send_check_soft_validations_mail(bulk_upload:) end end describe "#send_correct_duplicates_and_upload_again_mail" do context "when 2 columns with errors" do before do create(:bulk_upload_error, bulk_upload:, col: "A") create(:bulk_upload_error, bulk_upload:, col: "B") end it "sends correctly formed email" do expect(notify_client).to receive(:send_email).with( email_address: user.email, template_id: described_class::FAILED_CSV_DUPLICATE_ERRORS_TEMPLATE_ID, personalisation: { filename: bulk_upload.filename, upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), year_combo: bulk_upload.year_combo, lettings_or_sales: bulk_upload.log_type, summary_report_link: "http://localhost:3000/lettings-logs/bulk-upload-results/#{bulk_upload.id}", }, ) mailer.send_correct_duplicates_and_upload_again_mail(bulk_upload:) end end end end