Skip to content

Commit 38b1814

Browse files
FeminismIsAwesomeIan Norris
andauthored
[5042] pull out a custom helper in favor of letting the docx gem mostly handle it instead
--------- Co-authored-by: Ian Norris <iannorris@Ians-MacBook-Air.local>
1 parent 9a44eb5 commit 38b1814

6 files changed

Lines changed: 158 additions & 319 deletions

File tree

spec/controllers/case_court_reports_controller_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require "rails_helper"
22

33
RSpec.describe CaseCourtReportsController, type: :controller do
4+
include DownloadHelpers
45
describe "GET index" do
56
context "when volunteer" do
67
it "successfully accesses 'Generate Court Report' page" do
@@ -155,9 +156,9 @@
155156

156157
get :show, params: {id: case_number, format: "docx"}
157158

158-
document_inspector = DocxInspector.new(docx_contents: response.body)
159+
docx_response = Docx::Document.open(StringIO.new(response.body))
159160

160-
expect(document_inspector.word_list_header_contains?("YOUR CASA ORG’S NUMBER")).to eq(true)
161+
expect(header_text(docx_response)).to include("YOUR CASA ORG’S NUMBER")
161162
end
162163
end
163164
context "when a custom template is set" do
@@ -180,9 +181,9 @@
180181

181182
get :show, params: {id: case_number, format: "docx"}
182183

183-
document_inspector = DocxInspector.new(docx_contents: response.body)
184+
download_docx = Docx::Document.open(StringIO.new(response.body))
184185

185-
expect(document_inspector.word_list_document_contains?("Did you forget to enter your court orders?")).to eq(true)
186+
expect(download_docx.paragraphs.map(&:to_s)).to include("Did you forget to enter your court orders?")
186187
end
187188
end
188189
end
@@ -227,9 +228,8 @@
227228

228229
get :show, params: {id: case_number, format: "docx"}
229230

230-
document_inspector = DocxInspector.new(docx_contents: response.body)
231-
232-
expect(document_inspector.word_list_header_contains?("YOUR CASA ORG’S NUMBER")).to eq(true)
231+
docx = Docx::Document.open(StringIO.new(response.body))
232+
expect(header_text(docx)).to include("YOUR CASA ORG’S NUMBER")
233233
end
234234
end
235235
context "when a custom template is set" do
@@ -252,9 +252,9 @@
252252

253253
get :show, params: {id: case_number, format: "docx"}
254254

255-
document_inspector = DocxInspector.new(docx_contents: response.body)
255+
download_docx = Docx::Document.open(StringIO.new(response.body))
256256

257-
expect(document_inspector.word_list_document_contains?("Did you forget to enter your court orders?")).to eq(true)
257+
expect(download_docx.paragraphs.map(&:to_s)).to include("Did you forget to enter your court orders?")
258258
end
259259
end
260260
end

spec/models/case_court_report_spec.rb

Lines changed: 106 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
require "sablon"
55

66
RSpec.describe CaseCourtReport, type: :model do
7+
include DownloadHelpers
78
let(:path_to_template) { Rails.root.join("app", "documents", "templates", "default_report_template.docx").to_s }
89
let(:path_to_report) { Rails.root.join("tmp", "test_report.docx").to_s }
910

@@ -107,7 +108,6 @@
107108
let(:contact_type) { create(:contact_type, name: document_data[:case_contact_type]) }
108109
let(:case_contact) { create(:case_contact, contact_made: false, occurred_at: document_data[:case_contact_time]) }
109110
let(:court_order) { create(:case_court_order, implementation_status: :partially_implemented) }
110-
let(:document_inspector) { DocxInspector.new(docx_contents: report.generate_to_string) }
111111

112112
before(:each) do
113113
casa_case_with_contacts.casa_org.update_attribute(:address, document_data[:org_address])
@@ -124,47 +124,79 @@
124124
end
125125

126126
it "displays the org address" do
127-
expect(document_inspector.word_list_header_contains?(document_data[:org_address])).to eq(true)
127+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
128+
expect(header_text(docx_response)).to include(document_data[:org_address])
128129
end
129130

130131
it "displays today's date formatted" do
131-
expect(document_inspector.word_list_document_contains?(Date.current.strftime("%B %-d, %Y"))).to eq(true)
132+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
133+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{Date.current.strftime("%B %-d, %Y")}.*/)
132134
end
133135

134136
it "displays the case hearing date date formatted" do
135-
expect(document_inspector.word_list_document_contains?(document_data[:case_hearing_date].strftime("%B %-d, %Y"))).to eq(true)
137+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
138+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{document_data[:case_hearing_date].strftime("%B %-d, %Y")}.*/)
136139
end
137140

138141
it "displays the case number" do
139-
expect(document_inspector.word_list_document_contains?(document_data[:case_number])).to eq(true)
142+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
143+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{document_data[:case_number]}.*/)
140144
end
141145

142-
it "displays th case contact type" do
143-
expect(document_inspector.word_list_document_contains?(document_data[:case_contact_type])).to eq(true)
146+
it "displays the case contact type" do
147+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
148+
149+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
150+
151+
expect(table_data).to include(/#{document_data[:case_contact_type]}.*/)
144152
end
145153

146-
it "displays the case contact tiime date formatted" do
147-
expect(document_inspector.word_list_document_contains?("#{document_data[:case_contact_time].strftime("%-m/%d")}*")).to eq(true)
154+
it "displays the case contact time date formatted" do
155+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
156+
157+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
158+
159+
expect(table_data).to include(/#{document_data[:case_contact_time].strftime("%-m/%d")}.*/)
148160
end
149161

150162
it "displays the text" do
151-
expect(document_inspector.word_list_document_contains?(document_data[:text])).to eq(true)
163+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
164+
165+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
166+
167+
expect(table_data).to include(/#{document_data[:text]}.*/)
152168
end
153169

154170
it "displays the order status" do
155-
expect(document_inspector.word_list_document_contains?("Partially implemented")).to eq(true) # Order Status
171+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
172+
173+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
174+
175+
expect(table_data).to include("Partially implemented")
156176
end
157177

158178
it "displays the volunteer name" do
159-
expect(document_inspector.word_list_document_contains?(document_data[:volunteer_name])).to eq(true)
179+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
180+
181+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
182+
183+
expect(table_data).to include(/#{document_data[:volunteer_name]}.*/)
160184
end
161185

162186
it "displays the volunteer case assignment date formatted" do
163-
expect(document_inspector.word_list_document_contains?(document_data[:volunteer_case_assignment_date].strftime("%B %-d, %Y"))).to eq(true)
187+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
188+
189+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
190+
191+
expect(table_data).to include(/#{document_data[:volunteer_case_assignment_date].strftime("%B %-d, %Y")}.*/)
164192
end
165193

166194
it "displayes the supervisor name" do
167-
expect(document_inspector.word_list_document_contains?(document_data[:supervisor_name])).to eq(true)
195+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
196+
197+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
198+
199+
expect(table_data).to include(/#{document_data[:supervisor_name]}.*/)
168200
end
169201
end
170202

@@ -199,7 +231,6 @@
199231
let(:contact_type) { create(:contact_type, name: document_data[:case_contact_type]) }
200232
let(:case_contact) { create(:case_contact, contact_made: false, occurred_at: document_data[:case_contact_time]) }
201233
let(:court_order) { create(:case_court_order, implementation_status: :partially_implemented) }
202-
let(:document_inspector) { DocxInspector.new(docx_contents: report.generate_to_string) }
203234

204235
before(:each) do
205236
casa_case.casa_org.update_attribute(:address, document_data[:org_address])
@@ -213,31 +244,52 @@
213244
end
214245

215246
it "displays today's date formatted" do
216-
expect(document_inspector.word_list_document_contains?(Date.current.strftime("%B %-d, %Y"))).to eq(true)
247+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
248+
249+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{Date.current.strftime("%B %-d, %Y")}.*/)
217250
end
218251

219252
it "displays the case hearing date formatted" do
220-
expect(document_inspector.word_list_document_contains?(document_data[:case_hearing_date].strftime("%B %-d, %Y"))).to eq(true)
253+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
254+
255+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{document_data[:case_hearing_date].strftime("%B %-d, %Y")}.*/)
221256
end
222257

223-
it "displays the case numbet" do
224-
expect(document_inspector.word_list_document_contains?(document_data[:case_number])).to eq(true)
258+
it "displays the case number" do
259+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
260+
expect(docx_response.paragraphs.map(&:to_s)).to include(/.*#{document_data[:case_number]}.*/)
225261
end
226262

227263
it "displays the case contact type" do
228-
expect(document_inspector.word_list_document_contains?(document_data[:case_contact_type])).to eq(true)
264+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
265+
266+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
267+
268+
expect(table_data).to include(document_data[:case_contact_type])
229269
end
230270

231271
it "displays the case contact time formatted" do
232-
expect(document_inspector.word_list_document_contains?("#{document_data[:case_contact_time].strftime("%-m/%d")}*")).to eq(true)
272+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
273+
274+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
275+
276+
expect(table_data).to include(document_data[:case_contact_time].strftime("%-m/%d*"))
233277
end
234278

235279
it "displays the test" do
236-
expect(document_inspector.word_list_document_contains?(document_data[:text])).to eq(true)
280+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
281+
282+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
283+
284+
expect(table_data).to include("This text shall not be strikingly similar to other text in the document")
237285
end
238286

239287
it "displays the order status" do
240-
expect(document_inspector.word_list_document_contains?("Partially implemented")).to eq(true) # Order Status
288+
docx_response = Docx::Document.open(StringIO.new(report.generate_to_string))
289+
290+
table_data = docx_response.tables.map { |t| t.rows.map(&:cells).flatten.map(&:to_s) }.flatten
291+
292+
expect(table_data).to include("Partially implemented")
241293
end
242294
end
243295
end
@@ -262,10 +314,10 @@
262314

263315
describe "when court orders has different implementation statuses" do
264316
let(:casa_case) { create(:casa_case, case_number: "Sample-Case-12345") }
265-
let(:court_order_implemented) { create(:case_court_order, casa_case: casa_case, text: "K6N-ce8|NuXnht(", implementation_status: :implemented) }
266-
let(:court_order_unimplemented) { create(:case_court_order, casa_case: casa_case, text: "'q\"tE1LP-9W>,2)", implementation_status: :unimplemented) }
267-
let(:court_order_partially_implemented) { create(:case_court_order, casa_case: casa_case, text: "ZmCw@w@\d`&roct", implementation_status: :partially_implemented) }
268-
let(:court_order_not_specified) { create(:case_court_order, casa_case: casa_case, text: "(4WqOL7e'FRYd@%", implementation_status: nil) }
317+
let(:court_order_implemented) { create(:case_court_order, casa_case: casa_case, text: "an order that got done", implementation_status: :implemented) }
318+
let(:court_order_unimplemented) { create(:case_court_order, casa_case: casa_case, text: "an order that got not done", implementation_status: :unimplemented) }
319+
let(:court_order_partially_implemented) { create(:case_court_order, casa_case: casa_case, text: "an order that got kinda done", implementation_status: :partially_implemented) }
320+
let(:court_order_not_specified) { create(:case_court_order, casa_case: casa_case, text: "what is going on", implementation_status: nil) }
269321
let(:args) do
270322
{
271323
case_id: casa_case.id,
@@ -275,7 +327,6 @@
275327
end
276328
let(:context) { CaseCourtReportContext.new(args).context }
277329
let(:case_report) { CaseCourtReport.new(path_to_template: path_to_template, context: context) }
278-
let(:document_inspector) { DocxInspector.new(docx_contents: case_report.generate_to_string) }
279330

280331
before(:each) do
281332
casa_case.case_court_orders << court_order_implemented
@@ -285,39 +336,57 @@
285336
end
286337

287338
it "contains the case number" do
288-
expect(document_inspector.word_list_document_contains?(casa_case.case_number)).to eq(true)
339+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
340+
341+
expect(docx_response.paragraphs.map(&:to_s)).to include(/#{casa_case.case_number}*/)
289342
end
290343

291344
it "contains the court order text" do
292-
expect(document_inspector.word_list_document_contains?(court_order_implemented.text)).to eq(true)
345+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
346+
347+
expect(table_text(docx_response)).to include(/#{court_order_implemented.text}.*/)
293348
end
294349

295350
it "contains the exact value of 'Implemented'" do
296-
expect(document_inspector.word_list_document_contains?("Implemented")).to eq(true)
351+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
352+
353+
expect(table_text(docx_response)).to include(/Implemented.*/)
297354
end
298355

299356
it "contains the court order text" do
300-
expect(document_inspector.word_list_document_contains?(court_order_unimplemented.text)).to eq(true)
357+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
358+
359+
expect(table_text(docx_response)).to include(/#{court_order_unimplemented.text}.*/)
301360
end
302361

303362
it "contains the exact value of 'Unimplemented'" do
304-
expect(document_inspector.word_list_document_contains?("Unimplemented")).to eq(true)
363+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
364+
365+
expect(table_text(docx_response)).to include(/Unimplemented.*/)
305366
end
306367

307368
it "contains the court order text" do
308-
expect(document_inspector.word_list_document_contains?(court_order_partially_implemented.text)).to eq(true)
369+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
370+
371+
expect(table_text(docx_response)).to include(/#{court_order_partially_implemented.text}.*/)
309372
end
310373

311374
it "contains the exact value of 'Partially implemented'" do
312-
expect(document_inspector.word_list_document_contains?("Partially implemented")).to eq(true)
375+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
376+
377+
expect(table_text(docx_response)).to include(/Partially implemented.*/)
313378
end
314379

315380
it "contains the court order text" do
316-
expect(document_inspector.word_list_document_contains?(court_order_not_specified.text)).to eq(true)
381+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
382+
383+
expect(table_text(docx_response)).to include(/#{court_order_not_specified.text}.*/)
317384
end
318385

319386
it "contains the exact value of 'Not specified'" do
320-
expect(document_inspector.word_list_document_contains?("Not specified")).to eq(true)
387+
docx_response = Docx::Document.open(StringIO.new(case_report.generate_to_string))
388+
389+
expect(table_text(docx_response)).to include(/Not specified.*/)
321390
end
322391
end
323392
end

spec/requests/case_court_reports_spec.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require "rails_helper"
22

33
RSpec.describe "/case_court_reports", type: :request do
4+
include DownloadHelpers
45
let(:volunteer) { create(:volunteer, :with_cases_and_contacts, :with_assigned_supervisor) }
56

67
before do
@@ -162,9 +163,9 @@
162163
request_generate_court_report
163164
get JSON.parse(response.body)["link"]
164165

165-
document_inspector = DocxInspector.new(docx_contents: response.body)
166+
docx_response = Docx::Document.open(StringIO.new(response.body))
166167

167-
expect(document_inspector.word_list_header_contains?("YOUR CASA ORG’S NUMBER")).to eq(true)
168+
expect(header_text(docx_response)).to include("YOUR CASA ORG’S NUMBER")
168169
end
169170

170171
context "as a supervisor" do
@@ -203,9 +204,9 @@
203204
it "uses the custom template" do
204205
get JSON.parse(response.body)["link"]
205206

206-
document_inspector = DocxInspector.new(docx_contents: response.body)
207+
docx_response = Docx::Document.open(StringIO.new(response.body))
207208

208-
expect(document_inspector.word_list_document_contains?("Did you forget to enter your court orders?")).to eq(true)
209+
expect(docx_response.paragraphs.map(&:to_s)).to include("Did you forget to enter your court orders?")
209210
end
210211
end
211212
end
@@ -233,9 +234,9 @@
233234

234235
get JSON.parse(response.body)["link"]
235236

236-
document_inspector = DocxInspector.new(docx_contents: response.body)
237+
docx_response = Docx::Document.open(StringIO.new(response.body))
237238

238-
expect(document_inspector.word_list_document_contains?(I18n.l(user_different_timezone.at(server_time).to_date, format: :full, default: nil))).to eq(true)
239+
expect(docx_response.paragraphs.map(&:to_s)).to include("Date Written: #{I18n.l(user_different_timezone.at(server_time).to_date, format: :full, default: nil)}")
239240
end
240241
end
241242
end

0 commit comments

Comments
 (0)