-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathcsv_generator_spec.rb
More file actions
102 lines (90 loc) · 4.42 KB
/
csv_generator_spec.rb
File metadata and controls
102 lines (90 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
require "rails_helper"
RSpec.describe CsvGenerator do
let(:form) { build :form, id: 1 }
let(:page) { build :page }
let(:text_question) { build :text, :with_answer, question_text: "What is the meaning of life?" }
let(:name_question) { build :first_middle_last_name_question, question_text: "What is your name?" }
let(:file_question) { build :file, :with_uploaded_file, question_text: "Upload a file", original_filename: "test.txt" }
let(:first_step) { build :step, question: text_question }
let(:second_step) { build :step, question: name_question }
let(:third_step) { build :step, question: file_question }
let(:all_steps) { [first_step, second_step, third_step] }
let(:submission_reference) { Faker::Alphanumeric.alphanumeric(number: 8).upcase }
let(:timestamp) do
Time.use_zone("London") { Time.zone.local(2022, 9, 14, 8, 0o0, 0o0) }
end
describe "#generate_submission" do
subject(:csv) { described_class.generate_submission(all_steps:, submission_reference:, timestamp:, is_s3_submission:, language: :en) }
context "when the submission is being sent by email" do
let(:is_s3_submission) { false }
before do
file_question.populate_email_filename(submission_reference:)
end
it "returns a string" do
expect(csv).to be_a(String)
end
it "generates the submission CSV" do
expect(CSV.parse(csv)).to eq(
[
["Reference", "Submitted at", "What is the meaning of life?", "What is your name? - First name", "What is your name? - Last name", "Upload a file", "Language"],
[submission_reference, "2022-09-14T08:00:00+01:00", text_question.text, name_question.first_name, name_question.last_name, "test_#{submission_reference}.txt", "en"],
],
)
end
context "when a question is optional and answer is not provided" do
let(:text_question) { build :text, question_text: "What is the meaning of life?", is_optional: true, text: nil }
it "generates a CSV including blank column for unanswered optional question" do
expect(CSV.parse(csv)).to eq(
[
["Reference", "Submitted at", "What is the meaning of life?", "What is your name? - First name", "What is your name? - Last name", "Upload a file", "Language"],
[submission_reference, "2022-09-14T08:00:00+01:00", "", name_question.first_name, name_question.last_name, "test_#{submission_reference}.txt", "en"],
],
)
end
end
context "when there are repeated steps" do
let(:name_question_repeated) { build :first_middle_last_name_question, question_text: "What is your name?" }
let(:second_step) { build :repeatable_step, questions: [name_question, name_question_repeated] }
it "generates a CSV with headers containing suffixes for the repeated steps" do
expect(CSV.parse(csv)).to eq(
[
[
"Reference",
"Submitted at",
"What is the meaning of life?",
"What is your name? - First name - Answer 1",
"What is your name? - Last name - Answer 1",
"What is your name? - First name - Answer 2",
"What is your name? - Last name - Answer 2",
"Upload a file",
"Language",
],
[
submission_reference,
"2022-09-14T08:00:00+01:00",
text_question.text,
name_question.first_name,
name_question.last_name,
name_question_repeated.first_name,
name_question_repeated.last_name,
"test_#{submission_reference}.txt",
"en",
],
],
)
end
end
end
context "when the submission is being sent to an S3 bucket" do
let(:is_s3_submission) { true }
it "generates a CSV without including the submission reference in the filename for the file upload question" do
expect(CSV.parse(csv)).to eq(
[
["Reference", "Submitted at", "What is the meaning of life?", "What is your name? - First name", "What is your name? - Last name", "Upload a file", "Language"],
[submission_reference, "2022-09-14T08:00:00+01:00", text_question.text, name_question.first_name, name_question.last_name, file_question.original_filename, "en"],
],
)
end
end
end
end