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
let ( :expected_errors ) do
[
" - Column A (What is the letting type?) " ,
" - Column E (Management group code) " ,
]
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 :: BULK_UPLOAD_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 ,
errors_list : expected_errors . join ( " \n " ) ,
bulk_upload_link : start_bulk_upload_lettings_logs_url ,
} ,
)
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 :: BULK_UPLOAD_COMPLETE_TEMPLATE_ID ,
personalisation : {
title : " You’ve successfully uploaded 0 logs " ,
filename : bulk_upload . filename ,
upload_timestamp : bulk_upload . created_at ,
success_description : " The lettings 2022/23 data you uploaded has been checked. The 0 logs you uploaded are now complete. " ,
logs_link : lettings_logs_url ,
} ,
)
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 :: BULK_UPLOAD_FAILED_SERVICE_ERROR_TEMPLATE_ID ,
personalisation : {
filename : bulk_upload . filename ,
upload_timestamp : bulk_upload . created_at ,
lettings_or_sales : bulk_upload . log_type ,
year_combo : bulk_upload . year_combo ,
bulk_upload_link : start_bulk_upload_lettings_logs_url ,
} ,
)
mailer . send_bulk_upload_failed_service_error_mail ( bulk_upload : )
end
end
context " when bulk upload has log which is not completed " do
before do
create ( :lettings_log , :in_progress , bulk_upload : )
end
describe " # send_bulk_upload_with_errors_mail " do
let ( :error_description ) do
" We created logs from your 2022/23 lettings data. There was a problem with 1 of the logs. Click the below link to fix these logs. "
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 :: BULK_UPLOAD_WITH_ERRORS_TEMPLATE_ID ,
personalisation : {
title : " We found 1 log with errors " ,
filename : bulk_upload . filename ,
upload_timestamp : bulk_upload . created_at . to_fs ( :govuk_date_and_time ) ,
error_description : ,
summary_report_link : " http://localhost:3000/lettings-logs/bulk-upload-results/ #{ bulk_upload . id } /resume " ,
} ,
)
mailer . send_bulk_upload_with_errors_mail ( bulk_upload : )
end
end
end
describe " # send_correct_and_upload_again_mail " do
context " when there are no errors " do
it " sends correctly formed email " do
expect ( notify_client ) . to receive ( :send_email ) . with (
email_address : user . email ,
template_id : described_class :: BULK_UPLOAD_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 } " ,
error_description : " Please correct your data export and upload again. \n " ,
} ,
)
mailer . send_correct_and_upload_again_mail ( bulk_upload : , errors : { } )
end
end
context " when are multiple errors " do
before do
stub_const ( " BulkUploadErrorSummaryTableComponent::DISPLAY_THRESHOLD " , 0 )
create ( :bulk_upload_error , bulk_upload : , col : " A " )
create ( :bulk_upload_error , bulk_upload : , col : " B " )
create ( :bulk_upload_error , bulk_upload : , col : " C " )
create ( :bulk_upload_error , bulk_upload : , col : " D " )
end
it " sends correctly formed email with A, B, C and more " do
error_description = " We noticed the following issues with your upload: \n - logs where the setup sections were incomplete \n - logs with a lot of similar errors in column A, B, C and more \n - logs you are trying to upload have been created previously \n "
expect ( notify_client ) . to receive ( :send_email ) . with (
email_address : user . email ,
template_id : described_class :: BULK_UPLOAD_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 ,
error_description : ,
summary_report_link : " http://localhost:3000/lettings-logs/bulk-upload-results/ #{ bulk_upload . id } /summary " ,
} ,
)
errors = {
any_setup_sections_incomplete : true ,
over_column_error_threshold : true ,
any_logs_already_exist : true ,
}
mailer . send_correct_and_upload_again_mail ( bulk_upload : , errors : )
end
end
end
end