diff --git a/.review_apps/ecs_task_definition.tf b/.review_apps/ecs_task_definition.tf index 75ba57cf1..b019cea45 100644 --- a/.review_apps/ecs_task_definition.tf +++ b/.review_apps/ecs_task_definition.tf @@ -45,7 +45,8 @@ locals { { name = "SETTINGS__AUTH_PROVIDER", value = "developer" }, { name = "SETTINGS__FORMS_ENV", value = "review" }, { name = "SETTINGS__FORMS_RUNNER__URL", value = "https://${local.runner_review_app_hostname}" }, - { name = "ALLOWED_HOST_PATTERNS", value = "localhost:3000" } + { name = "ALLOWED_HOST_PATTERNS", value = "localhost:3000" }, + { name = "SETTINGS__FEATURES__JSON_SUBMISSION_ENABLED", value = "true" } ] } diff --git a/app/mailers/aws_ses_form_submission_mailer.rb b/app/mailers/aws_ses_form_submission_mailer.rb index 7ea5b2909..4d5f2c123 100644 --- a/app/mailers/aws_ses_form_submission_mailer.rb +++ b/app/mailers/aws_ses_form_submission_mailer.rb @@ -3,12 +3,13 @@ class AwsSesFormSubmissionMailer < ApplicationMailer reply_to: Settings.ses_submission_email.reply_to_email_address, delivery_method: Rails.configuration.x.aws_ses_form_submission_mailer["delivery_method"] - def submission_email(answer_content_html:, answer_content_plain_text:, submission:, files:, csv_filename: nil) + def submission_email(answer_content_html:, answer_content_plain_text:, submission:, files:, csv_filename: nil, json_filename: nil) @answer_content_html = answer_content_html @answer_content_plain_text = answer_content_plain_text @submission = submission @subject = email_subject @csv_filename = csv_filename + @json_filename = json_filename files.each do |name, file| attachments[name] = { diff --git a/app/services/aws_ses_submission_service.rb b/app/services/aws_ses_submission_service.rb index 88d093816..7868d0db9 100644 --- a/app/services/aws_ses_submission_service.rb +++ b/app/services/aws_ses_submission_service.rb @@ -39,7 +39,8 @@ def deliver_submission_email answer_content_plain_text:, submission: @submission, files:, - csv_filename:).deliver_now + csv_filename:, + json_filename:).deliver_now CurrentJobLoggingAttributes.mail_message_id = mail.message_id mail.message_id diff --git a/app/views/aws_ses_form_submission_mailer/submission_email.html.erb b/app/views/aws_ses_form_submission_mailer/submission_email.html.erb index a24ea3aa6..96575b15d 100644 --- a/app/views/aws_ses_form_submission_mailer/submission_email.html.erb +++ b/app/views/aws_ses_form_submission_mailer/submission_email.html.erb @@ -31,6 +31,10 @@

<%= I18n.t("mailer.submission.csv_file", filename: @csv_filename) %>

<% end %> +<% if @json_filename.present? %> +

<%= I18n.t("mailer.submission.json_file", filename: @json_filename) %>

+<% end %> + <%= @answer_content_html.html_safe %>
diff --git a/app/views/aws_ses_form_submission_mailer/submission_email.text.erb b/app/views/aws_ses_form_submission_mailer/submission_email.text.erb index 9607322b0..9f83d119a 100644 --- a/app/views/aws_ses_form_submission_mailer/submission_email.text.erb +++ b/app/views/aws_ses_form_submission_mailer/submission_email.text.erb @@ -21,6 +21,10 @@ <%= I18n.t("mailer.submission.csv_file", filename: @csv_filename) %> <% end %> +<% if @json_filename.present? %> + <%= I18n.t("mailer.submission.json_file", filename: @json_filename) %> +<% end %> + <%= @answer_content_plain_text %> --- diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 9f2fd2764..107b3f4e4 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -433,6 +433,7 @@ cy: csv_file: 'A CSV file of these answers is attached to this email in a file named: %{filename}' file_attached: "%{filename} (attached to this email)" from: GOV.UK Forms <%{email_address}> + json_file: 'A JSON file of these answers is attached to this email in a file named: %{filename}' payment: You can check that a payment has been made by using this reference number to search transactions within GOV.​UK Pay. preview: This is a test submission from a preview of this form. question_skipped: This question was skipped diff --git a/config/locales/en.yml b/config/locales/en.yml index c00b9453c..ee3605b56 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -433,6 +433,7 @@ en: csv_file: 'A CSV file of these answers is attached to this email in a file named: %{filename}' file_attached: "%{filename} (attached to this email)" from: GOV.UK Forms <%{email_address}> + json_file: 'A JSON file of these answers is attached to this email in a file named: %{filename}' payment: You can check that a payment has been made by using this reference number to search transactions within GOV.​UK Pay. preview: This is a test submission from a preview of this form. question_skipped: This question was skipped diff --git a/spec/mailers/README.md b/spec/mailers/README.md new file mode 100644 index 000000000..31a1a95e5 --- /dev/null +++ b/spec/mailers/README.md @@ -0,0 +1,3 @@ +# Previewing emails + +To preview emails listed in `aws_ses_form_submission_mailer_preview.rb` locally, use the route `/rails/mailers` while the rails server is running. \ No newline at end of file diff --git a/spec/mailers/aws_ses_form_submission_mailer_preview.rb b/spec/mailers/aws_ses_form_submission_mailer_preview.rb index 0843060ef..3d7961712 100644 --- a/spec/mailers/aws_ses_form_submission_mailer_preview.rb +++ b/spec/mailers/aws_ses_form_submission_mailer_preview.rb @@ -37,4 +37,25 @@ def submission_email_with_csv files: {}, csv_filename: "my_answers.csv") end + + def submission_email_with_json + form_document = build(:v2_form_document, submission_email: "testing@gov.uk", payment_url: "https://www.gov.uk/payments/your-payment-link") + submission = build(:submission, form_document:, is_preview: false) + AwsSesFormSubmissionMailer.submission_email(answer_content_html: "

What's your email address?

forms@example.gov.uk

", + answer_content_plain_text: "What's your email address?\n\nforms@example.gov.uk", + submission:, + files: {}, + json_filename: "my_answers.json") + end + + def submission_email_with_csv_and_json + form_document = build(:v2_form_document, submission_email: "testing@gov.uk", payment_url: "https://www.gov.uk/payments/your-payment-link") + submission = build(:submission, form_document:, is_preview: false) + AwsSesFormSubmissionMailer.submission_email(answer_content_html: "

What's your email address?

forms@example.gov.uk

", + answer_content_plain_text: "What's your email address?\n\nforms@example.gov.uk", + submission:, + files: {}, + csv_filename: "my_answers.csv", + json_filename: "my_answers.json") + end end diff --git a/spec/mailers/aws_ses_form_submission_mailer_spec.rb b/spec/mailers/aws_ses_form_submission_mailer_spec.rb index b1dc4acaf..8ede0b7c3 100644 --- a/spec/mailers/aws_ses_form_submission_mailer_spec.rb +++ b/spec/mailers/aws_ses_form_submission_mailer_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" describe AwsSesFormSubmissionMailer, type: :mailer do - subject(:mail) { described_class.submission_email(answer_content_html:, answer_content_plain_text:, submission:, files:, csv_filename:) } + subject(:mail) { described_class.submission_email(answer_content_html:, answer_content_plain_text:, submission:, files:, csv_filename:, json_filename:) } let(:submission) do build(:submission, form_document: form_document, created_at: submission_timestamp, @@ -17,6 +17,7 @@ let(:submission_reference) { Faker::Alphanumeric.alphanumeric(number: 8).upcase } let(:payment_url) { nil } let(:csv_filename) { nil } + let(:json_filename) { nil } let(:submission_timestamp) { Time.utc(2022, 12, 14, 13, 0o0, 0o0) } context "when form filler submits a completed form" do @@ -256,6 +257,26 @@ expect(part.body).not_to have_text(I18n.t("mailer.submission.csv_file", filename: csv_filename)) end end + + context "when the json file of answers is attached" do + let(:json_filename) { "my_answers.json" } + + describe "the html part" do + let(:part) { mail.html_part } + + it "includes text about the JSON filename" do + expect(part.body).to have_css("p", text: I18n.t("mailer.submission.json_file", filename: json_filename)) + end + end + + describe "the plaintext part" do + let(:part) { mail.text_part } + + it "includes text about the JSON filename" do + expect(part.body).to have_text(I18n.t("mailer.submission.json_file", filename: json_filename)) + end + end + end end end diff --git a/spec/services/aws_ses_submission_service_spec.rb b/spec/services/aws_ses_submission_service_spec.rb index 5af3daf87..20eb8af5d 100644 --- a/spec/services/aws_ses_submission_service_spec.rb +++ b/spec/services/aws_ses_submission_service_spec.rb @@ -67,6 +67,7 @@ submission:, files: {}, csv_filename: nil, + json_filename: nil, ).once end end @@ -100,6 +101,7 @@ submission:, files: { question.email_filename => file_content }, csv_filename: nil, + json_filename: nil, ).once end @@ -165,6 +167,7 @@ submission: submission, files: { "govuk_forms_a_great_form_#{submission_reference}.csv" => expected_csv_content }, csv_filename: "govuk_forms_a_great_form_#{submission_reference}.csv", + json_filename: nil, ).once end @@ -196,6 +199,7 @@ question.email_filename => file_content, }, csv_filename: "govuk_forms_a_great_form_#{submission_reference}.csv", + json_filename: nil, ).once end end @@ -214,6 +218,7 @@ JSON.parse(json)["form_name"] == "A great form" end, }, + json_filename: "govuk_forms_a_great_form_#{submission_reference}.json", ), ).and_call_original @@ -254,6 +259,7 @@ submission:, files: {}, csv_filename: nil, + json_filename: nil, ).once end end