cornucopia 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +51 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +16 -0
  6. data/LICENSE.TXT +22 -0
  7. data/README.md +341 -0
  8. data/Rakefile +18 -0
  9. data/cornucopia.gemspec +39 -0
  10. data/lib/cornucopia.rb +18 -0
  11. data/lib/cornucopia/capybara/finder_diagnostics.rb +536 -0
  12. data/lib/cornucopia/capybara/finder_extensions.rb +89 -0
  13. data/lib/cornucopia/capybara/install_finder_extensions.rb +105 -0
  14. data/lib/cornucopia/capybara/install_matcher_extensions.rb +39 -0
  15. data/lib/cornucopia/capybara/matcher_extensions.rb +83 -0
  16. data/lib/cornucopia/capybara/page_diagnostics.rb +228 -0
  17. data/lib/cornucopia/cucumber_hooks.rb +38 -0
  18. data/lib/cornucopia/factory_girl/dynamic_association.rb +14 -0
  19. data/lib/cornucopia/rspec_hooks.rb +37 -0
  20. data/lib/cornucopia/site_prism/element_extensions.rb +273 -0
  21. data/lib/cornucopia/site_prism/install_element_extensions.rb +23 -0
  22. data/lib/cornucopia/site_prism/page_application.rb +126 -0
  23. data/lib/cornucopia/source_files/collapse.gif +0 -0
  24. data/lib/cornucopia/source_files/cornucopia.css +162 -0
  25. data/lib/cornucopia/source_files/expand.gif +0 -0
  26. data/lib/cornucopia/source_files/index_base.html +10 -0
  27. data/lib/cornucopia/source_files/index_contents.html +2 -0
  28. data/lib/cornucopia/source_files/more_info.js +87 -0
  29. data/lib/cornucopia/source_files/report_base.html +10 -0
  30. data/lib/cornucopia/source_files/report_contents.html +3 -0
  31. data/lib/cornucopia/spinach_hooks.rb +51 -0
  32. data/lib/cornucopia/util/configuration.rb +493 -0
  33. data/lib/cornucopia/util/configured_report.rb +520 -0
  34. data/lib/cornucopia/util/file_asset.rb +46 -0
  35. data/lib/cornucopia/util/generic_settings.rb +37 -0
  36. data/lib/cornucopia/util/log_capture.rb +97 -0
  37. data/lib/cornucopia/util/pretty_formatter.rb +580 -0
  38. data/lib/cornucopia/util/report_builder.rb +474 -0
  39. data/lib/cornucopia/util/report_formatters.rb +11 -0
  40. data/lib/cornucopia/util/report_table.rb +195 -0
  41. data/lib/cornucopia/version.rb +3 -0
  42. data/lib/tasks/cornucopia_tasks.rake +4 -0
  43. data/spec/dummy/README.rdoc +28 -0
  44. data/spec/dummy/Rakefile +6 -0
  45. data/spec/dummy/app/assets/images/.keep +0 -0
  46. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  47. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  48. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  49. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  50. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  51. data/spec/dummy/app/mailers/.keep +0 -0
  52. data/spec/dummy/app/models/.keep +0 -0
  53. data/spec/dummy/app/models/concerns/.keep +0 -0
  54. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  55. data/spec/dummy/bin/bundle +3 -0
  56. data/spec/dummy/bin/rails +4 -0
  57. data/spec/dummy/bin/rake +4 -0
  58. data/spec/dummy/config.ru +4 -0
  59. data/spec/dummy/config/application.rb +27 -0
  60. data/spec/dummy/config/boot.rb +5 -0
  61. data/spec/dummy/config/cucumber.yml +8 -0
  62. data/spec/dummy/config/database.yml +37 -0
  63. data/spec/dummy/config/environment.rb +5 -0
  64. data/spec/dummy/config/environments/development.rb +29 -0
  65. data/spec/dummy/config/environments/production.rb +80 -0
  66. data/spec/dummy/config/environments/test.rb +36 -0
  67. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  68. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  69. data/spec/dummy/config/initializers/inflections.rb +16 -0
  70. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  71. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  72. data/spec/dummy/config/initializers/session_store.rb +3 -0
  73. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  74. data/spec/dummy/config/locales/en.yml +23 -0
  75. data/spec/dummy/config/routes.rb +56 -0
  76. data/spec/dummy/db/schema.rb +16 -0
  77. data/spec/dummy/features/support/env.rb +66 -0
  78. data/spec/dummy/lib/assets/.keep +0 -0
  79. data/spec/dummy/lib/tasks/cucumber.rake +65 -0
  80. data/spec/dummy/public/404.html +58 -0
  81. data/spec/dummy/public/422.html +58 -0
  82. data/spec/dummy/public/500.html +57 -0
  83. data/spec/dummy/public/favicon.ico +0 -0
  84. data/spec/dummy/script/cucumber +10 -0
  85. data/spec/fixtures/sample_page.html +150 -0
  86. data/spec/lib/capybara/finder_diagnostics_spec.rb +517 -0
  87. data/spec/lib/capybara/finder_extensions_spec.rb +328 -0
  88. data/spec/lib/capybara/page_diagnostics_spec.rb +277 -0
  89. data/spec/lib/site_prism/element_extensions_spec.rb +290 -0
  90. data/spec/lib/site_prism/page_application_spec.rb +81 -0
  91. data/spec/lib/util/configuration_spec.rb +254 -0
  92. data/spec/lib/util/configured_report_spec.rb +1058 -0
  93. data/spec/lib/util/file_asset_spec.rb +86 -0
  94. data/spec/lib/util/generic_settings_spec.rb +48 -0
  95. data/spec/lib/util/log_capture_spec.rb +151 -0
  96. data/spec/lib/util/pretty_formatter_spec.rb +694 -0
  97. data/spec/lib/util/report_builder_spec.rb +983 -0
  98. data/spec/lib/util/report_formatters_spec.rb +13 -0
  99. data/spec/lib/util/report_table_exception_spec.rb +21 -0
  100. data/spec/lib/util/report_table_spec.rb +319 -0
  101. data/spec/pages/cornucopia_report_app.rb +10 -0
  102. data/spec/pages/google/email_page.rb +22 -0
  103. data/spec/pages/google/login_page.rb +25 -0
  104. data/spec/rails_helper.rb +43 -0
  105. data/spec/sample_report.rb +45 -0
  106. data/spec/spec_helper.rb +81 -0
  107. metadata +410 -0
@@ -0,0 +1,1058 @@
1
+ require "spec_helper"
2
+ require ::File.expand_path("../../../lib/cornucopia/util/configured_report", File.dirname(__FILE__))
3
+
4
+ class SubTestClass
5
+ @sub_basic_variable
6
+ @sub_overridden_variable
7
+
8
+ def initialize
9
+ @sub_basic_variable = "sub basic variable"
10
+ @sub_overridden_variable = "sub overridden variable"
11
+ end
12
+
13
+ def sub_overridden_variable
14
+ "sub processed variable"
15
+ end
16
+ end
17
+
18
+ class TestPoint < Struct.new(:x, :y)
19
+ end
20
+
21
+ class TestClass
22
+ @basic_variable
23
+ @overridden_variable
24
+ @sub_class_variable
25
+ @hash_variable
26
+ @nil_variable
27
+ @struct_variable
28
+
29
+ def initialize
30
+ @basic_variable = "basic variable"
31
+ @overridden_variable = "overridden variable"
32
+ @sub_class_variable = SubTestClass.new
33
+ @hash_variable = {
34
+ key_1: "value",
35
+ "another key" => "another value"
36
+ }
37
+ @array_variable = [1, "b", :fred_sym]
38
+ @nil_variable = nil
39
+ @struct_variable = TestPoint.new(rand(0..1_000), rand(0..1_000))
40
+ end
41
+
42
+ def overridden_variable
43
+ "processed variable"
44
+ end
45
+ end
46
+
47
+ describe Cornucopia::Util::ConfiguredReport do
48
+ let(:simple_report) { Cornucopia::Util::ConfiguredReport.new }
49
+ let(:test) { TestClass.new }
50
+
51
+ around(:each) do |example|
52
+ expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
53
+
54
+ begin
55
+ example.run
56
+ ensure
57
+ Cornucopia::Util::ReportBuilder.current_report.close if (Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report"))
58
+
59
+ FileUtils.rm_rf Rails.root.join("cornucopia_report/")
60
+ end
61
+ end
62
+
63
+ describe "#get_instance_variable" do
64
+ it "gets the instance variable" do
65
+ expect(simple_report.get_instance_variable(test, :@basic_variable, "basic_variable")).to be == "basic variable"
66
+ end
67
+
68
+ it "gets the getter function if there is one" do
69
+ expect(simple_report.get_instance_variable(test, :@overridden_variable, "overridden_variable")).
70
+ to be == "processed variable"
71
+ end
72
+ end
73
+
74
+ describe "#split_full_field_symbol" do
75
+ it "splits a list by __" do
76
+ expect(simple_report.split_full_field_symbol(:var1__var2__var3)).to be == [:var1, :var2, :var3]
77
+ end
78
+
79
+ it "splits a list by __, and can handle varaibles with _" do
80
+ expect(simple_report.split_full_field_symbol(:var1___var2__var3)).to be == [:var1, :_var2, :var3]
81
+ end
82
+
83
+ it "splits a list by __, and can handle varaibles with __" do
84
+ expect(simple_report.split_full_field_symbol(:var1____var2__var3)).to be == [:var1, :__var2, :var3]
85
+ end
86
+
87
+ it "splits a list by __, and can handle varaibles with ____" do
88
+ expect(simple_report.split_full_field_symbol(:var1______var2__var3)).to be == [:var1, :____var2, :var3]
89
+ end
90
+
91
+ it "can handle arbitrary _ and depths" do
92
+ results = []
93
+
94
+ rand(5..20).times do |index|
95
+ sub_symbol = Faker::Lorem.word
96
+ if rand(5) == 0 || index == 0
97
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
98
+ end
99
+
100
+ results << sub_symbol.to_sym
101
+ end
102
+
103
+ expect(simple_report.split_full_field_symbol(results.join("__").to_sym)).to be == results
104
+ end
105
+ end
106
+
107
+ describe "#split_field_symbols" do
108
+ it "returns [] when passed nil" do
109
+ expect(simple_report.split_field_symbols(nil)).to be == []
110
+ end
111
+
112
+ it "calls #split_full_field_symbol for every element in an array" do
113
+ results = []
114
+ source = []
115
+
116
+ rand(5..20).times do
117
+ sub_results = []
118
+ rand(5..20).times do
119
+ sub_symbol = Faker::Lorem.word
120
+ if rand(5) == 0
121
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
122
+ end
123
+
124
+ sub_results << sub_symbol.to_sym
125
+ end
126
+ results << { report_element: sub_results }
127
+ source << sub_results.join("__")
128
+ end
129
+
130
+ expect(simple_report.split_field_symbols(source)).to be == results
131
+ end
132
+ end
133
+
134
+ describe "#find_variable_in_set" do
135
+ it "finds variables that are in the set" do
136
+ results = []
137
+
138
+ rand(5..20).times do
139
+ sub_results = []
140
+ rand(5..20).times do
141
+ sub_symbol = Faker::Lorem.word
142
+ if rand(5) == 0
143
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
144
+ end
145
+
146
+ sub_results << sub_symbol.to_sym
147
+ end
148
+
149
+ results << { report_element: sub_results }
150
+ end
151
+
152
+ set_test = results.sample
153
+ expect(simple_report.find_variable_in_set(results, set_test[:report_element][0..-2], set_test[:report_element][-1])).
154
+ to be == set_test
155
+ end
156
+
157
+ it "does not find variables that are only partial matches" do
158
+ results = []
159
+
160
+ rand(5..20).times do
161
+ sub_results = []
162
+ rand(5..20).times do
163
+ sub_symbol = Faker::Lorem.word
164
+ if rand(5) == 0
165
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
166
+ end
167
+
168
+ sub_results << sub_symbol.to_sym
169
+ end
170
+
171
+ results << { report_element: sub_results }
172
+ end
173
+
174
+ set_test = results.sample[:report_element]
175
+ len = rand(0..set_test.length - 3)
176
+
177
+ expect(simple_report.find_variable_in_set(results, set_test[0..len], set_test[len + 1])).to be_falsey
178
+ end
179
+
180
+ it "does not find variables that are not in the set" do
181
+ results = []
182
+
183
+ rand(5..20).times do
184
+ sub_results = []
185
+ rand(5..20).times do
186
+ sub_symbol = Faker::Lorem.word
187
+ if rand(5) == 0
188
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
189
+ end
190
+
191
+ sub_results << sub_symbol.to_sym
192
+ end
193
+
194
+ results << { report_element: sub_results }
195
+ end
196
+
197
+ # There is a slim, but statistically unlikely chance that
198
+ # there will be another item in results with the first set
199
+ # of words identical, except for the last word.
200
+ # I'll take this risk.
201
+ set_test = results.sample[:report_element]
202
+ begin
203
+ test_var = Faker::Lorem.word
204
+ end while test_var == set_test[-1]
205
+
206
+ expect(simple_report.find_variable_in_set(results, set_test[0..-2], test_var)).to be_falsey
207
+ end
208
+
209
+ it "is used by #expand_variable_inline?" do
210
+ results = []
211
+ source = []
212
+
213
+ rand(5..20).times do
214
+ sub_results = []
215
+ rand(5..20).times do
216
+ sub_symbol = Faker::Lorem.word
217
+ if rand(5) == 0
218
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
219
+ end
220
+
221
+ sub_results << sub_symbol.to_sym
222
+ end
223
+
224
+ results << sub_results
225
+ source << sub_results.join("__")
226
+ end
227
+
228
+ set_test = results.sample
229
+ simple_report.expand_inline_fields = source
230
+ expect(simple_report.expand_variable_inline?(set_test[0..-2], set_test[-1])).to be_truthy
231
+ end
232
+
233
+ it "is used by #expand_variable?" do
234
+ results = []
235
+ source = []
236
+
237
+ rand(5..20).times do
238
+ sub_results = []
239
+ rand(5..20).times do
240
+ sub_symbol = Faker::Lorem.word
241
+ if rand(5) == 0
242
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
243
+ end
244
+
245
+ sub_results << sub_symbol.to_sym
246
+ end
247
+
248
+ results << sub_results
249
+ source << sub_results.join("__")
250
+ end
251
+
252
+ set_test = results.sample
253
+ simple_report.expand_inline_fields = source
254
+ expect(simple_report.expand_variable?(set_test[0..-2], set_test[-1])).to be_truthy
255
+ end
256
+
257
+ it "is used by #expand_variable?" do
258
+ results = []
259
+ source = []
260
+
261
+ rand(5..20).times do
262
+ sub_results = []
263
+ rand(5..20).times do
264
+ sub_symbol = Faker::Lorem.word
265
+ if rand(5) == 0
266
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
267
+ end
268
+
269
+ sub_results << sub_symbol.to_sym
270
+ end
271
+
272
+ results << sub_results
273
+ source << sub_results.join("__")
274
+ end
275
+
276
+ set_test = results.sample
277
+ simple_report.expand_fields = source
278
+ expect(simple_report.expand_variable?(set_test[0..-2], set_test[-1])).to be_truthy
279
+ end
280
+
281
+ it "is used by #exclude_variable?" do
282
+ results = []
283
+ source = []
284
+
285
+ rand(5..20).times do
286
+ sub_results = []
287
+ rand(5..20).times do
288
+ sub_symbol = Faker::Lorem.word
289
+ if rand(5) == 0
290
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
291
+ end
292
+
293
+ sub_results << sub_symbol.to_sym
294
+ end
295
+
296
+ results << sub_results
297
+ source << sub_results.join("__")
298
+ end
299
+
300
+ set_test = results.sample
301
+ simple_report.exclude_fields = source
302
+ expect(simple_report.exclude_variable?(set_test[0..-2], set_test[-1])).to be_truthy
303
+ end
304
+
305
+ it "supports wildcards as the last field to match" do
306
+ results = []
307
+
308
+ rand(5..20).times do
309
+ sub_results = []
310
+ rand(5..20).times do
311
+ sub_symbol = Faker::Lorem.word
312
+ if rand(5) == 0
313
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
314
+ end
315
+
316
+ sub_results << sub_symbol.to_sym
317
+ end
318
+
319
+ results << { report_element: sub_results }
320
+ end
321
+
322
+ # There is a slim, but statistically unlikely chance that
323
+ # there will be another item in results with the first set
324
+ # of words identical, except for the last word.
325
+ # I'll take this risk.
326
+ rand_pos = rand(0..results.length - 1)
327
+ set_test = results[rand_pos][:report_element].clone
328
+ results[rand_pos][:report_element][-1] = "*".to_sym
329
+
330
+ expect(simple_report.find_variable_in_set(results, set_test[0..-2], set_test[-1])).to be_truthy
331
+ end
332
+
333
+ it "supports wildcards as any field to match" do
334
+ results = []
335
+
336
+ rand(5..20).times do
337
+ sub_results = []
338
+ rand(5..20).times do
339
+ sub_symbol = Faker::Lorem.word
340
+ if rand(5) == 0
341
+ sub_symbol = (("_" * rand(1..10)) + sub_symbol)
342
+ end
343
+
344
+ sub_results << sub_symbol.to_sym
345
+ end
346
+
347
+ results << { report_element: sub_results }
348
+ end
349
+
350
+ # There is a slim, but statistically unlikely chance that
351
+ # there will be another item in results with the first set
352
+ # of words identical, except for the last word.
353
+ # I'll take this risk.
354
+
355
+ rand_pos = rand(0..results.length - 1)
356
+ set_test = results[rand_pos][:report_element].clone
357
+
358
+ results[rand_pos][:report_element][rand(0..results[rand_pos][:report_element].length - 1)] = "*".to_sym
359
+
360
+ expect(simple_report.find_variable_in_set(results, set_test[0..-2], set_test[-1])).to be_truthy
361
+ end
362
+ end
363
+
364
+ describe "#export_field_record" do
365
+ it "takes a passed in parent" do
366
+ string_val = "string"
367
+
368
+ Cornucopia::Util::ReportTable.new do |report_table|
369
+ expect(report_table).to receive(:write_stats).with(:string_val, "string", {})
370
+
371
+ simple_report.export_field_record({ report_element: [:string_val] },
372
+ string_val,
373
+ :string_val,
374
+ report_table,
375
+ 0,
376
+ report_object_set: true)
377
+ end
378
+ end
379
+
380
+ it "takes a parent that is an instance variable" do
381
+ Cornucopia::Util::ReportTable.new do |report_table|
382
+ expect(report_table).to receive(:write_stats).with(:overridden_variable, "processed variable", {})
383
+
384
+ simple_report.export_field_record({ report_element: [:test, :overridden_variable] },
385
+ test,
386
+ :test,
387
+ report_table,
388
+ 1)
389
+ end
390
+ end
391
+
392
+ it "deals with the variable we're fetching being the instance variable" do
393
+ Cornucopia::Util::ReportTable.new do |report_table|
394
+ expect(report_table).to receive(:write_stats).with(:overridden_variable, "processed variable", {})
395
+
396
+ simple_report.export_field_record({ report_element: [:test, :overridden_variable] },
397
+ test,
398
+ :test,
399
+ report_table,
400
+ 1)
401
+ end
402
+ end
403
+
404
+ it "outputs the variable .to_s" do
405
+ Cornucopia::Util::ReportTable.new do |report_table|
406
+ expect(report_table).to receive(:write_stats).with(:overridden_variable, "processed variable", {})
407
+
408
+ simple_report.export_field_record({ report_element: [:test, :overridden_variable, :to_s] },
409
+ test,
410
+ :test,
411
+ report_table,
412
+ 1)
413
+ end
414
+ end
415
+
416
+ it "finds the parent object if it is a member function" do
417
+ Cornucopia::Util::ReportTable.new do |report_table|
418
+ expect(report_table).to receive(:write_stats).with(:overridden_variable, "processed variable", {})
419
+
420
+ simple_report.export_field_record({ report_element: [:test, :overridden_variable] },
421
+ test,
422
+ :test,
423
+ report_table,
424
+ 1)
425
+ end
426
+ end
427
+
428
+ it "finds the parent object if it is accessible via []" do
429
+ hash = { my_hash_key: "hash key" }
430
+ Cornucopia::Util::ReportTable.new do |report_table|
431
+ expect(report_table).to receive(:write_stats).with(:my_hash_key, "hash key", {})
432
+
433
+ simple_report.export_field_record({ report_element: [:hash, :my_hash_key] },
434
+ hash,
435
+ :hash,
436
+ report_table,
437
+ 1)
438
+ end
439
+ end
440
+
441
+ it "finds the parent object if it is an array index expanded" do
442
+ array = [1, 2, 3]
443
+
444
+ Cornucopia::Util::ReportTable.new do |report_table|
445
+ expect(report_table).to receive(:write_stats).with("0".to_sym, 1, {})
446
+
447
+ simple_report.export_field_record({ report_element: [:array, 0.to_s.to_sym] },
448
+ array,
449
+ :array,
450
+ report_table,
451
+ 1,
452
+ { expanded_field: true })
453
+ end
454
+ end
455
+
456
+ it "finds the parent object if it is an array index expanded inline and puts the right value out" do
457
+ array = [1, 2, 3]
458
+ simple_report.expand_inline_fields = [:array]
459
+
460
+ Cornucopia::Util::ReportTable.new do |report_table|
461
+ expect(report_table).to receive(:write_stats).with("array[0]", 1, {})
462
+
463
+ simple_report.export_field_record({ report_element: [:array, 0.to_s.to_sym] },
464
+ array,
465
+ :array,
466
+ report_table,
467
+ 1)
468
+ end
469
+ end
470
+
471
+ it "finds the parent object if it is an array index exported directly" do
472
+ array = [1, 2, 3]
473
+
474
+ Cornucopia::Util::ReportTable.new do |report_table|
475
+ expect(report_table).to receive(:write_stats).with("array[0]", 1, {})
476
+
477
+ simple_report.export_field_record({ report_element: [:array, 0.to_s.to_sym] },
478
+ array,
479
+ :array,
480
+ report_table,
481
+ 1)
482
+ end
483
+ end
484
+
485
+ it "outputs an error if it cannot find the parent object" do
486
+ Cornucopia::Util::ReportTable.new do |report_table|
487
+ expect(report_table).to receive(:write_stats).with("ERROR", "Could not identify field: hash__my_hash_key while exporting hash__my_hash_key")
488
+
489
+ simple_report.export_field_record({ report_element: [:hash, :my_hash_key] },
490
+ test,
491
+ :hash,
492
+ report_table,
493
+ 1)
494
+ end
495
+ end
496
+
497
+ it "expands leaf nodes" do
498
+ report_result_table = nil
499
+ Cornucopia::Util::ReportTable.new do |report_table|
500
+ report_result_table = report_table
501
+ simple_report.expand_fields = [:test]
502
+ simple_report.export_field_record({ report_element: [:test] },
503
+ test,
504
+ :test,
505
+ report_table,
506
+ 0,
507
+ report_object_set: true)
508
+ end
509
+
510
+ expect(report_result_table.full_table).to match(/\>\ntest\n\</)
511
+ expect(report_result_table.full_table).to match(/\>\nbasic_variable\n\</)
512
+ expect(report_result_table.full_table).to match(/\>basic variable\</)
513
+ expect(report_result_table.full_table).to match(/\>\noverridden_variable\n\</)
514
+ expect(report_result_table.full_table).to match(/\>processed variable\</)
515
+ expect(report_result_table.full_table).to match(/@sub_basic_variable=/)
516
+ expect(report_result_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
517
+ expect(report_result_table.full_table).to match(/@sub_overridden_variable=/)
518
+ expect(report_result_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
519
+ end
520
+
521
+ it "expands leaf nodes inline" do
522
+ Cornucopia::Util::ReportTable.new do |report_table|
523
+ simple_report.expand_fields = [:test]
524
+ simple_report.expand_inline_fields = [:test]
525
+ simple_report.export_field_record({ report_element: [:test] },
526
+ test,
527
+ :test,
528
+ report_table,
529
+ 0,
530
+ report_object_set: true)
531
+
532
+ expect(report_table.full_table).not_to match(/\>\ntest\n\</)
533
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
534
+ expect(report_table.full_table).to match(/\>basic variable\</)
535
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
536
+ expect(report_table.full_table).to match(/\>processed variable\</)
537
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
538
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
539
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
540
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
541
+ end
542
+ end
543
+
544
+ it "expands instance variables" do
545
+ Cornucopia::Util::ReportTable.new do |report_table|
546
+ simple_report.expand_fields = [:test]
547
+ simple_report.export_field_record({ report_element: [:test] },
548
+ test,
549
+ :test,
550
+ report_table,
551
+ 0,
552
+ report_object_set: true)
553
+
554
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
555
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
556
+ expect(report_table.full_table).to match(/\>basic variable\</)
557
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
558
+ expect(report_table.full_table).to match(/\>processed variable\</)
559
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
560
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
561
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
562
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
563
+ end
564
+ end
565
+
566
+ it "expands instance variables inline" do
567
+ Cornucopia::Util::ReportTable.new do |report_table|
568
+ simple_report.expand_fields = [:test, :test__sub_class_variable]
569
+ simple_report.expand_inline_fields = [:test, :test__sub_class_variable]
570
+ simple_report.export_field_record({ report_element: [:test] },
571
+ test,
572
+ :test,
573
+ report_table,
574
+ 0,
575
+ report_object_set: true)
576
+
577
+ expect(report_table.full_table).not_to match(/\>\ntest\n\</)
578
+ expect(report_table.full_table).not_to match(/\>\n@sub_class_variable\n\</)
579
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
580
+ expect(report_table.full_table).to match(/\>basic variable\</)
581
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
582
+ expect(report_table.full_table).to match(/\>processed variable\</)
583
+ expect(report_table.full_table).to match(/\>\nsub_basic_variable\n\</)
584
+ expect(report_table.full_table).to match(/\>sub basic variable\</)
585
+ expect(report_table.full_table).to match(/\>\nsub_overridden_variable\n\</)
586
+ expect(report_table.full_table).to match(/\>sub processed variable\</)
587
+ end
588
+ end
589
+
590
+ it "excludes variables" do
591
+ Cornucopia::Util::ReportTable.new do |report_table|
592
+ simple_report.expand_fields = [:test]
593
+ simple_report.exclude_fields = [:test__sub_class_variable]
594
+ simple_report.export_field_record({ report_element: [:test] },
595
+ test,
596
+ :test,
597
+ report_table,
598
+ 0,
599
+ report_object_set: true)
600
+
601
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
602
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
603
+ expect(report_table.full_table).to match(/\>basic variable\</)
604
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
605
+ expect(report_table.full_table).to match(/\>processed variable\</)
606
+ expect(report_table.full_table).not_to match(/@sub_basic_variable=/)
607
+ expect(report_table.full_table).not_to match(/\&quot\;sub basic variable\&quot\;/)
608
+ expect(report_table.full_table).not_to match(/@sub_overridden_variable=/)
609
+ expect(report_table.full_table).not_to match(/\&quot\;sub overridden variable\&quot\;/)
610
+ end
611
+ end
612
+
613
+ it "outputs log files" do
614
+ expect(Cornucopia::Util::LogCapture).to receive(:capture_logs).and_return(nil)
615
+
616
+ Cornucopia::Util::ReportTable.new do |report_table|
617
+ simple_report.export_field_record({ report_element: [:logs] },
618
+ test,
619
+ :logs,
620
+ report_table,
621
+ 0)
622
+ end
623
+ end
624
+
625
+ it "outputs diagnostics" do
626
+ expect(Cornucopia::Capybara::PageDiagnostics).to receive(:dump_details_in_table).and_return(nil)
627
+
628
+ Cornucopia::Util::ReportTable.new do |report_table|
629
+ simple_report.export_field_record({ report_element: [:capybara_page_diagnostics] },
630
+ test,
631
+ :capybara_page_diagnostics,
632
+ report_table,
633
+ 0)
634
+ end
635
+ end
636
+
637
+ it "expands a hash" do
638
+ Cornucopia::Util::ReportTable.new do |report_table|
639
+ simple_report.expand_fields = [:test, :test__hash_variable]
640
+ simple_report.export_field_record({ report_element: [:test] },
641
+ test,
642
+ :test,
643
+ report_table,
644
+ 0,
645
+ report_object_set: true)
646
+
647
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
648
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
649
+ expect(report_table.full_table).to match(/\>basic variable\</)
650
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
651
+ expect(report_table.full_table).to match(/\>processed variable\</)
652
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
653
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
654
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
655
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
656
+ expect(report_table.full_table).to match(/\>\nhash_variable\n\</)
657
+ expect(report_table.full_table).to match(/\>\nkey_1\n\</)
658
+ expect(report_table.full_table).to match(/\>value\</)
659
+ expect(report_table.full_table).to match(/\>\nanother key\n\</)
660
+ expect(report_table.full_table).to match(/\>another value\</)
661
+ end
662
+ end
663
+
664
+ it "doesn't expand a field if it isn't directly exported" do
665
+ Cornucopia::Util::ReportTable.new do |report_table|
666
+ simple_report.expand_fields = [:test, :test__hash_variable]
667
+ simple_report.exclude_fields = [:test__hash_variable]
668
+ simple_report.export_field_record({ report_element: [:test] },
669
+ test,
670
+ :test,
671
+ report_table,
672
+ 0,
673
+ report_object_set: true)
674
+
675
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
676
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
677
+ expect(report_table.full_table).to match(/\>basic variable\</)
678
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
679
+ expect(report_table.full_table).to match(/\>processed variable\</)
680
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
681
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
682
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
683
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
684
+ expect(report_table.full_table).not_to match(/\>\nhash_variable\n\</)
685
+ expect(report_table.full_table).not_to match(/\>\nkey_1\n\</)
686
+ expect(report_table.full_table).not_to match(/\>value\</)
687
+ expect(report_table.full_table).not_to match(/\>\nanother key\n\</)
688
+ expect(report_table.full_table).not_to match(/\>another value\</)
689
+ end
690
+ end
691
+
692
+ it "expands an array" do
693
+ Cornucopia::Util::ReportTable.new do |report_table|
694
+ simple_report.expand_fields = [:test, :test__array_variable]
695
+ simple_report.export_field_record({ report_element: [:test] },
696
+ test,
697
+ :test,
698
+ report_table,
699
+ 0,
700
+ report_object_set: true)
701
+
702
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
703
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
704
+ expect(report_table.full_table).to match(/\>basic variable\</)
705
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
706
+ expect(report_table.full_table).to match(/\>processed variable\</)
707
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
708
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
709
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
710
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
711
+ expect(report_table.full_table).to match(/\>\nhash_variable\n\</)
712
+ expect(report_table.full_table).not_to match(/\>\nkey_1\n\</)
713
+ expect(report_table.full_table).not_to match(/\>value\</)
714
+ expect(report_table.full_table).not_to match(/\>\nanother key\n\</)
715
+ expect(report_table.full_table).not_to match(/\>another value\</)
716
+ expect(report_table.full_table).to match(/\>\narray_variable\n\</)
717
+ expect(report_table.full_table).to match(/\>\n0\n\</)
718
+ expect(report_table.full_table).to match(/\>1\n\</)
719
+ expect(report_table.full_table).to match(/\>\n1\n\</)
720
+ expect(report_table.full_table).to match(/\>b\</)
721
+ expect(report_table.full_table).to match(/\>\n2\n\</)
722
+ expect(report_table.full_table).to match(/\>:fred_sym\n\</)
723
+ expect(report_table.full_table).to match(/\>\nstruct_variable\n\</)
724
+ expect(report_table.full_table).not_to match(/\>\nx\n\</)
725
+ expect(report_table.full_table).not_to match(/\>#{test.instance_variable_get(:@struct_variable).x}\n\</)
726
+ expect(report_table.full_table).not_to match(/\>\ny\n\</)
727
+ expect(report_table.full_table).not_to match(/\>#{test.instance_variable_get(:@struct_variable).y}\n\</)
728
+ end
729
+ end
730
+
731
+ it "expands a structure" do
732
+ Cornucopia::Util::ReportTable.new do |report_table|
733
+ simple_report.expand_fields = [:test, :test__struct_variable]
734
+ simple_report.export_field_record({ report_element: [:test] },
735
+ test,
736
+ :test,
737
+ report_table,
738
+ 0,
739
+ report_object_set: true)
740
+
741
+ expect(report_table.full_table).to match(/\>\ntest\n\</)
742
+ expect(report_table.full_table).to match(/\>\nbasic_variable\n\</)
743
+ expect(report_table.full_table).to match(/\>basic variable\</)
744
+ expect(report_table.full_table).to match(/\>\noverridden_variable\n\</)
745
+ expect(report_table.full_table).to match(/\>processed variable\</)
746
+ expect(report_table.full_table).to match(/@sub_basic_variable=/)
747
+ expect(report_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
748
+ expect(report_table.full_table).to match(/@sub_overridden_variable=/)
749
+ expect(report_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
750
+ expect(report_table.full_table).to match(/\>\nhash_variable\n\</)
751
+ expect(report_table.full_table).not_to match(/\>\nkey_1\n\</)
752
+ expect(report_table.full_table).not_to match(/\>value\</)
753
+ expect(report_table.full_table).not_to match(/\>\nanother key\n\</)
754
+ expect(report_table.full_table).not_to match(/\>another value\</)
755
+ expect(report_table.full_table).to match(/\>\narray_variable\n\</)
756
+ expect(report_table.full_table).not_to match(/\>\n0\n\</)
757
+ expect(report_table.full_table).not_to match(/\>1\n\</)
758
+ expect(report_table.full_table).not_to match(/\>\n1\n\</)
759
+ expect(report_table.full_table).not_to match(/\>b\</)
760
+ expect(report_table.full_table).not_to match(/\>\n2\n\</)
761
+ expect(report_table.full_table).not_to match(/\>:fred_sym\n\</)
762
+ expect(report_table.full_table).to match(/\>\nstruct_variable\n\</)
763
+ expect(report_table.full_table).to match(/\>\nx\n\</)
764
+ expect(report_table.full_table).to match(/\>#{test.instance_variable_get(:@struct_variable).x}\n\</)
765
+ expect(report_table.full_table).to match(/\>\ny\n\</)
766
+ expect(report_table.full_table).to match(/\>#{test.instance_variable_get(:@struct_variable).y}\n\</)
767
+ end
768
+ end
769
+ end
770
+
771
+ describe "#add_report_objects" do
772
+ it "adds report objects" do
773
+ report = Cornucopia::Util::ConfiguredReport.new
774
+
775
+ expect(report.instance_variable_get(:@report_objects)[:test_object]).not_to be
776
+ expect(report.instance_variable_get(:@report_objects)[:another_object]).not_to be
777
+
778
+ report.add_report_objects({ test_object: "a test object", another_object: "another object" })
779
+
780
+ expect(report.instance_variable_get(:@report_objects)[:test_object]).to be == "a test object"
781
+ expect(report.instance_variable_get(:@report_objects)[:another_object]).to be == "another object"
782
+ end
783
+
784
+ it "updates report objects" do
785
+ report = Cornucopia::Util::ConfiguredReport.new
786
+
787
+ expect(report.instance_variable_get(:@report_objects)[:test_object]).not_to be
788
+ expect(report.instance_variable_get(:@report_objects)[:another_object]).not_to be
789
+
790
+ report.add_report_objects({ test_object: "a test object", another_object: "another object" })
791
+
792
+ expect(report.instance_variable_get(:@report_objects)[:test_object]).to be == "a test object"
793
+ expect(report.instance_variable_get(:@report_objects)[:another_object]).to be == "another object"
794
+
795
+ report.add_report_objects({ another_object: "still another object", third_object: "A third object" })
796
+
797
+ expect(report.instance_variable_get(:@report_objects)[:test_object]).to be == "a test object"
798
+ expect(report.instance_variable_get(:@report_objects)[:another_object]).to be == "still another object"
799
+ expect(report.instance_variable_get(:@report_objects)[:third_object]).to be == "A third object"
800
+ end
801
+ end
802
+
803
+ describe "#generate_report" do
804
+ it "can generate a report" do
805
+ report = Cornucopia::Util::ReportBuilder.current_report
806
+ builder = Cornucopia::Util::ConfiguredReport.new
807
+ builder.add_report_objects({ fred: "fred", test: test })
808
+
809
+ builder.expand_fields = [:test, :test__hash_variable]
810
+
811
+ builder.min_fields = [:test]
812
+
813
+ builder.generate_report(report)
814
+
815
+ full_table = File.read(report.report_contents_page_name)
816
+
817
+ expect(full_table).not_to match(/\"cornucopia-show-hide-section\"/)
818
+ expect(full_table).to match(/\>\ntest\n\</)
819
+ expect(full_table).to match(/\>\nbasic_variable\n\</)
820
+ expect(full_table).to match(/\>basic variable\</)
821
+ expect(full_table).to match(/\>\noverridden_variable\n\</)
822
+ expect(full_table).to match(/\>processed variable\</)
823
+ expect(full_table).to match(/@sub_basic_variable=/)
824
+ expect(full_table).to match(/\&quot\;sub basic variable\&quot\;/)
825
+ expect(full_table).to match(/@sub_overridden_variable=/)
826
+ expect(full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
827
+ expect(full_table).to match(/\>\nhash_variable\n\</)
828
+ expect(full_table).to match(/\>\nkey_1\n\</)
829
+ expect(full_table).to match(/\>value\</)
830
+ expect(full_table).to match(/\>\nanother key\n\</)
831
+ expect(full_table).to match(/\>another value\</)
832
+ end
833
+
834
+ it "allows adding to a report" do
835
+ report = Cornucopia::Util::ReportBuilder.current_report
836
+ builder = Cornucopia::Util::ConfiguredReport.new
837
+ builder.add_report_objects({ fred: "fred", test: test })
838
+
839
+ builder.expand_fields = [:test, :test__hash_variable]
840
+
841
+ builder.min_fields = [:test]
842
+
843
+ builder.generate_report(report) do |in_report, table|
844
+ table.write_stats("Something_Extra", "A value")
845
+ end
846
+
847
+ full_table = File.read(report.report_contents_page_name)
848
+
849
+ expect(full_table).to match(/\"cornucopia-show-hide-section\"/)
850
+ expect(full_table).to match(/\>\ntest\n\</)
851
+ expect(full_table).to match(/\>\nSomething_Extra\n\</)
852
+ expect(full_table).to match(/\>A value\</)
853
+ expect(full_table).to match(/\>\nbasic_variable\n\</)
854
+ expect(full_table).to match(/\>basic variable\</)
855
+ expect(full_table).to match(/\>\noverridden_variable\n\</)
856
+ expect(full_table).to match(/\>processed variable\</)
857
+ expect(full_table).to match(/@sub_basic_variable=/)
858
+ expect(full_table).to match(/\&quot\;sub basic variable\&quot\;/)
859
+ expect(full_table).to match(/@sub_overridden_variable=/)
860
+ expect(full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
861
+ expect(full_table).to match(/\>\nhash_variable\n\</)
862
+ expect(full_table).to match(/\>\nkey_1\n\</)
863
+ expect(full_table).to match(/\>value\</)
864
+ expect(full_table).to match(/\>\nanother key\n\</)
865
+ expect(full_table).to match(/\>another value\</)
866
+ end
867
+
868
+ it "creates a sub-section for secondary information" do
869
+ report = Cornucopia::Util::ReportBuilder.current_report
870
+ builder = Cornucopia::Util::ConfiguredReport.new
871
+ builder.add_report_objects({ fred: "fred", test: test })
872
+
873
+ builder.expand_fields = [:test, :test__hash_variable]
874
+
875
+ builder.min_fields = [:test__basic_variable]
876
+ builder.exclude_fields = [:test__basic_variable]
877
+ builder.more_info_fields = [:test]
878
+
879
+ builder.generate_report(report)
880
+
881
+ full_table = File.read(report.report_contents_page_name)
882
+
883
+ expect(full_table).to match(/\"cornucopia-show-hide-section\"/)
884
+ expect(full_table).to match(/\>\ntest\n\</)
885
+ expect(full_table).to match(/\>\nbasic_variable\n\</)
886
+ expect(full_table).to match(/\>basic variable\</)
887
+ expect(full_table).to match(/\>\noverridden_variable\n\</)
888
+ expect(full_table).to match(/\>processed variable\</)
889
+ expect(full_table).to match(/@sub_basic_variable=/)
890
+ expect(full_table).to match(/\&quot\;sub basic variable\&quot\;/)
891
+ expect(full_table).to match(/@sub_overridden_variable=/)
892
+ expect(full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
893
+ expect(full_table).to match(/\>\nhash_variable\n\</)
894
+ expect(full_table).to match(/\>\nkey_1\n\</)
895
+ expect(full_table).to match(/\>value\</)
896
+ expect(full_table).to match(/\>\nanother key\n\</)
897
+ expect(full_table).to match(/\>another value\</)
898
+ end
899
+
900
+ it "creates a report within an existing table" do
901
+ report = Cornucopia::Util::ReportBuilder.current_report
902
+ the_table = nil
903
+
904
+ Cornucopia::Util::ReportTable.new do |report_table|
905
+ the_table = report_table
906
+
907
+ builder = Cornucopia::Util::ConfiguredReport.new
908
+ builder.add_report_objects({ fred: "fred", test: test })
909
+
910
+ builder.expand_fields = [:test, :test__hash_variable]
911
+
912
+ builder.min_fields = [:test__basic_variable]
913
+ builder.exclude_fields = [:test__basic_variable]
914
+ builder.more_info_fields = [:test]
915
+
916
+ builder.generate_report(report, report_table: report_table)
917
+ end
918
+
919
+ report.close
920
+
921
+ expect(the_table.full_table).not_to match(/\"cornucopia-show-hide-section\"/)
922
+ expect(the_table.full_table).to match(/\>\ntest\n\</)
923
+ expect(the_table.full_table).to match(/\>\nbasic_variable\n\</)
924
+ expect(the_table.full_table).to match(/\>basic variable\</)
925
+ expect(the_table.full_table).to match(/\>\noverridden_variable\n\</)
926
+ expect(the_table.full_table).to match(/\>processed variable\</)
927
+ expect(the_table.full_table).to match(/@sub_basic_variable=/)
928
+ expect(the_table.full_table).to match(/\&quot\;sub basic variable\&quot\;/)
929
+ expect(the_table.full_table).to match(/@sub_overridden_variable=/)
930
+ expect(the_table.full_table).to match(/\&quot\;sub overridden variable\&quot\;/)
931
+ expect(the_table.full_table).to match(/\>\nhash_variable\n\</)
932
+ expect(the_table.full_table).to match(/\>\nkey_1\n\</)
933
+ expect(the_table.full_table).to match(/\>value\</)
934
+ expect(the_table.full_table).to match(/\>\nanother key\n\</)
935
+ expect(the_table.full_table).to match(/\>another value\</)
936
+ end
937
+
938
+ it "does not export values that don't exist on the object" do
939
+ Cornucopia::Util::ReportTable.new do |report_table|
940
+ simple_report.expand_fields = [:test, :test__hash_variable]
941
+
942
+ simple_report.export_field_record({ report_element: [:test,
943
+ :hash_variable,
944
+ :fake_hash_value] },
945
+ test,
946
+ :test,
947
+ report_table,
948
+ 0,
949
+ report_object_set: true)
950
+
951
+ expect(report_table.full_table).not_to match(/fake_hash_value/)
952
+ end
953
+ end
954
+ end
955
+
956
+ describe "leaf options" do
957
+ describe "#find_leaf_options" do
958
+ it "only finds an element in the array" do
959
+ leaf_options = []
960
+ leaf_elements = rand(40..50).times.map { Faker::Lorem.word.to_sym }.uniq
961
+ num_items = rand(5..10)
962
+ leaf_pos = 0
963
+ leaf_size = (leaf_elements.size - 1) / num_items
964
+
965
+ num_items.times do
966
+ some_options = { some_option: Faker::Lorem.sentence }
967
+ leaf_options << { report_element: leaf_elements[leaf_pos..leaf_pos + leaf_size - 1], report_options: some_options }
968
+ leaf_pos += leaf_size
969
+ end
970
+
971
+ rand_item = rand(0..leaf_pos - 1)
972
+
973
+ simple_report.leaf_options = leaf_options
974
+ expect(simple_report.find_leaf_options(leaf_elements[rand_item])).to be == leaf_options[rand_item / leaf_size]
975
+ expect(simple_report.find_leaf_options(leaf_elements[leaf_pos])).not_to be
976
+ end
977
+ end
978
+
979
+ it "uses leaf options" do
980
+ Cornucopia::Util::ReportTable.new do |report_table|
981
+ simple_report.leaf_options = [{ report_element: [:key_1], report_options: { fake_options: true } }]
982
+
983
+ expect(report_table).to receive(:write_stats).with(:key_1, "value", fake_options: true)
984
+
985
+ simple_report.export_field_record({ report_element: [:test,
986
+ :hash_variable,
987
+ :key_1] },
988
+ test,
989
+ :test,
990
+ report_table,
991
+ 0,
992
+ report_object_set: true)
993
+ end
994
+ end
995
+
996
+ it "uses node options over leaf options" do
997
+ Cornucopia::Util::ReportTable.new do |report_table|
998
+ simple_report.leaf_options = [{ report_element: [:key_1], report_options: { fake_options: true } }]
999
+
1000
+ expect(report_table).to receive(:write_stats).with(:key_1, "value", real_options: true)
1001
+
1002
+ simple_report.export_field_record({ report_element: [:test,
1003
+ :hash_variable,
1004
+ :key_1],
1005
+ report_options: { real_options: true } },
1006
+ test,
1007
+ :test,
1008
+ report_table,
1009
+ 0,
1010
+ report_object_set: true)
1011
+ end
1012
+ end
1013
+
1014
+ it "outputs a custom label" do
1015
+ Cornucopia::Util::ReportTable.new do |report_table|
1016
+ custom_label = Faker::Lorem.word
1017
+ simple_report.leaf_options = [{ report_element: [:key_1], report_options: { fake_options: true } }]
1018
+
1019
+ expect(report_table).
1020
+ to receive(:write_stats).with(custom_label, "value", real_options: true, label: custom_label)
1021
+
1022
+ simple_report.export_field_record({ report_element: [:test,
1023
+ :hash_variable,
1024
+ :key_1],
1025
+ report_options: { label: custom_label, real_options: true } },
1026
+ test,
1027
+ :test,
1028
+ report_table,
1029
+ 0,
1030
+ report_object_set: true)
1031
+ end
1032
+ end
1033
+
1034
+ it "sends expand options to children nodes" do
1035
+ Cornucopia::Util::ReportTable.new do |report_table|
1036
+ simple_report.expand_fields = [:test, :test__hash_variable]
1037
+ simple_report.leaf_options = [{ report_element: [:key_1], report_options: { fake_options: true } }]
1038
+
1039
+ total_count = 0
1040
+ allow_any_instance_of(Cornucopia::Util::ReportTable).to receive(:write_stats) do |label, value, options|
1041
+ total_count += 1 if label == :key_1 && value == "value" && options == { real_options: true }
1042
+ total_count += 1 if label == "another key" && value == "another value"
1043
+ end.and_call_original
1044
+
1045
+ simple_report.export_field_record({ report_element: [:test,
1046
+ :hash_variable],
1047
+ report_options: { exclude_code_block: true } },
1048
+ test,
1049
+ :test,
1050
+ report_table,
1051
+ 0,
1052
+ report_object_set: true)
1053
+
1054
+ expect(report_table.full_table).not_to match /\<code\>/
1055
+ end
1056
+ end
1057
+ end
1058
+ end