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,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require ::File.expand_path("../../../lib/cornucopia/util/report_formatters", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
describe Cornucopia::Util::CucumberFormatter do
|
5
|
+
describe "#format_location" do
|
6
|
+
it "formats the passed in object as #file.#line" do
|
7
|
+
file_location = double(:file_location, file: Faker::Lorem.sentence, line: rand(1..500))
|
8
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).and_call_original
|
9
|
+
expect(Cornucopia::Util::CucumberFormatter.format_location(file_location)).
|
10
|
+
to eq "#{file_location.file}:#{file_location.line}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require ::File.expand_path("../../../lib/cornucopia/util/report_table", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
describe Cornucopia::Util::ReportTable::ReportTableException do
|
5
|
+
let(:inner_error) { Exception.new("This is an error") }
|
6
|
+
let(:subject) { Cornucopia::Util::ReportTable::ReportTableException.new(inner_error) }
|
7
|
+
|
8
|
+
it "returns the #error" do
|
9
|
+
expect(subject.error.to_s).to be == "This is an error"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "passes the backtrace to the inner error" do
|
13
|
+
expect(inner_error).to receive(:backtrace).and_call_original
|
14
|
+
subject.backtrace
|
15
|
+
end
|
16
|
+
|
17
|
+
it "passes the to_s to the inner error" do
|
18
|
+
expect(inner_error).to receive(:to_s).and_call_original
|
19
|
+
subject.to_s
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,319 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require ::File.expand_path("../../../lib/cornucopia/util/report_table", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
describe Cornucopia::Util::ReportTable do
|
5
|
+
describe "initialize" do
|
6
|
+
it "calls open and close table around the block" do
|
7
|
+
expect_any_instance_of(Cornucopia::Util::ReportTable).to receive(:open_table).once.and_call_original
|
8
|
+
expect_any_instance_of(Cornucopia::Util::ReportTable).to receive(:close_table).once.and_call_original
|
9
|
+
|
10
|
+
report_table = Cornucopia::Util::ReportTable.new() do |report_table|
|
11
|
+
expect(report_table.is_a?(Cornucopia::Util::ReportTable)).to be_truthy
|
12
|
+
end
|
13
|
+
|
14
|
+
expect(report_table.full_table).to be == "<div class=\"cornucopia-table\">\n</div>\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can nest calls if necessary" do
|
18
|
+
report_table = Cornucopia::Util::ReportTable.new() do |report_table|
|
19
|
+
expect(report_table.is_a?(Cornucopia::Util::ReportTable)).to be_truthy
|
20
|
+
expect(report_table).to receive(:close_table).once.and_call_original
|
21
|
+
|
22
|
+
Cornucopia::Util::ReportTable.new(report_table: report_table) do |sub_report_table|
|
23
|
+
expect(sub_report_table).to be == report_table
|
24
|
+
expect(sub_report_table.is_a?(Cornucopia::Util::ReportTable)).to be_truthy
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
expect(report_table.full_table).to be == "<div class=\"cornucopia-table\">\n</div>\n"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#open_table" do
|
33
|
+
it "can customize the open statement" do
|
34
|
+
report_table = Cornucopia::Util::ReportTable.new(table_prefix: "<div>\n") do |report_table|
|
35
|
+
end
|
36
|
+
|
37
|
+
expect(report_table.full_table).to be == "<div>\n</div>\n"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#close_table" do
|
42
|
+
it "can customize the close statement" do
|
43
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
44
|
+
end
|
45
|
+
|
46
|
+
expect(report_table.full_table).to be == "<div class=\"cornucopia-table\">\n<p>cool</p>\n</div>"
|
47
|
+
expect(report_table.full_table).to be_html_safe
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#write_stats" do
|
52
|
+
it "raises an exception if the table is closed" do
|
53
|
+
report_table = Cornucopia::Util::ReportTable.new do |table|
|
54
|
+
end
|
55
|
+
|
56
|
+
expect do
|
57
|
+
report_table.write_stats("something", "something")
|
58
|
+
end.to raise_exception
|
59
|
+
end
|
60
|
+
|
61
|
+
it "escapes the label" do
|
62
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:escape_string).exactly(3).and_call_original
|
63
|
+
|
64
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
65
|
+
report_table.write_stats("&", "This is some text")
|
66
|
+
end
|
67
|
+
|
68
|
+
expect(report_table.full_table).to match /\<div class=\"cornucopia-cell-label\"\>\n&amp;\n\<\/div\>\n/
|
69
|
+
end
|
70
|
+
|
71
|
+
it "pretty prints the value" do
|
72
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).once.and_call_original
|
73
|
+
|
74
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
75
|
+
report_table.write_stats("This is some text", "&")
|
76
|
+
end
|
77
|
+
|
78
|
+
expect(report_table.full_table).to match /\<pre\>\<code\>&amp;\<\/code\>\<\/pre\>\n/
|
79
|
+
end
|
80
|
+
|
81
|
+
it "can suppress the more info block" do
|
82
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).once.and_call_original
|
83
|
+
|
84
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
85
|
+
report_table.write_stats("This is some text", "&", prevent_shrink: true)
|
86
|
+
end
|
87
|
+
|
88
|
+
expect(report_table.full_table).to_not match /class=\"cornucopia-cell-more-data\"/
|
89
|
+
end
|
90
|
+
|
91
|
+
it "escapes the value if it doesn't pretty print" do
|
92
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:escape_string).twice.and_call_original
|
93
|
+
|
94
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
95
|
+
report_table.write_stats("This is some text", "&", do_not_pretty_print: true)
|
96
|
+
end
|
97
|
+
|
98
|
+
expect(report_table.full_table).to match /\<pre\>\<code\>&amp;\<\/code\>\<\/pre\>\n/
|
99
|
+
end
|
100
|
+
|
101
|
+
it "can suppress the code block" do
|
102
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:pretty_format).once.and_call_original
|
103
|
+
|
104
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
105
|
+
report_table.write_stats("This is some text", "&", exclude_code_block: true)
|
106
|
+
end
|
107
|
+
|
108
|
+
expect(report_table.full_table).to_not match /\<pre\>\<code\>&amp;\<\/code\>\<\/pre\>\n/
|
109
|
+
end
|
110
|
+
|
111
|
+
context "not_a_table" do
|
112
|
+
it "does not print the label" do
|
113
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:escape_string).exactly(3).and_call_original
|
114
|
+
|
115
|
+
report_table = Cornucopia::Util::ReportTable.new(not_a_table: true) do |report_table|
|
116
|
+
report_table.write_stats("&", "This is some text")
|
117
|
+
end
|
118
|
+
|
119
|
+
expect(report_table.full_table).not_to match /\<div class=\"cornucopia-cell-label\"\>\n&amp;\n\<\/div\>\n/
|
120
|
+
expect(report_table.full_table).to match /\<div class=\"cornucopia-table\"\>\nThis is some text\<\/div\>\n/
|
121
|
+
end
|
122
|
+
|
123
|
+
it "outputs the text directly" do
|
124
|
+
expect(Cornucopia::Util::ReportBuilder).to receive(:escape_string).exactly(3).and_call_original
|
125
|
+
|
126
|
+
report_table = Cornucopia::Util::ReportTable.new(not_a_table: true) do |report_table|
|
127
|
+
report_table.write_stats("&", "This is some & text")
|
128
|
+
end
|
129
|
+
|
130
|
+
expect(report_table.full_table).to match /\<div class=\"cornucopia-table\"\>\nThis is some &amp; text\<\/div\>\n/
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
it "calls a lambda" do
|
135
|
+
custom_text = Faker::Lorem.sentence
|
136
|
+
|
137
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
138
|
+
report_table.write_stats("This is some text", "&", format: ->(value) { custom_text.html_safe + value })
|
139
|
+
end
|
140
|
+
|
141
|
+
expect(report_table.full_table).to match /\<pre\>\<code\>#{"".html_safe + custom_text}&amp;\<\/code\>\<\/pre\>\n/
|
142
|
+
end
|
143
|
+
|
144
|
+
it "a function on an object" do
|
145
|
+
class TestClass
|
146
|
+
def self.my_function(value)
|
147
|
+
"This is some text also.".html_safe + "&"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
report_table = Cornucopia::Util::ReportTable.new(table_postfix: "<p>cool</p>\n</div>") do |report_table|
|
152
|
+
report_table.write_stats("This is some text", "&", format_object: TestClass, format_function: :my_function)
|
153
|
+
end
|
154
|
+
|
155
|
+
expect(report_table.full_table).to match /\<pre\>\<code\>This is some text also.&amp;\<\/code\>\<\/pre\>\n/
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "nested tables" do
|
160
|
+
let(:pre_text) { "start_div" }
|
161
|
+
let(:post_text) { "end_div" }
|
162
|
+
|
163
|
+
it "nests tables" do
|
164
|
+
nest_label = "".html_safe + Faker::Lorem.sentence
|
165
|
+
second_label = "".html_safe + Faker::Lorem.sentence
|
166
|
+
second_body = "".html_safe + Faker::Lorem.paragraphs(rand(3..5)).join("\n")
|
167
|
+
|
168
|
+
report_table = nil
|
169
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
170
|
+
table_postfix: post_text) do |first_table|
|
171
|
+
report_table = first_table
|
172
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
173
|
+
table_postfix: post_text,
|
174
|
+
nested_table: first_table,
|
175
|
+
nested_table_label: nest_label) do |second_table|
|
176
|
+
second_table.write_stats second_label, second_body
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
expect(report_table).to be
|
181
|
+
expect(report_table.full_table).to match /#{second_label}/
|
182
|
+
expect(report_table.full_table).to match /#{second_body}/
|
183
|
+
expect(report_table.full_table).to match /#{nest_label}/
|
184
|
+
expect(report_table.full_table.scan(/\<code\>/).length).to be == 1
|
185
|
+
expect(report_table.full_table.scan(/start_div/).length).to be == 2
|
186
|
+
expect(report_table.full_table.scan(/end_div/).length).to be == 2
|
187
|
+
expect(report_table.full_table.scan(/cornucopia-cell-more-data/).length).to be == 2
|
188
|
+
expect(report_table.full_table.scan(/cornucopia-row\"\>/).length).to be == 2
|
189
|
+
end
|
190
|
+
|
191
|
+
it "nests tables if they are not empty" do
|
192
|
+
nest_label = "".html_safe + Faker::Lorem.sentence
|
193
|
+
second_label = "".html_safe + Faker::Lorem.sentence
|
194
|
+
second_body = "".html_safe + Faker::Lorem.paragraphs(rand(3..5)).join("\n")
|
195
|
+
|
196
|
+
report_table = nil
|
197
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
198
|
+
table_postfix: post_text) do |first_table|
|
199
|
+
report_table = first_table
|
200
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
201
|
+
table_postfix: post_text,
|
202
|
+
nested_table: first_table,
|
203
|
+
nested_table_label: nest_label,
|
204
|
+
suppress_blank_table: true) do |second_table|
|
205
|
+
second_table.write_stats second_label, second_body
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
expect(report_table).to be
|
210
|
+
expect(report_table.full_table).to match /#{second_label}/
|
211
|
+
expect(report_table.full_table).to match /#{second_body}/
|
212
|
+
expect(report_table.full_table).to match /#{nest_label}/
|
213
|
+
expect(report_table.full_table.scan(/\<code\>/).length).to be == 1
|
214
|
+
expect(report_table.full_table.scan(/start_div/).length).to be == 2
|
215
|
+
expect(report_table.full_table.scan(/end_div/).length).to be == 2
|
216
|
+
expect(report_table.full_table.scan(/cornucopia-cell-more-data/).length).to be == 2
|
217
|
+
expect(report_table.full_table.scan(/cornucopia-row\"\>/).length).to be == 2
|
218
|
+
end
|
219
|
+
|
220
|
+
it "does not nest tables if they are empty" do
|
221
|
+
nest_label = "".html_safe + Faker::Lorem.sentence
|
222
|
+
second_label = "".html_safe + Faker::Lorem.sentence
|
223
|
+
second_body = "".html_safe + Faker::Lorem.paragraphs(rand(3..5)).join("\n")
|
224
|
+
|
225
|
+
report_table = nil
|
226
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
227
|
+
table_postfix: post_text) do |first_table|
|
228
|
+
report_table = first_table
|
229
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
230
|
+
table_postfix: post_text,
|
231
|
+
nested_table: first_table,
|
232
|
+
nested_table_label: nest_label,
|
233
|
+
suppress_blank_table: true) do |second_table|
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
expect(report_table).to be
|
238
|
+
expect(report_table.full_table).not_to match /#{second_label}/
|
239
|
+
expect(report_table.full_table).not_to match /#{second_body}/
|
240
|
+
expect(report_table.full_table).not_to match /#{nest_label}/
|
241
|
+
expect(report_table.full_table.scan(/\<code\>/).length).to be == 0
|
242
|
+
expect(report_table.full_table.scan(/start_div/).length).to be == 1
|
243
|
+
expect(report_table.full_table.scan(/end_div/).length).to be == 1
|
244
|
+
expect(report_table.full_table.scan(/cornucopia-cell-more-data/).length).to be == 0
|
245
|
+
expect(report_table.full_table.scan(/cornucopia-row\"\>/).length).to be == 0
|
246
|
+
end
|
247
|
+
|
248
|
+
it "nests tables even if there is an exception" do
|
249
|
+
nest_label = "".html_safe + Faker::Lorem.sentence
|
250
|
+
second_label = "".html_safe + Faker::Lorem.sentence
|
251
|
+
second_body = "".html_safe + Faker::Lorem.paragraphs(rand(3..5)).join("\n")
|
252
|
+
|
253
|
+
report_table = nil
|
254
|
+
expect do
|
255
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
256
|
+
table_postfix: post_text) do |first_table|
|
257
|
+
report_table = first_table
|
258
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
259
|
+
table_postfix: post_text,
|
260
|
+
nested_table: first_table,
|
261
|
+
nested_table_label: nest_label) do |second_table|
|
262
|
+
second_table.write_stats second_label, second_body
|
263
|
+
raise Exception.new("This is an exception")
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end.to raise_error(Exception)
|
267
|
+
|
268
|
+
expect(report_table).to be
|
269
|
+
expect(report_table.full_table).to match /#{second_label}/
|
270
|
+
expect(report_table.full_table).to match /#{second_body}/
|
271
|
+
expect(report_table.full_table).to match /#{nest_label}/
|
272
|
+
expect(report_table.full_table).to match /This is an exception/
|
273
|
+
expect(report_table.full_table.scan(/This is an exception/).length).to be == 1
|
274
|
+
expect(report_table.full_table.scan(/\<code\>/).length).to be == 2
|
275
|
+
expect(report_table.full_table.scan(/start_div/).length).to be == 2
|
276
|
+
expect(report_table.full_table.scan(/end_div/).length).to be == 2
|
277
|
+
expect(report_table.full_table.scan(/cornucopia-cell-more-data/).length).to be == 4
|
278
|
+
expect(report_table.full_table.scan(/cornucopia-row\"\>/).length).to be == 3
|
279
|
+
end
|
280
|
+
|
281
|
+
it "nests tables even if there is an exception multiple levels deep" do
|
282
|
+
nest_label = "".html_safe + Faker::Lorem.sentence
|
283
|
+
second_label = "".html_safe + Faker::Lorem.sentence
|
284
|
+
second_body = "".html_safe + Faker::Lorem.paragraphs(rand(3..5)).join("\n")
|
285
|
+
|
286
|
+
report_table = nil
|
287
|
+
expect do
|
288
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
289
|
+
table_postfix: post_text) do |first_table|
|
290
|
+
report_table = first_table
|
291
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
292
|
+
table_postfix: post_text,
|
293
|
+
nested_table: first_table,
|
294
|
+
nested_table_label: nest_label) do |second_table|
|
295
|
+
Cornucopia::Util::ReportTable.new(table_prefix: pre_text,
|
296
|
+
table_postfix: post_text,
|
297
|
+
nested_table: second_table,
|
298
|
+
nested_table_label: nest_label) do |third_table|
|
299
|
+
third_table.write_stats second_label, second_body
|
300
|
+
raise Exception.new("This is an exception")
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end.to raise_error(Exception)
|
305
|
+
|
306
|
+
expect(report_table).to be
|
307
|
+
expect(report_table.full_table).to match /#{second_label}/
|
308
|
+
expect(report_table.full_table).to match /#{second_body}/
|
309
|
+
expect(report_table.full_table).to match /#{nest_label}/
|
310
|
+
expect(report_table.full_table).to match /This is an exception/
|
311
|
+
expect(report_table.full_table.scan(/This is an exception/).length).to be == 1
|
312
|
+
expect(report_table.full_table.scan(/\<code\>/).length).to be == 2
|
313
|
+
expect(report_table.full_table.scan(/start_div/).length).to be == 3
|
314
|
+
expect(report_table.full_table.scan(/end_div/).length).to be == 3
|
315
|
+
expect(report_table.full_table.scan(/cornucopia-cell-more-data/).length).to be == 4
|
316
|
+
expect(report_table.full_table.scan(/cornucopia-row\"\>/).length).to be == 4
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require ::File.expand_path("../../lib/cornucopia/site_prism/page_application", File.dirname(__FILE__))
|
2
|
+
require ::File.expand_path("../../lib/cornucopia/site_prism/element_extensions", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
Dir[File.expand_path("**/*.rb", File.dirname(__FILE__))].each { |require_file| require require_file }
|
5
|
+
|
6
|
+
class CornucopiaReportApp < Cornucopia::SitePrism::PageApplication
|
7
|
+
def pages_module
|
8
|
+
::CornucopiaReportPages
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GooglePages
|
2
|
+
class EmailSection < SitePrism::Section
|
3
|
+
# include GalaxyPages::SimpleElements
|
4
|
+
|
5
|
+
# indexed_elements "td:nth-child(%{element_index})",
|
6
|
+
# :left_padding,
|
7
|
+
# :select,
|
8
|
+
# :star,
|
9
|
+
# :from,
|
10
|
+
# :padding_2,
|
11
|
+
# :subject,
|
12
|
+
# :padding_3,
|
13
|
+
# :time
|
14
|
+
end
|
15
|
+
|
16
|
+
class EmailPage < SitePrism::Page
|
17
|
+
set_url "https://mail.google.com/mail/#inbox"
|
18
|
+
|
19
|
+
# sections :emails, EmailSection, "#:3a tr"
|
20
|
+
sections :emails, EmailSection, ".F.cf.zt tr"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "rspec/expectations"
|
2
|
+
|
3
|
+
module GooglePages
|
4
|
+
class LoginPage < SitePrism::Page
|
5
|
+
set_url "https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/"
|
6
|
+
|
7
|
+
# deem.automation.qa
|
8
|
+
# lp3$8)23%*@~[}x
|
9
|
+
element :email, "#Email"
|
10
|
+
element :password, "#Passwd"
|
11
|
+
element :sign_in_button, "#signIn"
|
12
|
+
element :re_auth, "#reauthEmail"
|
13
|
+
|
14
|
+
def sign_in
|
15
|
+
load
|
16
|
+
if has_email?
|
17
|
+
email.set("deem.automation.qa")
|
18
|
+
elsif has_re_auth?
|
19
|
+
raise "bad re-auth" unless re_auth.text == "deem.automation.qa@gmail.com"
|
20
|
+
end
|
21
|
+
password.set("lp3$8)23%*@~[}x")
|
22
|
+
sign_in_button.click
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
+
ENV["RAILS_ENV"] ||= 'test'
|
3
|
+
require 'spec_helper'
|
4
|
+
require File.expand_path("../../config/environment", __FILE__)
|
5
|
+
require 'rspec/rails'
|
6
|
+
|
7
|
+
# Requires supporting ruby files with custom matchers and macros, etc, in
|
8
|
+
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
|
9
|
+
# run as spec files by default. This means that files in spec/support that end
|
10
|
+
# in _spec.rb will both be required and run as specs, causing the specs to be
|
11
|
+
# run twice. It is recommended that you do not name files matching this glob to
|
12
|
+
# end with _spec.rb. You can configure this pattern with with the --pattern
|
13
|
+
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
|
14
|
+
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
|
15
|
+
|
16
|
+
# Checks for pending migrations before tests are run.
|
17
|
+
# If you are not using ActiveRecord, you can remove this line.
|
18
|
+
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
|
19
|
+
|
20
|
+
RSpec.configure do |config|
|
21
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
22
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
23
|
+
|
24
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
25
|
+
# examples within a transaction, remove the following line or assign false
|
26
|
+
# instead of true.
|
27
|
+
config.use_transactional_fixtures = true
|
28
|
+
|
29
|
+
# RSpec Rails can automatically mix in different behaviours to your tests
|
30
|
+
# based on their file location, for example enabling you to call `get` and
|
31
|
+
# `post` in specs under `spec/controllers`.
|
32
|
+
#
|
33
|
+
# You can disable this behaviour by removing the line below, and instead
|
34
|
+
# explicitly tag your specs with their type, e.g.:
|
35
|
+
#
|
36
|
+
# RSpec.describe UsersController, :type => :controller do
|
37
|
+
# # ...
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# The different available types are documented in the features, such as in
|
41
|
+
# https://relishapp.com/rspec/rspec-rails/docs
|
42
|
+
config.infer_spec_type_from_file_location!
|
43
|
+
end
|