howitzer 0.0.3 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/.gitignore +8 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +32 -0
  5. data/GETTING_STARTED.md +529 -0
  6. data/Gemfile +4 -2
  7. data/LICENSE +2 -2
  8. data/README.md +57 -13
  9. data/Rakefile +9 -2
  10. data/bin/howitzer +79 -31
  11. data/generators/base_generator.rb +87 -0
  12. data/generators/config/config_generator.rb +16 -20
  13. data/generators/config/templates/default.yml +26 -7
  14. data/generators/cucumber/cucumber_generator.rb +20 -26
  15. data/generators/{tasks → cucumber}/templates/cucumber.rake +0 -0
  16. data/generators/{config → cucumber}/templates/cucumber.yml +0 -0
  17. data/generators/emails/emails_generator.rb +11 -18
  18. data/generators/emails/templates/example_email.rb +1 -0
  19. data/generators/pages/pages_generator.rb +16 -18
  20. data/generators/pages/templates/example_menu.rb +1 -0
  21. data/generators/pages/templates/example_page.rb +1 -1
  22. data/generators/root/root_generator.rb +18 -20
  23. data/generators/root/templates/.gitignore +2 -1
  24. data/generators/root/templates/Gemfile +3 -2
  25. data/generators/root/templates/Rakefile +10 -0
  26. data/generators/root/templates/boot.rb +3 -9
  27. data/generators/rspec/rspec_generator.rb +23 -0
  28. data/generators/rspec/templates/example_spec.rb +7 -0
  29. data/generators/rspec/templates/rspec.rake +34 -0
  30. data/generators/rspec/templates/spec_helper.rb +56 -0
  31. data/generators/tasks/tasks_generator.rb +11 -17
  32. data/generators/tasks/templates/common.rake +15 -0
  33. data/howitzer.gemspec +13 -2
  34. data/lib/howitzer.rb +1 -0
  35. data/lib/howitzer/helpers.rb +87 -2
  36. data/lib/howitzer/init.rb +0 -1
  37. data/lib/howitzer/patches/rawler_patched.rb +86 -0
  38. data/lib/howitzer/settings.rb +27 -0
  39. data/lib/howitzer/utils.rb +3 -12
  40. data/lib/howitzer/utils/capybara_patched.rb +3 -2
  41. data/lib/howitzer/utils/capybara_settings.rb +158 -24
  42. data/lib/howitzer/utils/data_generator/data_storage.rb +35 -1
  43. data/lib/howitzer/utils/data_generator/gen.rb +45 -3
  44. data/lib/howitzer/utils/email/email.rb +44 -5
  45. data/lib/howitzer/utils/email/mail_client.rb +28 -22
  46. data/lib/howitzer/utils/email/mailgun_helper.rb +30 -4
  47. data/lib/howitzer/utils/locator_store.rb +111 -19
  48. data/lib/howitzer/utils/log.rb +137 -0
  49. data/lib/howitzer/utils/page_validator.rb +86 -0
  50. data/lib/howitzer/vendor/firebug-1.12.1-fx.xpi +0 -0
  51. data/lib/howitzer/vendor/firepath-0.9.7-fx.xpi +0 -0
  52. data/lib/howitzer/version.rb +2 -2
  53. data/lib/howitzer/web_page.rb +159 -19
  54. data/spec/active_resource.rb +0 -0
  55. data/spec/config/custom.yml +1 -0
  56. data/spec/config/default.yml +28 -0
  57. data/spec/spec_helper.rb +46 -1
  58. data/spec/support/boot_helper.rb +15 -0
  59. data/spec/support/generator_helper.rb +13 -0
  60. data/spec/support/logger_helper.rb +12 -0
  61. data/spec/unit/bin/howitzer_spec.rb +175 -0
  62. data/spec/unit/generators/generators_spec.rb +175 -0
  63. data/spec/unit/lib/capybara_settings_spec.rb +170 -0
  64. data/spec/unit/lib/helpers_spec.rb +619 -0
  65. data/spec/unit/lib/init_spec.rb +14 -0
  66. data/spec/unit/lib/settings_spec.rb +17 -0
  67. data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +62 -0
  68. data/spec/unit/lib/utils/data_generator/gen_spec.rb +151 -0
  69. data/spec/unit/lib/utils/email/email_spec.rb +75 -0
  70. data/spec/unit/lib/utils/email/mail_client_spec.rb +115 -0
  71. data/spec/unit/lib/utils/email/mailgun_helper_spec.rb +95 -0
  72. data/spec/unit/lib/utils/locator_store_spec.rb +122 -0
  73. data/spec/unit/lib/utils/log_spec.rb +107 -0
  74. data/spec/unit/lib/utils/page_validator_spec.rb +142 -0
  75. data/spec/unit/lib/web_page_spec.rb +250 -0
  76. data/spec/unit/version_spec.rb +8 -0
  77. metadata +215 -15
  78. data/Gemfile.lock +0 -103
  79. data/History.md +0 -20
  80. data/lib/howitzer/utils/logger.rb +0 -108
  81. data/spec/howitzer/version_spec.rb +0 -8
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ require "#{lib_path}/howitzer/utils/capybara_settings"
4
+
5
+ describe "CapybaraSettings" do
6
+ let(:log) { double("log") }
7
+ let(:test_object) { double("test_object").extend(CapybaraSettings) }
8
+ before do
9
+ allow(log).to receive(:error).and_return( true )
10
+ end
11
+
12
+ describe "#sauce_resource_path" do
13
+ subject { test_object.sauce_resource_path(name) }
14
+ let (:name) { "test_name" }
15
+ before do
16
+ allow(settings).to receive(:sl_user) { "vlad" }
17
+ allow(settings).to receive(:sl_api_key) { "11111" }
18
+ allow(test_object).to receive(:session_id) { '12341234' }
19
+ end
20
+
21
+ it { expect(subject).to eql("https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name") }
22
+ end
23
+ describe ".sauce_resource_path" do
24
+ subject { CapybaraSettings.sauce_resource_path(name) }
25
+ let (:name) { "test_name" }
26
+ before do
27
+ allow(settings).to receive(:sl_user) { "vlad" }
28
+ allow(settings).to receive(:sl_api_key) { "11111" }
29
+ allow(CapybaraSettings).to receive(:session_id) { '12341234' }
30
+ end
31
+
32
+ it { expect(subject).to eql("https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name") }
33
+ end
34
+
35
+ describe "#update_sauce_job_status" do
36
+ subject { test_object.update_sauce_job_status }
37
+ before do
38
+ allow(settings).to receive(:sl_user) { "vlad1" }
39
+ allow(settings).to receive(:sl_api_key) { "22222" }
40
+ allow(test_object).to receive(:session_id) { '12341234' }
41
+ stub_const("RestClient", double)
42
+ end
43
+
44
+ it do
45
+ expect(RestClient).to receive(:put).with("http://vlad1:22222@saucelabs.com/rest/v1/vlad1/jobs/12341234", "{}", {content_type: :json, accept: :json}).once
46
+ subject
47
+ end
48
+ end
49
+
50
+ describe ".update_sauce_resource_path" do
51
+ subject { CapybaraSettings.update_sauce_job_status }
52
+ before do
53
+ allow(settings).to receive(:sl_user) { "vlad1" }
54
+ allow(settings).to receive(:sl_api_key) { "22222" }
55
+ allow(CapybaraSettings).to receive(:session_id) { '12341234' }
56
+ stub_const("RestClient", double)
57
+ end
58
+
59
+ it do
60
+ expect(RestClient).to receive(:put).with("http://vlad1:22222@saucelabs.com/rest/v1/vlad1/jobs/12341234", "{}", {content_type: :json, accept: :json}).once
61
+ subject
62
+ end
63
+ end
64
+
65
+ describe "#suite_name" do
66
+ subject { test_object.suite_name }
67
+ before do
68
+ allow(settings).to receive(:sl_browser_name) { 'ie' }
69
+ end
70
+
71
+ context "when environment present" do
72
+ before { ENV['RAKE_TASK'] = rake_task }
73
+ context "when includes rspec" do
74
+ let(:rake_task) { 'rspec:bvt' }
75
+ it { expect(subject).to eql("BVT IE")}
76
+ end
77
+ context "when includes spec" do
78
+ let(:rake_task) { 'spec:bvt' }
79
+ it { expect(subject).to eql("BVT IE")}
80
+ end
81
+
82
+ context "when includes cucumber" do
83
+ let(:rake_task) { 'cucumber:bvt' }
84
+ it { expect(subject).to eql("BVT IE")}
85
+ end
86
+ context "when not includes rpsec and cucumber" do
87
+ let(:rake_task) { 'unknown' }
88
+ it { expect(subject).to eql("UNKNOWN IE")}
89
+ end
90
+ context "when includes only cucumber" do
91
+ let(:rake_task) { 'cucumber' }
92
+ it { expect(subject).to eql("ALL IE")}
93
+ end
94
+ end
95
+ context "when environment empty" do
96
+ before { ENV['RAKE_TASK'] = nil }
97
+ it { expect(subject).to eql("CUSTOM IE")}
98
+ end
99
+ end
100
+
101
+ describe ".suite_name" do
102
+ subject { CapybaraSettings.suite_name }
103
+ before do
104
+ allow(settings).to receive(:sl_browser_name) { 'ie' }
105
+ end
106
+
107
+ context "when environment present" do
108
+ before { ENV['RAKE_TASK'] = rake_task }
109
+ context "when includes rspec" do
110
+ let(:rake_task) { 'rspec:bvt' }
111
+ it { expect(subject).to eql("BVT IE")}
112
+ end
113
+ context "when includes spec" do
114
+ let(:rake_task) { 'spec:bvt' }
115
+ it { expect(subject).to eql("BVT IE")}
116
+ end
117
+
118
+ context "when includes cucumber" do
119
+ let(:rake_task) { 'cucumber:bvt' }
120
+ it { expect(subject).to eql("BVT IE")}
121
+ end
122
+ context "when not includes rpsec and cucumber" do
123
+ let(:rake_task) { 'unknown' }
124
+ it { expect(subject).to eql("UNKNOWN IE")}
125
+ end
126
+ context "when includes only cucumber" do
127
+ let(:rake_task) { 'cucumber' }
128
+ it { expect(subject).to eql("ALL IE")}
129
+ end
130
+ end
131
+ context "when environment empty" do
132
+ before { ENV['RAKE_TASK'] = nil }
133
+ it { expect(subject).to eql("CUSTOM IE")}
134
+ end
135
+ end
136
+
137
+ describe "#session_id" do
138
+ subject { test_object.session_id }
139
+ before do
140
+ browser = double
141
+ current_session = double
142
+ driver = double
143
+ instance_variable = double
144
+ allow(Capybara).to receive(:current_session){current_session}
145
+ allow(current_session).to receive(:driver){driver}
146
+ allow(driver).to receive(:browser){browser}
147
+ allow(browser).to receive(:instance_variable_get).with(:@bridge){ instance_variable }
148
+ allow(instance_variable).to receive(:session_id){ 'test'}
149
+ end
150
+
151
+ it { expect(subject).to eql('test') }
152
+ end
153
+
154
+ describe ".session_id" do
155
+ subject { CapybaraSettings.session_id }
156
+ before do
157
+ browser = double
158
+ current_session = double
159
+ driver = double
160
+ instance_variable = double
161
+ allow(Capybara).to receive(:current_session){current_session}
162
+ allow(current_session).to receive(:driver){driver}
163
+ allow(driver).to receive(:browser){browser}
164
+ allow(browser).to receive(:instance_variable_get).with(:@bridge){ instance_variable }
165
+ allow(instance_variable).to receive(:session_id){ 'test'}
166
+ end
167
+
168
+ it { expect(subject).to eql('test') }
169
+ end
170
+ end
@@ -0,0 +1,619 @@
1
+ require 'spec_helper'
2
+ require 'active_support/core_ext'
3
+ require "#{lib_path}/howitzer/helpers"
4
+
5
+ describe "Helpers" do
6
+ let(:settings) { double("settings")}
7
+
8
+ describe "#sauce_driver?" do
9
+ subject { sauce_driver? }
10
+ before { allow(settings).to receive(:driver) { driver_setting } }
11
+ context "when :sauce" do
12
+ let(:driver_setting) {:sauce}
13
+ it{ expect(subject).to be_true }
14
+ end
15
+ context "when not :sauce" do
16
+ let(:driver_setting) {:phantomjs}
17
+ it{ expect(subject).to be_false }
18
+ end
19
+ context "when driver specified as String" do
20
+ let(:driver_setting) {"sauce"}
21
+ it{ expect(subject).to be_true }
22
+ end
23
+ context "when driver is not specified" do
24
+ let(:driver_setting) { nil }
25
+ it { expect {subject}.to raise_error(DriverNotSpecified, "Please check your settings") }
26
+ end
27
+ end
28
+
29
+ describe "#testingbot_driver?" do
30
+ subject { testingbot_driver? }
31
+ before { allow(settings).to receive(:driver) { driver_setting } }
32
+ context "when :testingbot" do
33
+ let(:driver_setting) {:testingbot}
34
+ it{ expect(subject).to be_true }
35
+ end
36
+ context "when not :testingbot" do
37
+ let(:driver_setting) {:phantomjs}
38
+ it{ expect(subject).to be_false }
39
+ end
40
+ context "when driver specified as String" do
41
+ let(:driver_setting) {"testingbot"}
42
+ it{ expect(subject).to be_true }
43
+ end
44
+ context "when driver is not specified" do
45
+ let(:driver_setting) { nil }
46
+ it { expect {subject}.to raise_error(DriverNotSpecified, "Please check your settings") }
47
+ end
48
+ end
49
+
50
+ describe "#selenium_driver?" do
51
+ subject { selenium_driver? }
52
+ before { allow(settings).to receive(:driver) { driver_setting } }
53
+ context "when :selenium" do
54
+ let(:driver_setting) {:selenium}
55
+ it{ expect(subject).to be_true }
56
+ end
57
+ context "when not :selenium" do
58
+ let(:driver_setting) {:phantomjs}
59
+ it{ expect(subject).to be_false }
60
+ end
61
+ context "when driver specified as String" do
62
+ let(:driver_setting) {"selenium"}
63
+ it{ expect(subject).to be_true }
64
+ end
65
+ context "when driver is not specified" do
66
+ let(:driver_setting) { nil }
67
+ it { expect {subject}.to raise_error(DriverNotSpecified, "Please check your settings") }
68
+ end
69
+ end
70
+
71
+ describe "#ie_browser?" do
72
+ subject { ie_browser? }
73
+ before { allow(self).to receive(:sauce_driver?) {sauce_driver} }
74
+ before { allow(self).to receive(:testingbot_driver?) {testingbot_driver} }
75
+ context "when sauce_driver? is TRUE" do
76
+ let(:sauce_driver) { true }
77
+ let(:testingbot_driver) { false }
78
+ context "settings.sl_browser_name = :ie" do
79
+ before { allow(settings).to receive(:sl_browser_name) { :ie } }
80
+ it { expect(subject).to be_true }
81
+ end
82
+ context "settings.sl_browser_name = :iexplore" do
83
+ before { allow(settings).to receive(:sl_browser_name) { :iexplore } }
84
+ it { expect(subject).to be_true }
85
+ end
86
+ context "settings.sl_browser_name = :chrome" do
87
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
88
+ it { expect(subject).to be_false }
89
+ end
90
+ context "settings.sl_browser_name is not specified" do
91
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
92
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
93
+ end
94
+ end
95
+ context "when sauce_driver? is FALSE" do
96
+ let(:sauce_driver) { false }
97
+ let(:testingbot_driver) { false }
98
+ before { allow(self).to receive(:selenium_driver?){ selenium_driver} }
99
+ context "when selenium_driver? is TRUE" do
100
+ let(:selenium_driver) { true }
101
+ context "settings.sel_browser = :ie" do
102
+ before { allow(settings).to receive(:sel_browser) { :ie } }
103
+ it { expect(subject).to be_true }
104
+ end
105
+ context "settings.sel_browser = :iexplore" do
106
+ before { allow(settings).to receive(:sel_browser) { :iexplore } }
107
+ it { expect(subject).to be_true }
108
+ end
109
+ context "settings.sel_browser = :chrome" do
110
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
111
+ it { expect(subject).to be_false }
112
+ end
113
+ context "settings.sel_browser is not specified" do
114
+ before { allow(settings).to receive(:sel_browser) { nil } }
115
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
116
+ end
117
+ end
118
+ context "when selenium_driver? is FALSE" do
119
+ let(:selenium_driver) { false }
120
+ it { expect(subject).to be_false }
121
+ end
122
+ end
123
+ context "when testingbot_driver? is TRUE" do
124
+ let(:testingbot_driver) { true }
125
+ let(:sauce_driver) { false }
126
+ before { allow(settings).to receive(:testingbot_driver?) { testingbot_driver } }
127
+ context "settings.sel_browser = :ie" do
128
+ before do
129
+ allow(settings).to receive(:tb_browser_name) { :ie }
130
+ allow(settings).to receive(:tb_browser_version) { 9 }
131
+ end
132
+ it { expect(subject).to be_true }
133
+ end
134
+ context "settings.tb_browser_name = :iexplore" do
135
+ before do
136
+ allow(settings).to receive(:tb_browser_name) { :iexplore }
137
+ allow(settings).to receive(:tb_browser_version) { 9 }
138
+ end
139
+ it { expect(subject).to be_true }
140
+ end
141
+ context "settings.tb_browser_name = :firefox" do
142
+ before do
143
+ allow(settings).to receive(:tb_browser_name) { :firefox }
144
+ allow(settings).to receive(:tb_browser_version) { 8 }
145
+ end
146
+ it { expect(subject).to be_false }
147
+ end
148
+ context "settings.tb_browser_name is not specified" do
149
+ before { allow(settings).to receive(:tb_browser_name) { nil } }
150
+ it { expect{subject}.to raise_error(TbBrowserNameNotSpecified, "Please check your settings") }
151
+ end
152
+ end
153
+ context "when testingbot_driver? is FALSE" do
154
+ before { allow(self).to receive(:sauce_driver?) { sauce_driver } }
155
+ context "when sauce_driver? is TRUE" do
156
+ let(:testingbot_driver) { false }
157
+ let(:sauce_driver) { true }
158
+ context "settings.sl_browser_name = :ie" do
159
+ before { allow(settings).to receive(:sl_browser_name) { :ie } }
160
+ it { expect(subject).to be_true }
161
+ end
162
+ context "settings.sl_browser_name = :iexplore" do
163
+ before { allow(settings).to receive(:sl_browser_name) { :iexplore } }
164
+ it { expect(subject).to be_true }
165
+ end
166
+ context "settings.sl_browser_name = :chrome" do
167
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
168
+ it { expect(subject).to be_false }
169
+ end
170
+ context "settings.sl_browser_name is not specified" do
171
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
172
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
173
+ end
174
+ end
175
+ end
176
+ context "when selenium_driver? is TRUE" do
177
+ let(:sauce_driver) { false }
178
+ let(:testingbot_driver) { false }
179
+ before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
180
+ context "when selenium_driver? is TRUE" do
181
+ let(:selenium_driver) { true }
182
+ context "settings.sel_browser = :ie" do
183
+ before { allow(settings).to receive(:sel_browser) { :ie } }
184
+ it { expect(subject).to be_true }
185
+ end
186
+ context "settings.sel_browser = :iexplore" do
187
+ before { allow(settings).to receive(:sel_browser) { :iexplore } }
188
+ it { expect(subject).to be_true }
189
+ end
190
+ context "settings.sel_browser = :chrome" do
191
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
192
+ it { expect(subject).to be_false }
193
+ end
194
+ context "settings.sel_browser is not specified" do
195
+ before { allow(settings).to receive(:sel_browser) { nil } }
196
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
197
+ end
198
+ end
199
+ end
200
+ context "when selenium_driver? is FALSE" do
201
+ before { allow(self).to receive(:selenium_driver?) { false } }
202
+ context "when testingbot_driver? is TRUE" do
203
+ let(:testingbot_driver) { true }
204
+ let(:sauce_driver) { false }
205
+ before { allow(settings).to receive(:testingbot_driver?) { testingbot_driver } }
206
+ context "settings.sl_browser_name = :ie" do
207
+ before do
208
+ allow(settings).to receive(:tb_browser_name) { :ie }
209
+ allow(settings).to receive(:tb_browser_version) { 9 }
210
+ end
211
+ it { expect(subject).to be_true }
212
+ end
213
+ context "settings.tb_browser_name = :iexplore" do
214
+ before do
215
+ allow(settings).to receive(:tb_browser_name) { :iexplore }
216
+ allow(settings).to receive(:tb_browser_version) { 9 }
217
+ end
218
+ it { expect(subject).to be_true }
219
+ end
220
+ context "settings.tb_browser_name = :firefox" do
221
+ before do
222
+ allow(settings).to receive(:tb_browser_name) { :firefox }
223
+ allow(settings).to receive(:tb_browser_version) { 8 }
224
+ end
225
+ it { expect(subject).to be_false }
226
+ end
227
+ context "settings.tb_browser_name is not specified" do
228
+ before { allow(settings).to receive(:tb_browser_name) { nil } }
229
+ it { expect{subject}.to raise_error(TbBrowserNameNotSpecified, "Please check your settings") }
230
+ end
231
+ end
232
+ end
233
+ end
234
+ describe "#ff_browser?" do
235
+ subject { ff_browser? }
236
+ before { allow(self).to receive(:sauce_driver?){ sauce_driver} }
237
+ before { allow(self).to receive(:testingbot_driver?){ testingbot_driver} }
238
+ context "when sauce_driver? is TRUE" do
239
+ let(:sauce_driver) { true }
240
+ let(:testingbot_driver) { false }
241
+ context "settings.sl_browser_name = :ff" do
242
+ before { allow(settings).to receive(:sl_browser_name) { :ff } }
243
+ it { expect(subject).to be_true }
244
+ end
245
+ context "settings.sl_browser_name = :firefox" do
246
+ before { allow(settings).to receive(:sl_browser_name) { :firefox } }
247
+ it { expect(subject).to be_true }
248
+ end
249
+ context "settings.sl_browser_name = :chrome" do
250
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
251
+ it { expect(subject).to be_false }
252
+ end
253
+ context "settings.sl_browser_name is not specified" do
254
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
255
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
256
+ end
257
+ end
258
+ context "when sauce_driver? is FALSE" do
259
+ let(:testingbot_driver) { false }
260
+ let(:sauce_driver) { false }
261
+ before { allow(self).to receive(:selenium_driver?){ selenium_driver} }
262
+ context "when selenium_driver? is TRUE" do
263
+ let(:selenium_driver) { true }
264
+ context "settings.sel_browser = :ff" do
265
+ before { allow(settings).to receive(:sel_browser) { :ff } }
266
+ it { expect(subject).to be_true }
267
+ end
268
+ context "settings.sel_browser = :firefox" do
269
+ before { allow(settings).to receive(:sel_browser) { :firefox } }
270
+ it { expect(subject).to be_true }
271
+ end
272
+ context "settings.sel_browser = :chrome" do
273
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
274
+ it { expect(subject).to be_false }
275
+ end
276
+ context "settings.sel_browser is not specified" do
277
+ before { allow(settings).to receive(:sel_browser) { nil } }
278
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
279
+ end
280
+ end
281
+ context "when selenium_driver? is FALSE" do
282
+ let(:selenium_driver) { false }
283
+ it { expect(subject).to be_false }
284
+ end
285
+ end
286
+ context "when testingbot_driver? is TRUE" do
287
+ let(:testingbot_driver) { true }
288
+ let(:sauce_driver) { false }
289
+ before { allow(settings).to receive(:testingbot_driver?) { testingbot_driver } }
290
+ context "settings.tb_browser_name = :ff" do
291
+ before do
292
+ allow(settings).to receive(:tb_browser_name) { :ff }
293
+ allow(settings).to receive(:tb_browser_version) { 8 }
294
+ end
295
+ it { expect(subject).to be_true }
296
+ end
297
+ context "settings.tb_browser_name = :firefox" do
298
+ before do
299
+ allow(settings).to receive(:tb_browser_name) { :firefox }
300
+ allow(settings).to receive(:tb_browser_version) { 8 }
301
+ end
302
+ it { expect(subject).to be_true }
303
+ end
304
+ context "settings.tb_browser_name = :iexplore" do
305
+ before do
306
+ allow(settings).to receive(:tb_browser_name) { :iexplore }
307
+ allow(settings).to receive(:tb_browser_version) { 9 }
308
+ end
309
+ it { expect(subject).to be_false }
310
+ end
311
+ context "settings.tb_browser_name is not specified" do
312
+ before { allow(settings).to receive(:tb_browser_name) { nil } }
313
+ it { expect{subject}.to raise_error(TbBrowserNameNotSpecified, "Please check your settings") }
314
+ end
315
+ end
316
+ context "when testingbot_driver? is FALSE" do
317
+ before { allow(self).to receive(:sauce_driver?) { sauce_driver } }
318
+ context "when sauce_driver? is TRUE" do
319
+ let(:testingbot_driver) { false }
320
+ let(:sauce_driver) { true }
321
+ context "settings.sl_browser_name = :ff" do
322
+ before { allow(settings).to receive(:sl_browser_name) { :ff } }
323
+ it { expect(subject).to be_true }
324
+ end
325
+ context "settings.sl_browser_name = :firefox" do
326
+ before { allow(settings).to receive(:sl_browser_name) { :firefox } }
327
+ it { expect(subject).to be_true }
328
+ end
329
+ context "settings.sl_browser_name = :chrome" do
330
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
331
+ it { expect(subject).to be_false }
332
+ end
333
+ context "settings.sl_browser_name is not specified" do
334
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
335
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
336
+ end
337
+ end
338
+ end
339
+ context "when selenium_driver? is TRUE" do
340
+ let(:sauce_driver) { false }
341
+ let(:testingbot_driver) { false }
342
+ before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
343
+ context "when selenium_driver? is TRUE" do
344
+ let(:selenium_driver) { true }
345
+ context "settings.sel_browser = :ff" do
346
+ before { allow(settings).to receive(:sel_browser) { :ff } }
347
+ it { expect(subject).to be_true }
348
+ end
349
+ context "settings.sel_browser = :firefox" do
350
+ before { allow(settings).to receive(:sel_browser) { :firefox } }
351
+ it { expect(subject).to be_true }
352
+ end
353
+ context "settings.sel_browser = :chrome" do
354
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
355
+ it { expect(subject).to be_false }
356
+ end
357
+ context "settings.sel_browser is not specified" do
358
+ before { allow(settings).to receive(:sel_browser) { nil } }
359
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
360
+ end
361
+ end
362
+ end
363
+ context "when selenium_driver? is FALSE" do
364
+ before { allow(self).to receive(:selenium_driver?) { false } }
365
+ context "when testingbot_driver? is TRUE" do
366
+ let(:testingbot_driver) { true }
367
+ let(:sauce_driver) { false }
368
+ before { allow(settings).to receive(:testingbot_driver?) { testingbot_driver } }
369
+ context "settings.tb_browser_name = :firefox" do
370
+ before do
371
+ allow(settings).to receive(:tb_browser_name) { :firefox }
372
+ allow(settings).to receive(:tb_browser_version) { 8 }
373
+ end
374
+ it { expect(subject).to be_true }
375
+ end
376
+ context "settings.tb_browser_name = :ff" do
377
+ before do
378
+ allow(settings).to receive(:tb_browser_name) { :ff }
379
+ allow(settings).to receive(:tb_browser_version) { 8 }
380
+ end
381
+ it { expect(subject).to be_true }
382
+ end
383
+ context "settings.tb_browser_name = :iexplore" do
384
+ before do
385
+ allow(settings).to receive(:tb_browser_name) { :iexplore }
386
+ allow(settings).to receive(:tb_browser_version) { 9 }
387
+ end
388
+ it { expect(subject).to be_false }
389
+ end
390
+ context "settings.tb_browser_name is not specified" do
391
+ before { allow(settings).to receive(:tb_browser_name) { nil } }
392
+ it { expect{subject}.to raise_error(TbBrowserNameNotSpecified, "Please check your settings") }
393
+ end
394
+ end
395
+
396
+ end
397
+ end
398
+ describe "#chrome_browser?" do
399
+ subject { chrome_browser? }
400
+ before { allow(self).to receive(:sauce_driver?){ sauce_driver} }
401
+ before { allow(self).to receive(:testingbot_driver?){ testingbot_driver} }
402
+ context "when sauce_driver? is TRUE" do
403
+ let(:sauce_driver) { true }
404
+ let(:testingbot_driver) { true }
405
+ context "settings.sl_browser_name = :chrome" do
406
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
407
+ it { expect(subject).to be_true }
408
+ end
409
+ context "settings.sl_browser_name = :firefox" do
410
+ before { allow(settings).to receive(:sl_browser_name) { :firefox } }
411
+ it { expect(subject).to be_false }
412
+ end
413
+ context "settings.sl_browser_name is not specified" do
414
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
415
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
416
+ end
417
+ end
418
+ context "when sauce_driver? is FALSE" do
419
+ let(:sauce_driver) { false }
420
+ let(:testingbot_driver) { false }
421
+ before { allow(self).to receive(:selenium_driver?){ selenium_driver} }
422
+ context "when selenium_driver? is TRUE" do
423
+ let(:selenium_driver) { true }
424
+ context "settings.sel_browser = :chrome" do
425
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
426
+ it { expect(subject).to be_true }
427
+ end
428
+ context "settings.sel_browser = :firefox" do
429
+ before { allow(settings).to receive(:sel_browser) { :firefox } }
430
+ it { expect(subject).to be_false }
431
+ end
432
+ context "settings.sel_browser is not specified" do
433
+ before { allow(settings).to receive(:sel_browser) { nil } }
434
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
435
+ end
436
+ end
437
+ context "when selenium_driver? is FALSE" do
438
+ let(:selenium_driver) { false }
439
+ it { expect(subject).to be_false }
440
+ end
441
+ end
442
+ context "when testingbot_driver? is TRUE" do
443
+ let(:testingbot_driver) { true }
444
+ let(:sauce_driver) { false }
445
+ before { allow(settings).to receive(:testingbot_driver?) { testingbot_driver } }
446
+ context "settings.tb_browser_name = :chrome" do
447
+ before do
448
+ allow(settings).to receive(:tb_browser_name) { :chrome }
449
+ allow(settings).to receive(:tb_browser_version) { 9 }
450
+ end
451
+ it { expect(subject).to be_true }
452
+ end
453
+ context "settings.tb_browser_name = :iexplore" do
454
+ before do
455
+ allow(settings).to receive(:tb_browser_name) { :iexplore }
456
+ allow(settings).to receive(:tb_browser_version) { 9 }
457
+ end
458
+ it { expect(subject).to be_false }
459
+ end
460
+ context "settings.tb_browser_name is not specified" do
461
+ before { allow(settings).to receive(:tb_browser_name) { nil } }
462
+ it { expect{subject}.to raise_error(TbBrowserNameNotSpecified, "Please check your settings") }
463
+ end
464
+ end
465
+ context "when testingbot_driver? is FALSE" do
466
+ before { allow(self).to receive(:sauce_driver?) { sauce_driver } }
467
+ context "when sauce_driver? is TRUE" do
468
+ let(:testingbot_driver) { false }
469
+ let(:sauce_driver) { true }
470
+ context "settings.sl_browser_name = :chrome" do
471
+ before { allow(settings).to receive(:sl_browser_name) { :chrome } }
472
+ it { expect(subject).to be_true }
473
+ end
474
+ context "settings.sl_browser_name = :firefox" do
475
+ before { allow(settings).to receive(:sl_browser_name) { :firefox } }
476
+ it { expect(subject).to be_false }
477
+ end
478
+ context "settings.sl_browser_name is not specified" do
479
+ before { allow(settings).to receive(:sl_browser_name) { nil } }
480
+ it { expect {subject}.to raise_error(SlBrowserNameNotSpecified, "Please check your settings") }
481
+ end
482
+ end
483
+
484
+ end
485
+ context "when selenium_driver? is TRUE" do
486
+ let(:sauce_driver) { false }
487
+ let(:testingbot_driver) { false }
488
+ before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
489
+ context "when selenium_driver? is TRUE" do
490
+ let(:selenium_driver) { true }
491
+ context "settings.sel_browser = :chrome" do
492
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
493
+ it { expect(subject).to be_true }
494
+ end
495
+ context "settings.sel_browser = :firefox" do
496
+ before { allow(settings).to receive(:sel_browser) { :firefox } }
497
+ it { expect(subject).to be_false }
498
+ end
499
+ context "settings.sel_browser is not specified" do
500
+ before { allow(settings).to receive(:sel_browser) { nil } }
501
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
502
+ end
503
+ end
504
+
505
+ end
506
+ context "when selenium_driver? is FALSE" do
507
+ let(:sauce_driver) { false }
508
+ let(:testingbot_driver) { false }
509
+ before { allow(self).to receive(:selenium_driver?){ selenium_driver} }
510
+ context "when selenium_driver? is TRUE" do
511
+ let(:selenium_driver) { true }
512
+ context "settings.sel_browser = :chrome" do
513
+ before { allow(settings).to receive(:sel_browser) { :chrome } }
514
+ it { expect(subject).to be_true }
515
+ end
516
+ context "settings.sel_browser = :firefox" do
517
+ before { allow(settings).to receive(:sel_browser) { :firefox } }
518
+ it { expect(subject).to be_false }
519
+ end
520
+ context "settings.sel_browser is not specified" do
521
+ before { allow(settings).to receive(:sel_browser) { nil } }
522
+ it { expect {subject}.to raise_error(SelBrowserNotSpecified, "Please check your settings") }
523
+ end
524
+ end
525
+ context "when selenium_driver? is FALSE" do
526
+ let(:selenium_driver) { false }
527
+ it { expect(subject).to be_false }
528
+ end
529
+ end
530
+ end
531
+ describe "#app_url" do
532
+ subject { app_url }
533
+ before do
534
+ allow(settings).to receive(:app_base_auth_login) { app_base_auth_login_setting }
535
+ allow(settings).to receive(:app_base_auth_pass) { app_base_auth_pass_setting }
536
+ allow(settings).to receive(:app_protocol) { app_protocol_setting }
537
+ allow(settings).to receive(:app_host) { app_host_setting }
538
+ end
539
+ let(:app_protocol_setting) { nil }
540
+ let(:app_host_setting) { "redmine.strongqa.com" }
541
+ context "when login and password present" do
542
+ let(:app_base_auth_login_setting) { "alex" }
543
+ let(:app_base_auth_pass_setting) { "pa$$w0rd" }
544
+ it{ expect(subject).to eq("http://alex:pa$$w0rd@redmine.strongqa.com") }
545
+ end
546
+ context "when login and password blank" do
547
+ let(:app_base_auth_login_setting) { "" }
548
+ let(:app_base_auth_pass_setting) { "" }
549
+ it{ expect(subject).to eq("http://redmine.strongqa.com") }
550
+ end
551
+ end
552
+ describe "#app_base_url" do
553
+ subject { app_base_url(prefix) }
554
+ before do
555
+ allow(settings).to receive(:app_protocol) { app_protocol_setting }
556
+ allow(settings).to receive(:app_host) { app_host_setting }
557
+ end
558
+ let(:app_protocol_setting) { nil }
559
+ let(:app_host_setting) { "redmine.strongqa.com" }
560
+ context "when login and password present" do
561
+ let(:prefix) { "alex:pa$$w0rd@" }
562
+ it{ expect(subject).to eq("http://alex:pa$$w0rd@redmine.strongqa.com") }
563
+ end
564
+ context "when login and password blank" do
565
+ let(:prefix) { nil }
566
+ it{ expect(subject).to eq("http://redmine.strongqa.com") }
567
+ end
568
+ end
569
+ describe "#duration" do
570
+ context "when more than hour" do
571
+ it{ expect(duration(10000)).to eq("[2h 46m 40s]") }
572
+ end
573
+ context "when 1 hour exactly" do
574
+ it{ expect(duration(3600)).to eq("[1h 0m 0s]") }
575
+ end
576
+ context "when 0 hours and more than minute" do
577
+ it{ expect(duration(2000)).to eq("[33m 20s]") }
578
+ end
579
+ context "when 1 minute exactly" do
580
+ it{ expect(duration(60)).to eq("[1m 0s]") }
581
+ end
582
+ context "when less than minute" do
583
+ it{ expect(duration(45)).to eq("[0m 45s]") }
584
+ end
585
+ context "when zero" do
586
+ it{ expect(duration(0)).to eq("[0m 0s]") }
587
+ end
588
+ end
589
+ describe "#ri" do
590
+ subject { ri 'boom' }
591
+ it { expect {subject}.to raise_error(RuntimeError, /boom/) }
592
+ end
593
+ describe String do
594
+ describe "#open" do
595
+ subject { "my".open(:exit) }
596
+ let(:page_object) { double }
597
+ before do
598
+ stub_const("MyPage", page_object)
599
+ expect(page_object).to receive(:open).with(:exit).once
600
+ end
601
+ it { expect(subject).to be_nil }
602
+ end
603
+ describe "#given" do
604
+ subject { "my".given }
605
+ let(:page_object) { double }
606
+ before do
607
+ stub_const("MyPage", page_object)
608
+ expect(page_object).to receive(:new).once
609
+ end
610
+ it { expect(subject).to be_nil }
611
+ end
612
+ describe "#as_page_class" do
613
+ subject { "my".as_page_class }
614
+ let(:my_page) { double }
615
+ before { stub_const("MyPage", my_page) }
616
+ it { expect(subject).to eql(my_page) }
617
+ end
618
+ end
619
+ end