Skip to content

Commit f1a5922

Browse files
committed
Change submission services to use language
We change the submission services which call the CSV and JSON generators to pass the language instead of locale. This allows us to decide whether to include language, as taken from submission locale or pass nil to not include it at all. Only forms which have more than one language, currently only Welsh forms, will have language set.
1 parent 428c6e5 commit f1a5922

File tree

4 files changed

+83
-13
lines changed

4 files changed

+83
-13
lines changed

app/services/aws_ses_submission_service.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def generate_csv_submission
5252
submission_reference: @submission.reference,
5353
timestamp: @submission.submission_time,
5454
is_s3_submission: false,
55-
submission_locale: @submission.submission_locale,
55+
language:,
5656
)
5757
end
5858

@@ -63,7 +63,7 @@ def generate_json_submission
6363
submission_reference: @submission.reference,
6464
timestamp: @submission.submission_time,
6565
is_s3_submission: false,
66-
submission_locale: @submission.submission_locale,
66+
language:,
6767
)
6868
end
6969

@@ -103,4 +103,10 @@ def generate_csv_filename
103103
def generate_json_filename
104104
SubmissionFilenameGenerator.json_filename(form_name: @form.name, submission_reference: @submission.reference)
105105
end
106+
107+
def language
108+
return nil unless @form.multilingual?
109+
110+
@submission.submission_locale
111+
end
106112
end

app/services/s3_submission_service.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def generate_csv_submission
4646
submission_reference: @submission_reference,
4747
timestamp: @timestamp,
4848
is_s3_submission: true,
49-
submission_locale: @submission_locale,
49+
language:,
5050
)
5151
end
5252

@@ -57,7 +57,7 @@ def generate_json_submission
5757
submission_reference: @submission_reference,
5858
timestamp: @timestamp,
5959
is_s3_submission: true,
60-
submission_locale: @submission_locale,
60+
language:,
6161
)
6262
end
6363

@@ -125,4 +125,10 @@ def generate_key(filename)
125125
formatted_timestamp = @timestamp.utc.strftime("%Y%m%dT%H%M%SZ")
126126
"#{folder}/#{@form.id}/#{formatted_timestamp}_#{@submission_reference}/#{filename}"
127127
end
128+
129+
def language
130+
return nil unless @form.multilingual?
131+
132+
@submission_locale
133+
end
128134
end

spec/services/aws_ses_submission_service_spec.rb

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,22 @@
55

66
let(:submission) do
77
build(:submission, form_document:, reference: submission_reference, is_preview: is_preview,
8-
created_at: Time.utc(2022, 12, 14, 8, 0o0, 0o0))
8+
created_at: Time.utc(2022, 12, 14, 8, 0o0, 0o0), submission_locale:)
99
end
10-
let(:form_document) { build(:v2_form_document, name: "A great form", submission_type:, submission_format:, submission_email:, payment_url:) }
10+
let(:form_document) { build(:v2_form_document, name: "A great form", submission_type:, submission_format:, submission_email:, payment_url:, available_languages:) }
1111
let(:all_steps) { [step] }
1212
let(:journey) { instance_double(Flow::Journey, completed_steps: all_steps, all_steps:, completed_file_upload_questions: []) }
1313
let(:question) { build :text, question_text: "What is the meaning of life?", text: "42" }
1414
let(:step) { build :step, question: }
1515
let(:is_preview) { false }
1616
let(:submission_reference) { Faker::Alphanumeric.alphanumeric(number: 8).upcase }
17+
let(:submission_locale) { "en" }
1718
let(:payment_url) { nil }
1819
let(:submission_type) { "email" }
1920
let(:submission_format) { [] }
2021
let(:submission_email) { "submissions@example.gov.uk" }
2122
let(:from_email_address) { "govukforms@example.gov.uk" }
23+
let(:available_languages) { %i[en] }
2224

2325
let(:output) { StringIO.new }
2426
let(:logger) do
@@ -158,7 +160,7 @@
158160
allow(AwsSesFormSubmissionMailer).to receive(:submission_email).and_call_original
159161

160162
service.submit
161-
expected_csv_content = "Reference,Submitted at,What is the meaning of life?,Language\n#{submission_reference},2022-12-14T08:00:00+00:00,42,en\n"
163+
expected_csv_content = "Reference,Submitted at,What is the meaning of life?\n#{submission_reference},2022-12-14T08:00:00+00:00,42\n"
162164

163165
expect(AwsSesFormSubmissionMailer).to have_received(:submission_email).with(
164166
answer_content_html: "<h3>What is the meaning of life?</h3><p>42</p>",
@@ -187,7 +189,7 @@
187189

188190
service.submit
189191

190-
expected_csv_content = "Reference,Submitted at,#{question.question_text},Language\n#{submission_reference},2022-12-14T08:00:00+00:00,#{question.email_filename},en\n"
192+
expected_csv_content = "Reference,Submitted at,#{question.question_text}\n#{submission_reference},2022-12-14T08:00:00+00:00,#{question.email_filename}\n"
191193

192194
expect(AwsSesFormSubmissionMailer).to have_received(:submission_email).with(
193195
answer_content_html: "<h3>#{question.question_text}</h3><p>#{I18n.t('mailer.submission.file_attached', filename: question.email_filename)}</p>",
@@ -203,6 +205,22 @@
203205
end
204206
end
205207
end
208+
209+
context "when the submission is Welsh and the form is multilingual" do
210+
let(:submission_locale) { "cy" }
211+
let(:available_languages) { %i[en cy] }
212+
213+
it "calls AwsSesFormSubmissionMailer with a CSV file with language set to 'cy'" do
214+
allow(AwsSesFormSubmissionMailer).to receive(:submission_email).and_call_original
215+
216+
service.submit
217+
expected_csv_content = "Reference,Submitted at,What is the meaning of life?,Language\n#{submission_reference},2022-12-14T08:00:00+00:00,42,cy\n"
218+
219+
expect(AwsSesFormSubmissionMailer).to have_received(:submission_email).with(
220+
hash_including(files: { "govuk_forms_a_great_form_#{submission_reference}.csv" => expected_csv_content }),
221+
).once
222+
end
223+
end
206224
end
207225

208226
context "when the submission type is email with json" do
@@ -223,6 +241,21 @@
223241

224242
service.submit
225243
end
244+
245+
context "when the submission is Welsh" do
246+
let(:submission_locale) { "cy" }
247+
let(:available_languages) { %i[en cy] }
248+
249+
it "calls AwsSesFormSubmissionMailer with a JSON file with language set to 'cy'" do
250+
allow(AwsSesFormSubmissionMailer).to receive(:submission_email).and_call_original
251+
252+
service.submit
253+
254+
expect(AwsSesFormSubmissionMailer).to have_received(:submission_email).with(
255+
hash_including(files: { "govuk_forms_a_great_form_#{submission_reference}.json" => satisfy { |json| JSON.parse(json)["language"] == "cy" } }),
256+
).once
257+
end
258+
end
226259
end
227260

228261
context "when the submission type is email with csv and json" do

spec/services/s3_submission_service_spec.rb

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
submission_format:,
1313
s3_bucket_name:,
1414
s3_bucket_aws_account_id:,
15-
s3_bucket_region:)
15+
s3_bucket_region:,
16+
available_languages:)
1617
end
1718
let(:submission_type) { "s3" }
1819
let(:submission_format) { %w[csv] }
@@ -32,6 +33,7 @@
3233
let(:question) { build :text, question_text: "What is the meaning of life?", text: "42" }
3334
let(:step) { build :step, question: }
3435
let(:is_preview) { false }
36+
let(:available_languages) { %i[en] }
3537

3638
describe "#submit" do
3739
let(:mock_credentials) { { foo: "bar" } }
@@ -66,7 +68,7 @@
6668
context "when the submission format is CSV" do
6769
it "calls put_object with a CSV file and filename" do
6870
expected_key_name = "form_submissions/#{form.id}/#{expected_timestamp}_#{submission_reference}/form_submission.csv"
69-
expected_csv_content = "Reference,Submitted at,What is the meaning of life?,Language\n#{submission_reference},2022-09-14T08:24:34+01:00,42,en\n"
71+
expected_csv_content = "Reference,Submitted at,What is the meaning of life?\n#{submission_reference},2022-09-14T08:24:34+01:00,42\n"
7072
expect(mock_s3_client).to receive(:put_object).with(
7173
{
7274
body: expected_csv_content,
@@ -78,6 +80,18 @@
7880

7981
service.submit
8082
end
83+
84+
context "when the submssion is Welsh" do
85+
let(:submission_locale) { "cy" }
86+
let(:available_languages) { %i[en cy] }
87+
88+
it "generates the submission CSV with the language field" do
89+
expected_csv_content = "Reference,Submitted at,What is the meaning of life?,Language\n#{submission_reference},2022-09-14T08:24:34+01:00,42,cy\n"
90+
expect(mock_s3_client).to receive(:put_object).with(hash_including(body: expected_csv_content))
91+
92+
service.submit
93+
end
94+
end
8195
end
8296

8397
context "when the submission format is JSON" do
@@ -97,6 +111,17 @@
97111

98112
service.submit
99113
end
114+
115+
context "when the submssion is Welsh" do
116+
let(:submission_locale) { "cy" }
117+
let(:available_languages) { %i[en cy] }
118+
119+
it "generates the submission JSON with the language field" do
120+
expect(mock_s3_client).to receive(:put_object).with(hash_including(body: satisfy { |args| JSON.parse(args)["language"] == "cy" }))
121+
122+
service.submit
123+
end
124+
end
100125
end
101126

102127
context "when the form has answered file upload questions" do
@@ -113,8 +138,8 @@
113138
context "when the submission format is CSV" do
114139
it "creates the CSV file with the expected filenames" do
115140
expected_key_name = "form_submissions/#{form.id}/#{expected_timestamp}_#{submission_reference}/form_submission.csv"
116-
expected_csv_content = "Reference,Submitted at,#{first_file_upload_question.question_text},#{second_file_upload_question.question_text},Language\n" \
117-
"#{submission_reference},2022-09-14T08:24:34+01:00,file.txt,file_1.txt,en\n"
141+
expected_csv_content = "Reference,Submitted at,#{first_file_upload_question.question_text},#{second_file_upload_question.question_text}\n" \
142+
"#{submission_reference},2022-09-14T08:24:34+01:00,file.txt,file_1.txt\n"
118143
expect(mock_s3_client).to receive(:put_object).with(
119144
{
120145
body: expected_csv_content,
@@ -192,7 +217,7 @@
192217

193218
it "calls put_object with the 'test_form_submissions/' key prefix" do
194219
expected_key_name = "test_form_submissions/#{form.id}/#{expected_timestamp}_#{submission_reference}/form_submission.csv"
195-
expected_csv_content = "Reference,Submitted at,#{question.question_text},Language\n#{submission_reference},2022-09-14T08:24:34+01:00,file.txt,en\n"
220+
expected_csv_content = "Reference,Submitted at,#{question.question_text}\n#{submission_reference},2022-09-14T08:24:34+01:00,file.txt\n"
196221
expect(mock_s3_client).to receive(:put_object).with({
197222
body: expected_csv_content,
198223
bucket: s3_bucket_name,

0 commit comments

Comments
 (0)