cornucopia 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +51 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +16 -0
- data/LICENSE.TXT +22 -0
- data/README.md +341 -0
- data/Rakefile +18 -0
- data/cornucopia.gemspec +39 -0
- data/lib/cornucopia.rb +18 -0
- data/lib/cornucopia/capybara/finder_diagnostics.rb +536 -0
- data/lib/cornucopia/capybara/finder_extensions.rb +89 -0
- data/lib/cornucopia/capybara/install_finder_extensions.rb +105 -0
- data/lib/cornucopia/capybara/install_matcher_extensions.rb +39 -0
- data/lib/cornucopia/capybara/matcher_extensions.rb +83 -0
- data/lib/cornucopia/capybara/page_diagnostics.rb +228 -0
- data/lib/cornucopia/cucumber_hooks.rb +38 -0
- data/lib/cornucopia/factory_girl/dynamic_association.rb +14 -0
- data/lib/cornucopia/rspec_hooks.rb +37 -0
- data/lib/cornucopia/site_prism/element_extensions.rb +273 -0
- data/lib/cornucopia/site_prism/install_element_extensions.rb +23 -0
- data/lib/cornucopia/site_prism/page_application.rb +126 -0
- data/lib/cornucopia/source_files/collapse.gif +0 -0
- data/lib/cornucopia/source_files/cornucopia.css +162 -0
- data/lib/cornucopia/source_files/expand.gif +0 -0
- data/lib/cornucopia/source_files/index_base.html +10 -0
- data/lib/cornucopia/source_files/index_contents.html +2 -0
- data/lib/cornucopia/source_files/more_info.js +87 -0
- data/lib/cornucopia/source_files/report_base.html +10 -0
- data/lib/cornucopia/source_files/report_contents.html +3 -0
- data/lib/cornucopia/spinach_hooks.rb +51 -0
- data/lib/cornucopia/util/configuration.rb +493 -0
- data/lib/cornucopia/util/configured_report.rb +520 -0
- data/lib/cornucopia/util/file_asset.rb +46 -0
- data/lib/cornucopia/util/generic_settings.rb +37 -0
- data/lib/cornucopia/util/log_capture.rb +97 -0
- data/lib/cornucopia/util/pretty_formatter.rb +580 -0
- data/lib/cornucopia/util/report_builder.rb +474 -0
- data/lib/cornucopia/util/report_formatters.rb +11 -0
- data/lib/cornucopia/util/report_table.rb +195 -0
- data/lib/cornucopia/version.rb +3 -0
- data/lib/tasks/cornucopia_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +27 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cucumber.yml +8 -0
- data/spec/dummy/config/database.yml +37 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/db/schema.rb +16 -0
- data/spec/dummy/features/support/env.rb +66 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/lib/tasks/cucumber.rake +65 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/cucumber +10 -0
- data/spec/fixtures/sample_page.html +150 -0
- data/spec/lib/capybara/finder_diagnostics_spec.rb +517 -0
- data/spec/lib/capybara/finder_extensions_spec.rb +328 -0
- data/spec/lib/capybara/page_diagnostics_spec.rb +277 -0
- data/spec/lib/site_prism/element_extensions_spec.rb +290 -0
- data/spec/lib/site_prism/page_application_spec.rb +81 -0
- data/spec/lib/util/configuration_spec.rb +254 -0
- data/spec/lib/util/configured_report_spec.rb +1058 -0
- data/spec/lib/util/file_asset_spec.rb +86 -0
- data/spec/lib/util/generic_settings_spec.rb +48 -0
- data/spec/lib/util/log_capture_spec.rb +151 -0
- data/spec/lib/util/pretty_formatter_spec.rb +694 -0
- data/spec/lib/util/report_builder_spec.rb +983 -0
- data/spec/lib/util/report_formatters_spec.rb +13 -0
- data/spec/lib/util/report_table_exception_spec.rb +21 -0
- data/spec/lib/util/report_table_spec.rb +319 -0
- data/spec/pages/cornucopia_report_app.rb +10 -0
- data/spec/pages/google/email_page.rb +22 -0
- data/spec/pages/google/login_page.rb +25 -0
- data/spec/rails_helper.rb +43 -0
- data/spec/sample_report.rb +45 -0
- data/spec/spec_helper.rb +81 -0
- metadata +410 -0
@@ -0,0 +1,983 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require ::File.expand_path("../../../lib/cornucopia/util/report_builder", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
describe Cornucopia::Util::ReportBuilder do
|
5
|
+
let(:current_report) { Cornucopia::Util::ReportBuilder.new_report }
|
6
|
+
let(:custom_report) { Cornucopia::Util::ReportBuilder.new_report("cool_report", "diag_reports") }
|
7
|
+
|
8
|
+
report_variation_settings = [
|
9
|
+
{ report: :current_report,
|
10
|
+
index_folder: "cornucopia_report",
|
11
|
+
sub_folder: "cornucopia_report" },
|
12
|
+
{ report: :custom_report,
|
13
|
+
index_folder: "diag_reports",
|
14
|
+
sub_folder: "cool_report" }
|
15
|
+
]
|
16
|
+
|
17
|
+
# Make sure that all tests start clean and get cleaned up afterwards...
|
18
|
+
around(:each) do |example|
|
19
|
+
expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
|
20
|
+
expect(File.directory?(Rails.root.join("diag_reports/"))).to be_falsey
|
21
|
+
|
22
|
+
begin
|
23
|
+
example.run
|
24
|
+
ensure
|
25
|
+
if (Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report"))
|
26
|
+
Cornucopia::Util::ReportBuilder.current_report.close
|
27
|
+
end
|
28
|
+
|
29
|
+
FileUtils.rm_rf Rails.root.join("cornucopia_report/")
|
30
|
+
FileUtils.rm_rf Rails.root.join("diag_reports/")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#on_close" do
|
35
|
+
around(:each) do |example|
|
36
|
+
num_close_calls = Cornucopia::Util::ReportBuilder.class_variable_get("@@on_close_blocks").length
|
37
|
+
|
38
|
+
example.run
|
39
|
+
|
40
|
+
while num_close_calls != Cornucopia::Util::ReportBuilder.class_variable_get("@@on_close_blocks").length
|
41
|
+
Cornucopia::Util::ReportBuilder.class_variable_get("@@on_close_blocks").pop
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "calls each on_close block" do
|
46
|
+
report_results = []
|
47
|
+
|
48
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
49
|
+
report_results << 1
|
50
|
+
end
|
51
|
+
|
52
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
53
|
+
report_results << 2
|
54
|
+
end
|
55
|
+
|
56
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
57
|
+
report_results << 3
|
58
|
+
end
|
59
|
+
|
60
|
+
Cornucopia::Util::ReportBuilder.current_report.close
|
61
|
+
|
62
|
+
expect(report_results).to be == [1, 2, 3]
|
63
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
64
|
+
end
|
65
|
+
|
66
|
+
it "calls each on_close block even if an exception is thrown" do
|
67
|
+
report_results = []
|
68
|
+
|
69
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
70
|
+
report_results << 1
|
71
|
+
raise "1"
|
72
|
+
end
|
73
|
+
|
74
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
75
|
+
report_results << 2
|
76
|
+
raise "2"
|
77
|
+
end
|
78
|
+
|
79
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
80
|
+
report_results << 3
|
81
|
+
raise "3"
|
82
|
+
end
|
83
|
+
|
84
|
+
expect do
|
85
|
+
Cornucopia::Util::ReportBuilder.current_report.close
|
86
|
+
end.to raise_exception
|
87
|
+
|
88
|
+
expect(report_results).to be == [1, 2, 3]
|
89
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#escape_string" do
|
94
|
+
it "makes a string html_safe" do
|
95
|
+
expect(Cornucopia::Util::ReportBuilder.escape_string("test_value")).to be_html_safe
|
96
|
+
end
|
97
|
+
|
98
|
+
it "escapes html characters" do
|
99
|
+
expect(Cornucopia::Util::ReportBuilder.escape_string("<test_value>")).to be == "<test_value>"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#format_code_refs" do
|
104
|
+
it "does not alter a string without refs" do
|
105
|
+
sample_string = "This is a sample string /fred/george.html:45"
|
106
|
+
|
107
|
+
expect(Cornucopia::Util::ReportBuilder.format_code_refs(sample_string)).to be == sample_string
|
108
|
+
end
|
109
|
+
|
110
|
+
it "ensures that the string is html_safe" do
|
111
|
+
sample_string = "This is a sample string /fred/george.html:45"
|
112
|
+
|
113
|
+
expect(Cornucopia::Util::ReportBuilder.format_code_refs(sample_string)).to be_html_safe
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#root_folder" do
|
118
|
+
it "returns the rails root if it is available" do
|
119
|
+
expect(Cornucopia::Util::ReportBuilder.root_folder).to be == Rails.root
|
120
|
+
end
|
121
|
+
|
122
|
+
it "returns the pwd if Rails is not available" do
|
123
|
+
expect(Object).to receive(:const_defined?).with("Rails").and_return false
|
124
|
+
|
125
|
+
expect(Cornucopia::Util::ReportBuilder.root_folder).to be == FileUtils.pwd
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "#pretty_array" do
|
130
|
+
let(:array_values) { [
|
131
|
+
"Turner & Hooch",
|
132
|
+
"Barney Rubble",
|
133
|
+
"Harvey"
|
134
|
+
] }
|
135
|
+
|
136
|
+
it "ignores a non-array value" do
|
137
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_array("a string")).to be == "a string"
|
138
|
+
end
|
139
|
+
|
140
|
+
it "calls #pretty_format for a non-array value" do
|
141
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).once.and_call_original
|
142
|
+
|
143
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_array("a string")).to be_html_safe
|
144
|
+
end
|
145
|
+
|
146
|
+
it "calls #pretty_format for each element in the array" do
|
147
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).exactly(3).and_call_original
|
148
|
+
|
149
|
+
formatted_code = Cornucopia::Util::ReportBuilder.pretty_array(array_values)
|
150
|
+
|
151
|
+
expect(formatted_code).to be_html_safe
|
152
|
+
expect(formatted_code).to be == "Turner &amp; Hooch\nBarney Rubble\nHarvey"
|
153
|
+
end
|
154
|
+
|
155
|
+
it "calls #pretty_format on a sub-array after it is converted to a string" do
|
156
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).exactly(4).and_call_original
|
157
|
+
array_values << [1, 2, 3]
|
158
|
+
|
159
|
+
formatted_code = Cornucopia::Util::ReportBuilder.pretty_array(array_values)
|
160
|
+
|
161
|
+
expect(formatted_code).to be_html_safe
|
162
|
+
expect(formatted_code).to be == "Turner &amp; Hooch\nBarney Rubble\nHarvey\n[1, 2, 3]"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "#pretty_object" do
|
167
|
+
around(:each) do |example|
|
168
|
+
orig_timeout = Cornucopia::Util::Configuration.print_timeout_min
|
169
|
+
|
170
|
+
begin
|
171
|
+
Cornucopia::Util::Configuration.print_timeout_min = 2
|
172
|
+
example.run
|
173
|
+
ensure
|
174
|
+
Cornucopia::Util::Configuration.print_timeout_min = orig_timeout
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
it "returns a string as-is" do
|
179
|
+
test_object = "a string"
|
180
|
+
|
181
|
+
expect(test_object).not_to receive(:pretty_inspect)
|
182
|
+
expect(test_object).not_to receive(:to_s)
|
183
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
184
|
+
|
185
|
+
Cornucopia::Util::ReportBuilder.pretty_object(test_object)
|
186
|
+
end
|
187
|
+
|
188
|
+
it "calls pretty_inspect on most objects" do
|
189
|
+
test_object = { a: "b" }
|
190
|
+
|
191
|
+
expect(test_object).to receive(:pretty_inspect).and_call_original
|
192
|
+
expect(test_object).not_to receive(:to_s)
|
193
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
194
|
+
|
195
|
+
Cornucopia::Util::ReportBuilder.pretty_object(test_object)
|
196
|
+
end
|
197
|
+
|
198
|
+
it "times out after a long time" do
|
199
|
+
test_object = { a: "b" }
|
200
|
+
|
201
|
+
expect(test_object).to receive(:pretty_inspect) { sleep 60 }
|
202
|
+
expect(test_object).to receive(:to_s).and_call_original
|
203
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
204
|
+
|
205
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_object(test_object)).to be == "{:a=>\"b\"}"
|
206
|
+
end
|
207
|
+
|
208
|
+
it "times out after a long time with t_s too" do
|
209
|
+
test_object = { a: "b" }
|
210
|
+
|
211
|
+
expect(test_object).to receive(:pretty_inspect) { sleep 60 }
|
212
|
+
expect(test_object).to receive(:to_s) { sleep 60 }
|
213
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
214
|
+
|
215
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_object(test_object)).to be == "Timed out rendering"
|
216
|
+
end
|
217
|
+
|
218
|
+
it "calls to_s after an exception is raised" do
|
219
|
+
test_object = { a: "b" }
|
220
|
+
|
221
|
+
expect(test_object).to receive(:pretty_inspect) { raise Exception.new("This is an error") }
|
222
|
+
expect(test_object).to receive(:to_s).and_call_original
|
223
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
224
|
+
|
225
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_object(test_object)).to be == "{:a=>\"b\"}"
|
226
|
+
end
|
227
|
+
|
228
|
+
it "times out after an exception is raised" do
|
229
|
+
test_object = { a: "b" }
|
230
|
+
|
231
|
+
expect(test_object).to receive(:pretty_inspect) { raise Exception.new("This is an error") }
|
232
|
+
expect(test_object).to receive(:to_s) { sleep 60 }
|
233
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
234
|
+
|
235
|
+
expect(Cornucopia::Util::ReportBuilder.pretty_object(test_object)).to be == "Timed out rendering"
|
236
|
+
end
|
237
|
+
|
238
|
+
it "returns an array by formatting it" do
|
239
|
+
test_object = [:a, "b"]
|
240
|
+
|
241
|
+
expect(test_object).not_to receive(:pretty_inspect)
|
242
|
+
expect(test_object).not_to receive(:to_s)
|
243
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_array).and_call_original
|
244
|
+
|
245
|
+
Cornucopia::Util::ReportBuilder.pretty_object(test_object)
|
246
|
+
end
|
247
|
+
|
248
|
+
it "returns an object that cannot be inspected as a string" do
|
249
|
+
test_object = { a: "b" }
|
250
|
+
|
251
|
+
expect(test_object).to receive(:respond_to?).and_return false
|
252
|
+
|
253
|
+
expect(test_object).not_to receive(:pretty_inspect)
|
254
|
+
expect(test_object).to receive(:to_s).and_call_original
|
255
|
+
expect(Cornucopia::Util::ReportBuilder).not_to receive(:pretty_array)
|
256
|
+
|
257
|
+
Cornucopia::Util::ReportBuilder.pretty_object(test_object)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
it "should create a new report" do
|
262
|
+
orig_report = Cornucopia::Util::ReportBuilder.current_report
|
263
|
+
report = Cornucopia::Util::ReportBuilder.new_report
|
264
|
+
|
265
|
+
expect(report).to_not be == orig_report
|
266
|
+
|
267
|
+
alt_report = Cornucopia::Util::ReportBuilder.current_report
|
268
|
+
|
269
|
+
expect(report).to be == alt_report
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should create a new report if the current report doesn't match" do
|
273
|
+
orig_report = Cornucopia::Util::ReportBuilder.current_report
|
274
|
+
report = Cornucopia::Util::ReportBuilder.current_report("cool_report", "diag_reports")
|
275
|
+
|
276
|
+
expect(report).to_not be == orig_report
|
277
|
+
|
278
|
+
alt_report = Cornucopia::Util::ReportBuilder.current_report("cool_report", "diag_reports")
|
279
|
+
|
280
|
+
expect(report).to be == alt_report
|
281
|
+
|
282
|
+
alt_report = Cornucopia::Util::ReportBuilder.current_report("cool_report")
|
283
|
+
|
284
|
+
expect(report).to be == alt_report
|
285
|
+
|
286
|
+
alt_report = Cornucopia::Util::ReportBuilder.current_report
|
287
|
+
|
288
|
+
expect(report).to be == alt_report
|
289
|
+
end
|
290
|
+
|
291
|
+
describe "#folder_name_to_section_name" do
|
292
|
+
it "returns a special value for cornucopia_report" do
|
293
|
+
expect(Cornucopia::Util::ReportBuilder.folder_name_to_section_name("cornucopia_report")).
|
294
|
+
to be == "Feature Tests"
|
295
|
+
end
|
296
|
+
|
297
|
+
it "returns a special value for diagnostics_rspec_report" do
|
298
|
+
expect(Cornucopia::Util::ReportBuilder.folder_name_to_section_name("diagnostics_rspec_report")).
|
299
|
+
to be == "RSPEC Tests"
|
300
|
+
end
|
301
|
+
|
302
|
+
it "returns the passed in value if nothing else" do
|
303
|
+
value = Faker::Lorem.word
|
304
|
+
expect(Cornucopia::Util::ReportBuilder.folder_name_to_section_name("#{value}")).to be == value
|
305
|
+
end
|
306
|
+
|
307
|
+
it "returns the basename of the passed in value" do
|
308
|
+
value = Faker::Lorem.word
|
309
|
+
expect(Cornucopia::Util::ReportBuilder.folder_name_to_section_name("#{Faker::Lorem.word}/#{value}")).
|
310
|
+
to be == value
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
describe "#build_index_section_item" do
|
315
|
+
it "creates a list item with an anchor" do
|
316
|
+
result_string = Cornucopia::Util::ReportBuilder.build_index_section_item("harold/fred/george.html")
|
317
|
+
|
318
|
+
expect(result_string).to match /href=\"harold\/fred\/george.html\"/
|
319
|
+
expect(result_string).to match /\>harold\/fred\</
|
320
|
+
expect(result_string).to match /\<li\>/
|
321
|
+
expect(result_string).to match /\<\/li\>/
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
describe "#build_index_section" do
|
326
|
+
it "creates a list item with an anchor" do
|
327
|
+
a_title = Faker::Lorem.sentence
|
328
|
+
strings = Faker::Lorem.sentences(5)
|
329
|
+
strings.map! { |string| string.gsub(" ", "/") }
|
330
|
+
result_string = Cornucopia::Util::ReportBuilder.build_index_section(a_title, strings)
|
331
|
+
|
332
|
+
expect(result_string).to match /#{a_title}/
|
333
|
+
strings.each do |a_string|
|
334
|
+
expect(result_string).to match /href=\"#{a_string}\"/
|
335
|
+
expect(result_string).to match /\>#{File.dirname(a_string)}\</
|
336
|
+
end
|
337
|
+
expect(result_string).to match /\<ul.*?\>/
|
338
|
+
expect(result_string).to match /\<\/ul\>/
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
describe "#page_dump" do
|
343
|
+
it "outputs a text area with the page html_encoded" do
|
344
|
+
source_html = "<html>\n<body>\nThis is some & awesome text</body>\n</html>"
|
345
|
+
page_html = Cornucopia::Util::ReportBuilder.page_dump(source_html)
|
346
|
+
source_html = "".html_safe + source_html
|
347
|
+
|
348
|
+
expect(page_html).to match /\>#{source_html}\</
|
349
|
+
expect(page_html).to match /^\<textarea/
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
report_variation_settings.each do |report_settings|
|
354
|
+
index_folder = Rails.root.join("#{report_settings[:index_folder]}/")
|
355
|
+
report_folder = File.join(index_folder, "#{report_settings[:sub_folder]}/")
|
356
|
+
|
357
|
+
describe "When using #{report_settings[:report]}" do
|
358
|
+
it "should return a report" do
|
359
|
+
expect(send(report_settings[:report]).is_a?(Cornucopia::Util::ReportBuilder)).to be_truthy
|
360
|
+
end
|
361
|
+
|
362
|
+
describe "#index_folder_name" do
|
363
|
+
it "should create and return the folder for the base index file" do
|
364
|
+
folder_name = index_folder
|
365
|
+
index_folder_name = nil
|
366
|
+
|
367
|
+
expect(File.directory?(folder_name)).to be_falsey
|
368
|
+
|
369
|
+
begin
|
370
|
+
index_folder_name = send(report_settings[:report]).index_folder_name
|
371
|
+
|
372
|
+
expect(index_folder_name.to_s).to be == folder_name.to_s
|
373
|
+
expect(File.directory?(index_folder_name)).to be_truthy
|
374
|
+
ensure
|
375
|
+
FileUtils.rm_rf index_folder_name if index_folder_name
|
376
|
+
FileUtils.rm_rf folder_name
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
describe "#delete_old_folders" do
|
382
|
+
it "does nothing if there are too few old folders" do
|
383
|
+
folder_name = index_folder
|
384
|
+
|
385
|
+
expect(File.directory?(folder_name)).to be_falsey
|
386
|
+
|
387
|
+
begin
|
388
|
+
num_folders = rand(Cornucopia::Util::ReportBuilder::MAX_OLD_FOLDERS)
|
389
|
+
(1..num_folders).to_a.each do |report_index|
|
390
|
+
FileUtils.mkdir_p(File.join(folder_name, "#{report_settings[:sub_folder]}_#{report_index}"))
|
391
|
+
end
|
392
|
+
|
393
|
+
send(report_settings[:report]).delete_old_folders
|
394
|
+
|
395
|
+
(1..num_folders).to_a.each do |report_index|
|
396
|
+
expect(File.directory?(File.join(folder_name, "#{report_settings[:sub_folder]}_#{report_index}"))).to be_truthy
|
397
|
+
end
|
398
|
+
ensure
|
399
|
+
FileUtils.rm_rf folder_name
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
it "deletes the oldest folders (by name) till there are the right number of folders" do
|
404
|
+
folder_name = index_folder
|
405
|
+
|
406
|
+
expect(File.directory?(folder_name)).to be_falsey
|
407
|
+
|
408
|
+
begin
|
409
|
+
num_folders = Cornucopia::Util::ReportBuilder::MAX_OLD_FOLDERS + 1 + rand(4)
|
410
|
+
(1..num_folders).to_a.each do |report_index|
|
411
|
+
FileUtils.mkdir_p(File.join(folder_name, "#{report_settings[:sub_folder]}_#{report_index}"))
|
412
|
+
end
|
413
|
+
|
414
|
+
send(report_settings[:report]).delete_old_folders
|
415
|
+
|
416
|
+
(1..num_folders - Cornucopia::Util::ReportBuilder::MAX_OLD_FOLDERS).to_a.each do |report_index|
|
417
|
+
expect(File.directory?(File.join(folder_name, "#{report_settings[:sub_folder]}_#{report_index}"))).to be_falsey
|
418
|
+
end
|
419
|
+
(num_folders - Cornucopia::Util::ReportBuilder::MAX_OLD_FOLDERS + 1..num_folders).to_a.each do |report_index|
|
420
|
+
expect(File.directory?(File.join(folder_name, "#{report_settings[:sub_folder]}_#{report_index}"))).to be_truthy
|
421
|
+
end
|
422
|
+
ensure
|
423
|
+
FileUtils.rm_rf folder_name
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
it "returns the #report_base_page_name" do
|
429
|
+
expect(send(report_settings[:report]).report_base_page_name).
|
430
|
+
to be == File.join(report_folder, "index.html").to_s
|
431
|
+
end
|
432
|
+
|
433
|
+
it "returns the #index_base_page_name" do
|
434
|
+
expect(send(report_settings[:report]).index_base_page_name).to be == File.join(index_folder, "index.html").to_s
|
435
|
+
end
|
436
|
+
|
437
|
+
it "returns the #report_contents_page_name" do
|
438
|
+
expect(send(report_settings[:report]).report_contents_page_name).
|
439
|
+
to be == File.join(report_folder, "report_contents.html").to_s
|
440
|
+
end
|
441
|
+
|
442
|
+
it "returns the #index_contents_page_name" do
|
443
|
+
expect(send(report_settings[:report]).index_contents_page_name).
|
444
|
+
to be == File.join(index_folder, "report_contents.html").to_s
|
445
|
+
end
|
446
|
+
|
447
|
+
describe "#backup_report_folder" do
|
448
|
+
it "renames the report folder" do
|
449
|
+
test_time = Time.now
|
450
|
+
report = send(report_settings[:report])
|
451
|
+
report.instance_variable_set("@report_folder_name", report_folder)
|
452
|
+
expect(File).to receive(:ctime).with(File.join(report_folder, "index.html")).and_return(test_time)
|
453
|
+
|
454
|
+
FileUtils.mkdir_p(report_folder)
|
455
|
+
Cornucopia::Util::FileAsset.asset("index_base.html").add_file(File.join(report_folder, "index.html"))
|
456
|
+
|
457
|
+
report.backup_report_folder
|
458
|
+
|
459
|
+
expect(File.directory?(report_folder)).to be_falsey
|
460
|
+
expect(File.directory?(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}/"))).to be_truthy
|
461
|
+
|
462
|
+
FileUtils.rm_rf(report_folder)
|
463
|
+
end
|
464
|
+
|
465
|
+
it "deals with the unlikely event of a conflict" do
|
466
|
+
test_time = Time.now
|
467
|
+
report = send(report_settings[:report])
|
468
|
+
report.instance_variable_set("@report_folder_name", report_folder)
|
469
|
+
expect(File).to receive(:ctime).with(report_folder).and_return(test_time)
|
470
|
+
|
471
|
+
FileUtils.mkdir_p(report_folder)
|
472
|
+
FileUtils.mkdir_p(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}/"))
|
473
|
+
FileUtils.mkdir_p(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}_alt_1/"))
|
474
|
+
FileUtils.mkdir_p(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}_alt_2/"))
|
475
|
+
|
476
|
+
report.backup_report_folder
|
477
|
+
|
478
|
+
expect(File.directory?(report_folder)).to be_falsey
|
479
|
+
expect(File.directory?(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}_alt_1/"))).to be_truthy
|
480
|
+
expect(File.directory?(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}_alt_2/"))).to be_truthy
|
481
|
+
expect(File.directory?(File.join(index_folder, "#{report_settings[:sub_folder]}_#{test_time.strftime("%Y_%m_%d_%H_%M_%S")}_alt_3/"))).to be_truthy
|
482
|
+
|
483
|
+
FileUtils.rm_rf(report_folder)
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
describe "#rebuild_index_page" do
|
488
|
+
around(:each) do |example|
|
489
|
+
expect(File.directory?(Rails.root.join("coverage/"))).to be_falsey
|
490
|
+
|
491
|
+
begin
|
492
|
+
example.run
|
493
|
+
ensure
|
494
|
+
FileUtils.rm_rf Rails.root.join("coverage/")
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
it "creates the index file" do
|
499
|
+
current_report = send(report_settings[:report])
|
500
|
+
|
501
|
+
current_report.rebuild_index_page
|
502
|
+
|
503
|
+
expect(File.directory?(current_report.index_folder_name)).to be_truthy
|
504
|
+
expect(File.exists?(current_report.index_base_page_name)).to be_truthy
|
505
|
+
expect(File.exists?(File.join(current_report.index_folder_name, "cornucopia.css"))).to be_truthy
|
506
|
+
end
|
507
|
+
|
508
|
+
it "deletes the existing report_contents page" do
|
509
|
+
current_report = send(report_settings[:report])
|
510
|
+
|
511
|
+
FileUtils.mkdir_p current_report.index_folder_name
|
512
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
513
|
+
add_file(File.join(current_report.index_folder_name, "report_contents.html"))
|
514
|
+
|
515
|
+
pre_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
516
|
+
|
517
|
+
current_report.rebuild_index_page
|
518
|
+
|
519
|
+
post_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
520
|
+
expect(post_file).not_to be == pre_file
|
521
|
+
|
522
|
+
expect(post_file).not_to match /coverage/i
|
523
|
+
end
|
524
|
+
|
525
|
+
it "adds coverage if it exists" do
|
526
|
+
current_report = send(report_settings[:report])
|
527
|
+
|
528
|
+
FileUtils.mkdir_p Rails.root.join("coverage")
|
529
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").add_file(Rails.root.join("coverage/index.html"))
|
530
|
+
|
531
|
+
FileUtils.mkdir_p current_report.index_folder_name
|
532
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
533
|
+
add_file(File.join(current_report.index_folder_name, "report_contents.html"))
|
534
|
+
|
535
|
+
pre_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
536
|
+
|
537
|
+
current_report.rebuild_index_page
|
538
|
+
|
539
|
+
post_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
540
|
+
expect(post_file).not_to be == pre_file
|
541
|
+
|
542
|
+
expect(post_file).to match /coverage/i
|
543
|
+
expect(post_file).to match /coverage\/index.html/i
|
544
|
+
end
|
545
|
+
|
546
|
+
it "indexes folders properly" do
|
547
|
+
current_report = send(report_settings[:report])
|
548
|
+
base_folder = current_report.index_folder_name
|
549
|
+
|
550
|
+
folder_names = []
|
551
|
+
file_names = []
|
552
|
+
empty_folder_names = []
|
553
|
+
folder_names << "cornucopia_report"
|
554
|
+
folder_names << "diagnostics_rspec_report"
|
555
|
+
|
556
|
+
rand(3..5).times do
|
557
|
+
folder_names << "cornucopia_report_#{Faker::Lorem.word}"
|
558
|
+
folder_names << "diagnostics_rspec_report_#{Faker::Lorem.word}"
|
559
|
+
file_name = Faker::Lorem.word
|
560
|
+
folder_names << file_name
|
561
|
+
rand(3..5).times do
|
562
|
+
folder_names << "#{file_name}_#{Faker::Lorem.word}"
|
563
|
+
end
|
564
|
+
|
565
|
+
file_name = Faker::Lorem.word
|
566
|
+
empty_folder_names << file_name
|
567
|
+
FileUtils.mkdir_p(File.join(base_folder, file_name))
|
568
|
+
Cornucopia::Util::FileAsset.asset("more_info.js").add_file(File.join(base_folder, file_name, "other.html"))
|
569
|
+
|
570
|
+
file_name = "#{Faker::Lorem.word}.html"
|
571
|
+
file_names << file_name
|
572
|
+
Cornucopia::Util::FileAsset.asset("more_info.js").add_file(File.join(base_folder, file_name))
|
573
|
+
end
|
574
|
+
|
575
|
+
folder_names.each do |folder_name|
|
576
|
+
FileUtils.mkdir_p(File.join(base_folder, folder_name))
|
577
|
+
Cornucopia::Util::FileAsset.asset("more_info.js").add_file(File.join(base_folder, folder_name, "index.html"))
|
578
|
+
end
|
579
|
+
|
580
|
+
FileUtils.mkdir_p Rails.root.join("coverage")
|
581
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").add_file(Rails.root.join("coverage/index.html"))
|
582
|
+
|
583
|
+
FileUtils.mkdir_p current_report.index_folder_name
|
584
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
585
|
+
add_file(File.join(current_report.index_folder_name, "report_contents.html"))
|
586
|
+
|
587
|
+
pre_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
588
|
+
|
589
|
+
current_report.rebuild_index_page
|
590
|
+
|
591
|
+
post_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
592
|
+
expect(post_file).not_to be == pre_file
|
593
|
+
|
594
|
+
expect(post_file).to match /\>..\/coverage\</i
|
595
|
+
expect(post_file).to match /coverage\/index.html/i
|
596
|
+
|
597
|
+
groups = {}
|
598
|
+
folder_names.each do |folder_name|
|
599
|
+
if folder_name =~ /cornucopia_report/
|
600
|
+
group_name = "cornucopia_report"
|
601
|
+
groups[group_name] ||= []
|
602
|
+
groups[group_name] << (post_file =~ /h4\>Feature Tests\</i) if groups[group_name].empty?
|
603
|
+
elsif folder_name =~ /diagnostics_rspec_report/
|
604
|
+
group_name = "diagnostics_rspec_report"
|
605
|
+
groups[group_name] ||= []
|
606
|
+
groups[group_name] << (post_file =~ /h4\>RSPEC Tests\</i) if groups[group_name].empty?
|
607
|
+
elsif folder_name =~ /_/
|
608
|
+
group_name = folder_name.split("_")[0]
|
609
|
+
groups[group_name] ||= []
|
610
|
+
groups[group_name] << (post_file =~ /h4\>#{group_name}\</i) if groups[group_name].empty?
|
611
|
+
else
|
612
|
+
group_name = folder_name
|
613
|
+
groups[group_name] ||= []
|
614
|
+
groups[group_name] << (post_file =~ /h4\>#{group_name}\</i) if groups[group_name].empty?
|
615
|
+
end
|
616
|
+
groups[group_name] << (post_file =~ /\"#{folder_name}\/index.html\"/i)
|
617
|
+
groups[group_name] << (post_file =~ /\>#{folder_name}\<\/a\>/i)
|
618
|
+
end
|
619
|
+
|
620
|
+
groups.each do |group_name, group_indexes|
|
621
|
+
group_indexes.each do |index_value|
|
622
|
+
expect(index_value).to be
|
623
|
+
expect(index_value).to be >= 0
|
624
|
+
end
|
625
|
+
|
626
|
+
groups.each do |other_group_name, other_group_indexes|
|
627
|
+
if (other_group_name != group_name)
|
628
|
+
expect((group_indexes.min < other_group_indexes.min && group_indexes.max < other_group_indexes.min) ||
|
629
|
+
(group_indexes.min > other_group_indexes.max && group_indexes.max > other_group_indexes.max)).
|
630
|
+
to be_truthy
|
631
|
+
end
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
empty_folder_names.each do |file_name|
|
636
|
+
expect(post_file).not_to match /#{file_name}\/other.html/i
|
637
|
+
end
|
638
|
+
|
639
|
+
file_names.each do |file_name|
|
640
|
+
expect(post_file).not_to match /\/#{file_name}/i
|
641
|
+
end
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
describe "#initialize_report_files" do
|
646
|
+
it "should create the report folder" do
|
647
|
+
current_report = send(report_settings[:report])
|
648
|
+
|
649
|
+
FileUtils.mkdir_p current_report.index_folder_name
|
650
|
+
current_report.rebuild_index_page
|
651
|
+
|
652
|
+
post_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
653
|
+
expect(post_file).not_to match /\>#{report_settings[:sub_folder]}\</
|
654
|
+
|
655
|
+
current_report.initialize_report_files
|
656
|
+
|
657
|
+
report_folder = current_report.report_folder_name
|
658
|
+
expect(File.exists?(report_folder)).to be_truthy
|
659
|
+
|
660
|
+
post_file = File.read(File.join(current_report.index_folder_name, "report_contents.html"))
|
661
|
+
expect(post_file).to match /\>#{report_settings[:sub_folder]}\</
|
662
|
+
|
663
|
+
expect(File.exists?(File.join(report_folder, "index.html"))).to be_truthy
|
664
|
+
expect(File.exists?(File.join(report_folder, "report_contents.html"))).to be_truthy
|
665
|
+
expect(File.exists?(File.join(report_folder, "collapse.gif"))).to be_truthy
|
666
|
+
expect(File.exists?(File.join(report_folder, "expand.gif"))).to be_truthy
|
667
|
+
expect(File.exists?(File.join(report_folder, "more_info.js"))).to be_truthy
|
668
|
+
expect(File.exists?(File.join(report_folder, "cornucopia.css"))).to be_truthy
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
672
|
+
describe "#report_folder_name" do
|
673
|
+
it "initializes the system to make room for the folder" do
|
674
|
+
current_report = send(report_settings[:report])
|
675
|
+
|
676
|
+
expect(current_report).to receive(:backup_report_folder).and_call_original
|
677
|
+
expect(current_report).to receive(:delete_old_folders).and_call_original
|
678
|
+
expect(current_report).not_to receive(:initialize_report_files)
|
679
|
+
|
680
|
+
expect(current_report.report_folder_name.to_s).to be == Rails.root.join(report_settings[:index_folder],
|
681
|
+
report_settings[:sub_folder]).to_s + "/"
|
682
|
+
expect(File.exists?(current_report.report_contents_page_name)).to be_falsey
|
683
|
+
end
|
684
|
+
end
|
685
|
+
|
686
|
+
describe "#open_report_contents_file" do
|
687
|
+
it "initializes the report_contents file" do
|
688
|
+
current_report = send(report_settings[:report])
|
689
|
+
expect(current_report).to receive(:initialize_report_files).and_call_original
|
690
|
+
write_contents = Faker::Lorem.paragraphs(rand(5..8)).join("\n\n")
|
691
|
+
|
692
|
+
current_report.open_report_contents_file do |writer|
|
693
|
+
writer.write(write_contents)
|
694
|
+
end
|
695
|
+
|
696
|
+
write_contents = "".html_safe + write_contents
|
697
|
+
|
698
|
+
post_data = File.read(current_report.report_contents_page_name)
|
699
|
+
expect(post_data).to match /#{write_contents}/
|
700
|
+
end
|
701
|
+
end
|
702
|
+
|
703
|
+
describe "#close" do
|
704
|
+
it "should create an empty report if nothing was reported" do
|
705
|
+
current_report = send(report_settings[:report])
|
706
|
+
current_report.close
|
707
|
+
|
708
|
+
post_data = File.read(current_report.report_contents_page_name)
|
709
|
+
expect(post_data).to match /No errors to report/i
|
710
|
+
|
711
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
712
|
+
end
|
713
|
+
|
714
|
+
it "should not call open_report_after_generation if nothing was reported" do
|
715
|
+
expect(Cornucopia::Util::Configuration).not_to receive(:open_report_after_generation)
|
716
|
+
|
717
|
+
current_report = send(report_settings[:report])
|
718
|
+
current_report.close
|
719
|
+
|
720
|
+
post_data = File.read(current_report.report_contents_page_name)
|
721
|
+
expect(post_data).to match /No errors to report/i
|
722
|
+
|
723
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
724
|
+
end
|
725
|
+
|
726
|
+
it "should not create an empty report if something was reported" do
|
727
|
+
current_report = send(report_settings[:report])
|
728
|
+
|
729
|
+
section_name = Faker::Lorem.sentence
|
730
|
+
current_report.within_section(section_name) do |report_object|
|
731
|
+
expect(report_object.is_a?(Cornucopia::Util::ReportBuilder)).to be_truthy
|
732
|
+
end
|
733
|
+
|
734
|
+
current_report.close
|
735
|
+
|
736
|
+
post_data = File.read(current_report.report_contents_page_name)
|
737
|
+
expect(post_data).not_to match /No errors to report/i
|
738
|
+
|
739
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
740
|
+
end
|
741
|
+
|
742
|
+
it "should open the report if something was created" do
|
743
|
+
current_report = send(report_settings[:report])
|
744
|
+
|
745
|
+
expect(Cornucopia::Util::Configuration).to receive(:open_report_after_generation).and_return(true)
|
746
|
+
expect(current_report).to receive(:system).and_return(nil)
|
747
|
+
|
748
|
+
section_name = Faker::Lorem.sentence
|
749
|
+
current_report.within_section(section_name) do |report_object|
|
750
|
+
expect(report_object.is_a?(Cornucopia::Util::ReportBuilder)).to be_truthy
|
751
|
+
end
|
752
|
+
|
753
|
+
current_report.close
|
754
|
+
|
755
|
+
post_data = File.read(current_report.report_contents_page_name)
|
756
|
+
expect(post_data).not_to match /No errors to report/i
|
757
|
+
|
758
|
+
expect(Cornucopia::Util::ReportBuilder.class_variable_get("@@current_report")).not_to be
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
describe "#within_section" do
|
763
|
+
it "should output passed in text to the report file" do
|
764
|
+
current_report = send(report_settings[:report])
|
765
|
+
|
766
|
+
expect(current_report).to receive(:initialize_report_files).at_least(1).and_call_original
|
767
|
+
|
768
|
+
section_name = Faker::Lorem.sentence
|
769
|
+
current_report.within_section(section_name) do |report_object|
|
770
|
+
expect(report_object.is_a?(Cornucopia::Util::ReportBuilder)).to be_truthy
|
771
|
+
end
|
772
|
+
|
773
|
+
post_data = File.read(current_report.report_contents_page_name)
|
774
|
+
expect(post_data).to match /\>#{section_name}\</i
|
775
|
+
end
|
776
|
+
|
777
|
+
it "should always close the section if an exception is thrown" do
|
778
|
+
current_report = send(report_settings[:report])
|
779
|
+
|
780
|
+
expect(current_report).to receive(:initialize_report_files).at_least(1).and_call_original
|
781
|
+
|
782
|
+
expect do
|
783
|
+
section_name = Faker::Lorem.sentence
|
784
|
+
current_report.within_section(section_name) do |report_object|
|
785
|
+
expect(report_object.is_a?(Cornucopia::Util::ReportBuilder)).to be_truthy
|
786
|
+
raise Exception.new("This is an exception")
|
787
|
+
end
|
788
|
+
end.to raise_exception
|
789
|
+
|
790
|
+
post_data = File.read(current_report.report_contents_page_name)
|
791
|
+
expect(post_data[-1 * "\<\/div\>\n".length..-1]).to be == "\<\/div\>\n"
|
792
|
+
end
|
793
|
+
end
|
794
|
+
|
795
|
+
describe "#within_table" do
|
796
|
+
it "should output the table within a section" do
|
797
|
+
current_report = send(report_settings[:report])
|
798
|
+
|
799
|
+
section_name = "".html_safe + Faker::Lorem.sentence
|
800
|
+
table_label = "".html_safe + Faker::Lorem.sentence
|
801
|
+
table_data = "".html_safe + Faker::Lorem.paragraphs.join("\n")
|
802
|
+
|
803
|
+
current_report.within_section(section_name) do |report_object|
|
804
|
+
report_object.within_table do |report_table|
|
805
|
+
report_table.write_stats(table_label, table_data)
|
806
|
+
end
|
807
|
+
end
|
808
|
+
|
809
|
+
post_data = File.read(current_report.report_contents_page_name)
|
810
|
+
expect(post_data[-1 * "\<\/div\>\n".length..-1]).to be == "\<\/div\>\n"
|
811
|
+
expect(post_data).to match /\>\n#{table_label}\n\</
|
812
|
+
expect(post_data).to match /\>#{table_data}\</
|
813
|
+
end
|
814
|
+
|
815
|
+
it "should output the table within a section even if an exception is thrown" do
|
816
|
+
current_report = send(report_settings[:report])
|
817
|
+
|
818
|
+
section_name = "".html_safe + Faker::Lorem.sentence
|
819
|
+
table_label = "".html_safe + Faker::Lorem.sentence
|
820
|
+
table_data = "".html_safe + Faker::Lorem.paragraphs.join("\n")
|
821
|
+
|
822
|
+
expect do
|
823
|
+
current_report.within_section(section_name) do |report_object|
|
824
|
+
report_object.within_table do |report_table|
|
825
|
+
report_table.write_stats(table_label, table_data)
|
826
|
+
raise Exception.new("This is an exception")
|
827
|
+
end
|
828
|
+
end
|
829
|
+
end.to raise_exception
|
830
|
+
|
831
|
+
post_data = File.read(current_report.report_contents_page_name)
|
832
|
+
expect(post_data[-1 * "\<\/div\>\n".length..-1]).to be == "\<\/div\>\n"
|
833
|
+
expect(post_data).to match /\>\n#{table_label}\n\</
|
834
|
+
expect(post_data).to match /\>#{table_data}\</
|
835
|
+
expect(post_data).to match /This is an exception/
|
836
|
+
end
|
837
|
+
|
838
|
+
# noinspection RubyScope
|
839
|
+
it "outputs the table in another table, and doesn't write anything" do
|
840
|
+
current_report = send(report_settings[:report])
|
841
|
+
mid_data = ""
|
842
|
+
|
843
|
+
current_report.within_section("Section") do |report_object|
|
844
|
+
# noinspection RubyScope
|
845
|
+
report_object.within_table do |report_table|
|
846
|
+
report_object.within_table(report_table: report_table) do |sub_table|
|
847
|
+
sub_table.write_stats "stat", "value"
|
848
|
+
end
|
849
|
+
|
850
|
+
mid_data = File.read(current_report.report_contents_page_name)
|
851
|
+
end
|
852
|
+
end
|
853
|
+
|
854
|
+
current_report.close
|
855
|
+
|
856
|
+
post_data = File.read(current_report.report_contents_page_name)
|
857
|
+
|
858
|
+
expect(post_data).to match /\>\nstat\n\</
|
859
|
+
expect(mid_data).not_to match /\>\nstat\n\</
|
860
|
+
end
|
861
|
+
end
|
862
|
+
|
863
|
+
describe "#unique_folder_name" do
|
864
|
+
it "returns the folder if there is no folder with that name" do
|
865
|
+
current_report = send(report_settings[:report])
|
866
|
+
report_folder = current_report.report_folder_name
|
867
|
+
|
868
|
+
new_folder = Faker::Lorem.word
|
869
|
+
|
870
|
+
expect(current_report.unique_folder_name(new_folder)).to be == new_folder
|
871
|
+
end
|
872
|
+
|
873
|
+
it "returns a uniqe folder if there is a folder with that name" do
|
874
|
+
current_report = send(report_settings[:report])
|
875
|
+
report_folder = current_report.report_folder_name
|
876
|
+
|
877
|
+
new_folder = Faker::Lorem.word
|
878
|
+
num_folders = rand(5..10)
|
879
|
+
|
880
|
+
FileUtils.mkdir_p File.join(report_folder, new_folder)
|
881
|
+
num_folders.times do |folder_number|
|
882
|
+
FileUtils.mkdir_p File.join(report_folder, "#{new_folder}_#{folder_number}")
|
883
|
+
end
|
884
|
+
|
885
|
+
expect(current_report.unique_folder_name(new_folder)).to be == "#{new_folder}_#{num_folders}"
|
886
|
+
end
|
887
|
+
end
|
888
|
+
|
889
|
+
describe "#unique_file_name" do
|
890
|
+
it "creates a unique file name if there are no files" do
|
891
|
+
current_report = send(report_settings[:report])
|
892
|
+
report_folder = current_report.report_folder_name
|
893
|
+
|
894
|
+
prefix = Faker::Lorem.word
|
895
|
+
postfix = Faker::Lorem.word
|
896
|
+
|
897
|
+
expect(current_report.unique_file_name("#{prefix}.#{postfix}")).to be == "#{prefix}.#{postfix}"
|
898
|
+
end
|
899
|
+
|
900
|
+
it "creates a unique file name if there are some files already" do
|
901
|
+
current_report = send(report_settings[:report])
|
902
|
+
report_folder = current_report.report_folder_name
|
903
|
+
|
904
|
+
prefix = Faker::Lorem.word
|
905
|
+
postfix = Faker::Lorem.word
|
906
|
+
num_files = rand(3..5)
|
907
|
+
|
908
|
+
FileUtils.mkdir_p report_folder
|
909
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
910
|
+
add_file(File.join(report_folder, "#{prefix}.#{postfix}"))
|
911
|
+
(1..num_files).to_a.each do |file_index|
|
912
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
913
|
+
add_file(File.join(report_folder, "#{prefix}_#{file_index}.#{postfix}"))
|
914
|
+
end
|
915
|
+
|
916
|
+
expect(current_report.unique_file_name("#{prefix}.#{postfix}")).to be == "#{prefix}_#{num_files + 1}.#{postfix}"
|
917
|
+
end
|
918
|
+
end
|
919
|
+
|
920
|
+
describe "#image_link" do
|
921
|
+
it "moves the image file and creates an image element" do
|
922
|
+
current_report = send(report_settings[:report])
|
923
|
+
report_folder = current_report.report_folder_name
|
924
|
+
|
925
|
+
prefix = Faker::Lorem.word
|
926
|
+
postfix = Faker::Lorem.word
|
927
|
+
|
928
|
+
FileUtils.mkdir_p report_folder
|
929
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").
|
930
|
+
add_file(File.join(report_folder, "#{prefix}.#{postfix}"))
|
931
|
+
|
932
|
+
expect(File.exists?(File.join(report_folder, "#{prefix}.#{postfix}"))).to be_truthy
|
933
|
+
expect(File.exists?(File.join(report_folder, "#{prefix}_1.#{postfix}"))).to be_falsey
|
934
|
+
|
935
|
+
image_link = current_report.image_link(File.join(report_folder, "#{prefix}.#{postfix}"))
|
936
|
+
|
937
|
+
expect(File.exists?(File.join(report_folder, "#{prefix}.#{postfix}"))).to be_falsey
|
938
|
+
expect(File.exists?(File.join(report_folder, "#{prefix}_1.#{postfix}"))).to be_truthy
|
939
|
+
|
940
|
+
expect(image_link).to be_html_safe
|
941
|
+
expect(image_link).to match /^\<img/i
|
942
|
+
expect(image_link).to match /src=\".\/#{prefix}_1.#{postfix}\"/i
|
943
|
+
end
|
944
|
+
end
|
945
|
+
|
946
|
+
describe "#page_frame" do
|
947
|
+
it "dumps the html to a file, and returns an iframe element" do
|
948
|
+
current_report = send(report_settings[:report])
|
949
|
+
report_folder = current_report.report_folder_name
|
950
|
+
source_html = "<html>\n<body>\nThis is some & awesome text</body>\n</html>"
|
951
|
+
|
952
|
+
FileUtils.mkdir_p report_folder
|
953
|
+
Cornucopia::Util::FileAsset.asset("cornucopia.css").add_file(File.join(report_folder, "page_dump.html"))
|
954
|
+
|
955
|
+
expect(File.exists?(File.join(report_folder, "page_dump.html"))).to be_truthy
|
956
|
+
expect(File.exists?(File.join(report_folder, "page_dump_1.html"))).to be_falsey
|
957
|
+
|
958
|
+
page_link = current_report.page_frame(source_html)
|
959
|
+
|
960
|
+
expect(File.exists?(File.join(report_folder, "page_dump.html"))).to be_truthy
|
961
|
+
expect(File.exists?(File.join(report_folder, "page_dump_1.html"))).to be_truthy
|
962
|
+
|
963
|
+
expect(page_link).to be_html_safe
|
964
|
+
expect(page_link).to match /\<iframe/i
|
965
|
+
expect(page_link).to match /src=\"page_dump_1.html\"/i
|
966
|
+
expect(File.read(File.join(report_folder, "page_dump_1.html"))).to be == source_html
|
967
|
+
end
|
968
|
+
end
|
969
|
+
|
970
|
+
describe "#page_text" do
|
971
|
+
it "outputs a textarea for page" do
|
972
|
+
current_report = send(report_settings[:report])
|
973
|
+
|
974
|
+
text_area_value = current_report.page_text("</textarea>")
|
975
|
+
|
976
|
+
expect(text_area_value).to match /\<\;\/textarea\>\;/
|
977
|
+
expect(text_area_value).to match /\<textarea/
|
978
|
+
expect(text_area_value).to match /\<\/textarea\>/
|
979
|
+
end
|
980
|
+
end
|
981
|
+
end
|
982
|
+
end
|
983
|
+
end
|