howitzer 2.0.3 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +69 -11
  3. data/LICENSE +1 -1
  4. data/README.md +21 -17
  5. data/bin/howitzer +7 -6
  6. data/generators/base_generator.rb +31 -17
  7. data/generators/config/config_generator.rb +11 -3
  8. data/generators/config/templates/boot.rb +3 -3
  9. data/generators/config/templates/capybara.rb +6 -131
  10. data/generators/config/templates/default.yml +34 -13
  11. data/generators/config/templates/drivers/appium.rb +25 -0
  12. data/generators/config/templates/drivers/browserstack.rb +23 -0
  13. data/generators/config/templates/drivers/crossbrowsertesting.rb +29 -0
  14. data/generators/config/templates/drivers/headless_chrome.rb +15 -0
  15. data/generators/config/templates/drivers/headless_firefox.rb +23 -0
  16. data/generators/config/templates/drivers/sauce.rb +25 -0
  17. data/generators/config/templates/drivers/selenium.rb +24 -0
  18. data/generators/config/templates/drivers/selenium_grid.rb +31 -0
  19. data/generators/config/templates/drivers/testingbot.rb +24 -0
  20. data/generators/cucumber/cucumber_generator.rb +2 -2
  21. data/generators/cucumber/templates/common_steps.rb +3 -3
  22. data/generators/cucumber/templates/cucumber.rake +5 -13
  23. data/generators/cucumber/templates/cuke_sniffer.rake +2 -2
  24. data/generators/cucumber/templates/env.rb +9 -1
  25. data/generators/cucumber/templates/hooks.rb +8 -2
  26. data/generators/cucumber/templates/transformers.rb +11 -25
  27. data/generators/emails/emails_generator.rb +2 -2
  28. data/generators/emails/templates/example_email.rb +1 -1
  29. data/generators/prerequisites/prerequisites_generator.rb +3 -3
  30. data/generators/prerequisites/templates/base.rb +1 -1
  31. data/generators/prerequisites/templates/{factory_girl.rb → factory_bot.rb} +7 -6
  32. data/generators/prerequisites/templates/users.rb +1 -1
  33. data/generators/root/root_generator.rb +3 -3
  34. data/generators/root/templates/Gemfile.erb +16 -22
  35. data/generators/rspec/rspec_generator.rb +2 -2
  36. data/generators/rspec/templates/rspec.rake +8 -8
  37. data/generators/rspec/templates/spec_helper.rb +6 -5
  38. data/generators/tasks/tasks_generator.rb +2 -2
  39. data/generators/turnip/templates/spec_helper.rb +6 -5
  40. data/generators/turnip/turnip_generator.rb +2 -2
  41. data/generators/web/templates/example_page.rb +1 -1
  42. data/generators/web/web_generator.rb +2 -2
  43. data/lib/howitzer/cache.rb +20 -19
  44. data/lib/howitzer/capybara_helpers.rb +58 -13
  45. data/lib/howitzer/email.rb +3 -2
  46. data/lib/howitzer/exceptions.rb +21 -20
  47. data/lib/howitzer/gmail_api/client.rb +31 -0
  48. data/lib/howitzer/gmail_api.rb +7 -0
  49. data/lib/howitzer/log.rb +6 -6
  50. data/lib/howitzer/mail_adapters/gmail.rb +96 -0
  51. data/lib/howitzer/mail_adapters/mailgun.rb +4 -2
  52. data/lib/howitzer/mail_adapters/mailtrap.rb +108 -0
  53. data/lib/howitzer/mailgun_api/client.rb +3 -2
  54. data/lib/howitzer/mailgun_api/connector.rb +1 -0
  55. data/lib/howitzer/mailgun_api/response.rb +1 -2
  56. data/lib/howitzer/mailtrap_api/client.rb +52 -0
  57. data/lib/howitzer/mailtrap_api.rb +7 -0
  58. data/lib/howitzer/meta/actions.rb +35 -0
  59. data/lib/howitzer/meta/element.rb +40 -0
  60. data/lib/howitzer/meta/entry.rb +62 -0
  61. data/lib/howitzer/meta/iframe.rb +41 -0
  62. data/lib/howitzer/meta/section.rb +30 -0
  63. data/lib/howitzer/meta.rb +11 -0
  64. data/lib/howitzer/utils/string_extensions.rb +6 -2
  65. data/lib/howitzer/version.rb +1 -1
  66. data/lib/howitzer/web/base_section.rb +1 -1
  67. data/lib/howitzer/web/capybara_context_holder.rb +1 -0
  68. data/lib/howitzer/web/capybara_methods_proxy.rb +15 -6
  69. data/lib/howitzer/web/element_dsl.rb +104 -44
  70. data/lib/howitzer/web/iframe_dsl.rb +23 -3
  71. data/lib/howitzer/web/page.rb +16 -4
  72. data/lib/howitzer/web/page_dsl.rb +19 -7
  73. data/lib/howitzer/web/page_validator.rb +27 -26
  74. data/lib/howitzer/web/section.rb +13 -2
  75. data/lib/howitzer/web/section_dsl.rb +65 -30
  76. data/lib/howitzer.rb +66 -10
  77. metadata +67 -133
  78. data/.coveralls.yml +0 -1
  79. data/.gitignore +0 -14
  80. data/.rspec +0 -3
  81. data/.rubocop.yml +0 -44
  82. data/.ruby-gemset +0 -1
  83. data/.travis.yml +0 -7
  84. data/Gemfile +0 -13
  85. data/MAINTENANCE.md +0 -32
  86. data/Rakefile +0 -22
  87. data/features/cli_help.feature +0 -31
  88. data/features/cli_new.feature +0 -349
  89. data/features/cli_unknown.feature +0 -17
  90. data/features/cli_update.feature +0 -178
  91. data/features/cli_version.feature +0 -14
  92. data/features/step_definitions/common_steps.rb +0 -29
  93. data/features/support/env.rb +0 -1
  94. data/features/support/transformers.rb +0 -3
  95. data/generators/root/templates/.gitignore +0 -21
  96. data/generators/root/templates/.rubocop.yml +0 -35
  97. data/generators/turnip/templates/.rspec +0 -1
  98. data/howitzer.gemspec +0 -37
  99. data/lib/howitzer/mail_adapters/debugmail.rb +0 -0
  100. data/spec/config/custom.yml +0 -9
  101. data/spec/spec_helper.rb +0 -72
  102. data/spec/support/generator_helper.rb +0 -21
  103. data/spec/support/logger_helper.rb +0 -13
  104. data/spec/support/mailgun_unit_client.rb +0 -68
  105. data/spec/support/shared_examples/capybara_context_holder.rb +0 -33
  106. data/spec/support/shared_examples/capybara_methods_proxy.rb +0 -94
  107. data/spec/support/shared_examples/dynamic_section_methods.rb +0 -35
  108. data/spec/support/shared_examples/element_dsl.rb +0 -242
  109. data/spec/unit/generators/base_generator_spec.rb +0 -272
  110. data/spec/unit/generators/config_generator_spec.rb +0 -38
  111. data/spec/unit/generators/cucumber_generator_spec.rb +0 -62
  112. data/spec/unit/generators/emails_generator_spec.rb +0 -35
  113. data/spec/unit/generators/prerequisites_generator_spec.rb +0 -53
  114. data/spec/unit/generators/root_generator_spec.rb +0 -72
  115. data/spec/unit/generators/rspec_generator_spec.rb +0 -36
  116. data/spec/unit/generators/tasks_generator_spec.rb +0 -31
  117. data/spec/unit/generators/turnip_generator_spec.rb +0 -52
  118. data/spec/unit/generators/web_generator_spec.rb +0 -52
  119. data/spec/unit/lib/cache_spec.rb +0 -85
  120. data/spec/unit/lib/capybara_helpers_spec.rb +0 -696
  121. data/spec/unit/lib/email_spec.rb +0 -186
  122. data/spec/unit/lib/howitzer_spec.rb +0 -40
  123. data/spec/unit/lib/init_spec.rb +0 -2
  124. data/spec/unit/lib/log_spec.rb +0 -122
  125. data/spec/unit/lib/mail_adapters/abstract_spec.rb +0 -62
  126. data/spec/unit/lib/mail_adapters/mailgun_spec.rb +0 -163
  127. data/spec/unit/lib/mailgun_api/client_spec.rb +0 -58
  128. data/spec/unit/lib/mailgun_api/connector_spec.rb +0 -54
  129. data/spec/unit/lib/mailgun_api/response_spec.rb +0 -28
  130. data/spec/unit/lib/utils/string_extensions_spec.rb +0 -77
  131. data/spec/unit/lib/web/base_section_spec.rb +0 -43
  132. data/spec/unit/lib/web/element_dsl_spec.rb +0 -22
  133. data/spec/unit/lib/web/iframe_dsl_spec.rb +0 -144
  134. data/spec/unit/lib/web/page_dsl_spec.rb +0 -74
  135. data/spec/unit/lib/web/page_spec.rb +0 -349
  136. data/spec/unit/lib/web/page_validator_spec.rb +0 -276
  137. data/spec/unit/lib/web/section_dsl_spec.rb +0 -165
  138. data/spec/unit/lib/web/section_spec.rb +0 -63
  139. data/spec/unit/version_spec.rb +0 -8
@@ -1,696 +0,0 @@
1
- require 'spec_helper'
2
- require 'howitzer/capybara_helpers'
3
-
4
- RSpec.describe Howitzer::CapybaraHelpers do
5
- include Howitzer::CapybaraHelpers
6
-
7
- let(:selenium_driver) { false }
8
- let(:selenium_grid_driver) { false }
9
- let(:phantomjs_driver) { false }
10
- let(:sauce_driver) { false }
11
- let(:test_object) { described_class }
12
-
13
- describe '#cloud_driver?' do
14
- subject { cloud_driver? }
15
- before { allow(Howitzer).to receive(:driver) { driver_setting } }
16
- context 'when sauce driver' do
17
- let(:driver_setting) { :sauce }
18
- it { is_expected.to be_truthy }
19
- end
20
- context 'when testingbot driver' do
21
- let(:driver_setting) { :testingbot }
22
- it { is_expected.to be_truthy }
23
- end
24
- context 'when browserstack driver' do
25
- let(:driver_setting) { :browserstack }
26
- it { is_expected.to be_truthy }
27
- end
28
- context 'when not cloud driver' do
29
- let(:driver_setting) { :phantomjs }
30
- it { is_expected.to be_falsey }
31
- end
32
- context 'when driver specified as String' do
33
- let(:driver_setting) { 'testingbot' }
34
- it { is_expected.to be true }
35
- end
36
- end
37
-
38
- describe '#selenium_driver?' do
39
- subject { selenium_driver? }
40
- before { allow(Howitzer).to receive(:driver) { driver_setting } }
41
- context 'when :selenium' do
42
- let(:driver_setting) { :selenium }
43
- it { is_expected.to be_truthy }
44
- end
45
- context 'when :selenium_grid' do
46
- let(:driver_setting) { :selenium_grid }
47
- it { is_expected.to be_falsey }
48
- end
49
- context 'when not :selenium' do
50
- let(:driver_setting) { :phantomjs }
51
- it { is_expected.to be_falsey }
52
- end
53
- context 'when driver specified as String' do
54
- let(:driver_setting) { 'selenium' }
55
- it { is_expected.to be_truthy }
56
- end
57
- end
58
-
59
- describe '#selenium_grid_driver?' do
60
- subject { selenium_grid_driver? }
61
- before { allow(Howitzer).to receive(:driver) { driver_setting } }
62
- context 'when :selenium_grid' do
63
- let(:driver_setting) { :selenium_grid }
64
- it { is_expected.to be_truthy }
65
- end
66
- context 'when :selenium' do
67
- let(:driver_setting) { :selenium }
68
- it { is_expected.to be_falsey }
69
- end
70
- context 'when not :selenium' do
71
- let(:driver_setting) { :phantomjs }
72
- it { is_expected.to be_falsey }
73
- end
74
- context 'when driver specified as String' do
75
- let(:driver_setting) { 'selenium_grid' }
76
- it { is_expected.to be_truthy }
77
- end
78
- end
79
-
80
- describe '#ie_browser?' do
81
- subject { ie_browser? }
82
- before { allow(self).to receive(:selenium_grid_driver?) { selenium_grid_driver } }
83
- context 'when cloud_driver? is TRUE' do
84
- before { allow(self).to receive(:cloud_driver?) { true } }
85
- context 'Howitzer.cloud_browser_name = :ie' do
86
- before { allow(Howitzer).to receive(:cloud_browser_name) { :ie } }
87
- it { is_expected.to be_truthy }
88
- end
89
- context 'Howitzer.cloud_browser_name = :iexplore' do
90
- before { allow(Howitzer).to receive(:cloud_browser_name) { :iexplore } }
91
- it { is_expected.to be_truthy }
92
- end
93
- context 'Howitzer.cloud_browser_name = :chrome' do
94
- before { allow(Howitzer).to receive(:cloud_browser_name) { :chrome } }
95
- it { is_expected.to be_falsey }
96
- end
97
- context 'Howitzer.cloud_browser_name is not specified' do
98
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
99
- it do
100
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
101
- end
102
- end
103
- end
104
- context 'when cloud_driver? is FALSE' do
105
- before do
106
- allow(self).to receive(:cloud_driver?) { false }
107
- allow(self).to receive(:selenium_driver?) { selenium_driver }
108
- end
109
- context 'when selenium_driver? is TRUE' do
110
- let(:selenium_driver) { true }
111
- context 'Howitzer.selenium_browser = :ie' do
112
- before { allow(Howitzer).to receive(:selenium_browser) { :ie } }
113
- it { is_expected.to be_truthy }
114
- end
115
- context 'Howitzer.selenium_browser = :iexplore' do
116
- before { allow(Howitzer).to receive(:selenium_browser) { :iexplore } }
117
- it { is_expected.to be_truthy }
118
- end
119
- context 'Howitzer.selenium_browser = :chrome' do
120
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
121
- it { is_expected.to be_falsey }
122
- end
123
- context 'Howitzer.selenium_browser is not specified' do
124
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
125
- it do
126
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
127
- end
128
- end
129
- end
130
- context 'when selenium_driver? is FALSE' do
131
- it { is_expected.to be_falsey }
132
- end
133
- context 'when selenium_grid_driver? is TRUE' do
134
- let(:selenium_grid_driver) { true }
135
- context 'Howitzer.selenium_browser = :ie' do
136
- before { allow(Howitzer).to receive(:selenium_browser) { :ie } }
137
- it { is_expected.to be_truthy }
138
- end
139
- context 'Howitzer.selenium_browser = :iexplore' do
140
- before { allow(Howitzer).to receive(:selenium_browser) { :iexplore } }
141
- it { is_expected.to be_truthy }
142
- end
143
- context 'Howitzer.selenium_browser = :chrome' do
144
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
145
- it { is_expected.to be_falsey }
146
- end
147
- context 'Howitzer.selenium_browser is not specified' do
148
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
149
- it do
150
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
151
- end
152
- end
153
- end
154
- context 'when selenium_grid_driver? is FALSE' do
155
- it { is_expected.to be_falsey }
156
- end
157
- end
158
- context 'when selenium_driver? is TRUE' do
159
- before do
160
- allow(self).to receive(:selenium_driver?) { selenium_driver }
161
- allow(self).to receive(:cloud_driver?) { false }
162
- end
163
- context 'when selenium_driver? is TRUE' do
164
- let(:selenium_driver) { true }
165
- context 'Howitzer.selenium_browser = :ie' do
166
- before { allow(Howitzer).to receive(:selenium_browser) { :ie } }
167
- it { is_expected.to be_truthy }
168
- end
169
- context 'Howitzer.selenium_browser = :iexplore' do
170
- before { allow(Howitzer).to receive(:selenium_browser) { :iexplore } }
171
- it { is_expected.to be_truthy }
172
- end
173
- context 'Howitzer.selenium_browser = :chrome' do
174
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
175
- it { is_expected.to be_falsey }
176
- end
177
- context 'Howitzer.selenium_browser is not specified' do
178
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
179
- it do
180
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
181
- end
182
- end
183
- end
184
- end
185
- context 'when selenium_driver? is FALSE' do
186
- before { allow(self).to receive(:selenium_driver?) { false } }
187
- context 'when cloud_driver? is TRUE' do
188
- before { allow(self).to receive(:cloud_driver?) { true } }
189
- context 'Howitzer.cloud_browser_name = :ie' do
190
- before do
191
- allow(Howitzer).to receive(:cloud_browser_name) { :ie }
192
- allow(Howitzer).to receive(:cloud_browser_version) { 9 }
193
- end
194
- it { is_expected.to be_truthy }
195
- end
196
- context 'Howitzer.cloud_browser_name = :iexplore' do
197
- before do
198
- allow(Howitzer).to receive(:cloud_browser_name) { :iexplore }
199
- allow(Howitzer).to receive(:cloud_browser_version) { 9 }
200
- end
201
- it { is_expected.to be_truthy }
202
- end
203
- context 'Howitzer.cloud_browser_name = :firefox' do
204
- before do
205
- allow(Howitzer).to receive(:cloud_browser_name) { :firefox }
206
- allow(Howitzer).to receive(:cloud_browser_version) { 8 }
207
- end
208
- it { is_expected.to be_falsey }
209
- end
210
- context 'Howitzer.cloud_browser_name is not specified' do
211
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
212
- it do
213
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
214
- end
215
- end
216
- end
217
- end
218
- end
219
-
220
- describe '#ff_browser?' do
221
- subject { ff_browser? }
222
- before do
223
- allow(self).to receive(:selenium_grid_driver?) { selenium_grid_driver }
224
- end
225
- context 'when cloud_driver? is TRUE' do
226
- before { allow(self).to receive(:cloud_driver?) { true } }
227
- context 'Howitzer.cloud_browser_name = :ff' do
228
- before { allow(Howitzer).to receive(:cloud_browser_name) { :ff } }
229
- it { is_expected.to be_truthy }
230
- end
231
- context 'Howitzer.cloud_browser_name = :firefox' do
232
- before { allow(Howitzer).to receive(:cloud_browser_name) { :firefox } }
233
- it { is_expected.to be_truthy }
234
- end
235
- context 'Howitzer.cloud_browser_name = :chrome' do
236
- before { allow(Howitzer).to receive(:cloud_browser_name) { :chrome } }
237
- it { is_expected.to be_falsey }
238
- end
239
- context 'Howitzer.cloud_browser_name is not specified' do
240
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
241
- it do
242
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
243
- end
244
- end
245
- end
246
- context 'when cloud_driver? is FALSE' do
247
- before do
248
- allow(self).to receive(:cloud_driver?) { false }
249
- allow(self).to receive(:selenium_driver?) { selenium_driver }
250
- end
251
- context 'when selenium_driver? is TRUE' do
252
- let(:selenium_driver) { true }
253
- context 'Howitzer.selenium_browser = :ff' do
254
- before { allow(Howitzer).to receive(:selenium_browser) { :ff } }
255
- it { is_expected.to be_truthy }
256
- end
257
- context 'Howitzer.selenium_browser = :firefox' do
258
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
259
- it { is_expected.to be_truthy }
260
- end
261
- context 'Howitzer.selenium_browser = :chrome' do
262
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
263
- it { is_expected.to be_falsey }
264
- end
265
- context 'Howitzer.selenium_browser is not specified' do
266
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
267
- it do
268
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
269
- end
270
- end
271
- end
272
- context 'when selenium_driver? is FALSE' do
273
- it { is_expected.to be_falsey }
274
- end
275
- end
276
- context 'when selenium_driver? is TRUE' do
277
- before { allow(self).to receive(:cloud_driver?) { false } }
278
- before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
279
- context 'when selenium_driver? is TRUE' do
280
- let(:selenium_driver) { true }
281
- context 'Howitzer.selenium_browser = :ff' do
282
- before { allow(Howitzer).to receive(:selenium_browser) { :ff } }
283
- it { is_expected.to be_truthy }
284
- end
285
- context 'Howitzer.selenium_browser = :firefox' do
286
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
287
- it { is_expected.to be_truthy }
288
- end
289
- context 'Howitzer.selenium_browser = :chrome' do
290
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
291
- it { is_expected.to be_falsey }
292
- end
293
- context 'Howitzer.selenium_browser is not specified' do
294
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
295
- it do
296
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
297
- end
298
- end
299
- end
300
- end
301
- context 'when selenium_driver? is FALSE' do
302
- before { allow(self).to receive(:selenium_driver?) { false } }
303
- context 'when cloud_driver? is TRUE' do
304
- before { allow(self).to receive(:cloud_driver?) { true } }
305
- context 'Howitzer.cloud_browser_name = :firefox' do
306
- before do
307
- allow(Howitzer).to receive(:cloud_browser_name) { :firefox }
308
- allow(Howitzer).to receive(:cloud_browser_version) { 8 }
309
- end
310
- it { is_expected.to be_truthy }
311
- end
312
- context 'Howitzer.cloud_browser_name = :ff' do
313
- before do
314
- allow(Howitzer).to receive(:cloud_browser_name) { :ff }
315
- allow(Howitzer).to receive(:cloud_browser_version) { 8 }
316
- end
317
- it { is_expected.to be_truthy }
318
- end
319
- context 'Howitzer.cloud_browser_name = :iexplore' do
320
- before do
321
- allow(Howitzer).to receive(:cloud_browser_name) { :iexplore }
322
- allow(Howitzer).to receive(:cloud_browser_version) { 9 }
323
- end
324
- it { is_expected.to be_falsey }
325
- end
326
- context 'Howitzer.cloud_browser_name is not specified' do
327
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
328
- it do
329
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
330
- end
331
- end
332
- end
333
- context 'when selenium_grid_driver? is TRUE' do
334
- before { allow(self).to receive(:selenium_grid_driver?) { selenium_grid_driver } }
335
- before { allow(self).to receive(:cloud_driver?) { false } }
336
- context 'when selenium_grid_driver? is TRUE' do
337
- let(:selenium_grid_driver) { true }
338
- context 'Howitzer.selenium_browser = :ff' do
339
- before { allow(Howitzer).to receive(:selenium_browser) { :ff } }
340
- it { is_expected.to be_truthy }
341
- end
342
- context 'Howitzer.selenium_browser = :firefox' do
343
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
344
- it { is_expected.to be_truthy }
345
- end
346
- context 'Howitzer.selenium_browser = :chrome' do
347
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
348
- it { is_expected.to be_falsey }
349
- end
350
- context 'Howitzer.selenium_browser is not specified' do
351
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
352
- it do
353
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
354
- end
355
- end
356
- end
357
- end
358
- context 'when selenium_grid_driver? is FALSE' do
359
- before { allow(self).to receive(:selenium_grid_driver?) { false } }
360
- context 'when cloud_driver? is TRUE' do
361
- before { allow(self).to receive(:cloud_driver?) { true } }
362
- context 'Howitzer.cloud_browser_name = :firefox' do
363
- before do
364
- allow(Howitzer).to receive(:cloud_browser_name) { :firefox }
365
- allow(Howitzer).to receive(:cloud_browser_version) { 8 }
366
- end
367
- it { is_expected.to be_truthy }
368
- end
369
- context 'Howitzer.cloud_browser_name = :ff' do
370
- before do
371
- allow(Howitzer).to receive(:cloud_browser_name) { :ff }
372
- allow(Howitzer).to receive(:cloud_browser_version) { 8 }
373
- end
374
- it { is_expected.to be_truthy }
375
- end
376
- context 'Howitzer.cloud_browser_name = :iexplore' do
377
- before do
378
- allow(Howitzer).to receive(:cloud_browser_name) { :iexplore }
379
- allow(Howitzer).to receive(:cloud_browser_version) { 9 }
380
- end
381
- it { is_expected.to be_falsey }
382
- end
383
- context 'Howitzer.cloud_browser_name is not specified' do
384
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
385
- it do
386
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
387
- end
388
- end
389
- end
390
- end
391
- end
392
- end
393
-
394
- describe '#chrome_browser?' do
395
- subject { chrome_browser? }
396
- before { allow(self).to receive(:selenium_grid_driver?) { selenium_grid_driver } }
397
- context 'when cloud_driver? is TRUE' do
398
- before { allow(self).to receive(:cloud_driver?) { true } }
399
- context 'Howitzer.cloud_browser_name = :chrome' do
400
- before { allow(Howitzer).to receive(:cloud_browser_name) { :chrome } }
401
- it { is_expected.to be_truthy }
402
- end
403
- context 'Howitzer.cloud_browser_name = :firefox' do
404
- before { allow(Howitzer).to receive(:cloud_browser_name) { :firefox } }
405
- it { is_expected.to be_falsey }
406
- end
407
- context 'Howitzer.cloud_browser_name is not specified' do
408
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
409
- it do
410
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
411
- end
412
- end
413
- end
414
- context 'when selenium_driver? is TRUE' do
415
- before { allow(self).to receive(:cloud_driver?) { false } }
416
- before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
417
- context 'when selenium_driver? is TRUE' do
418
- let(:selenium_driver) { true }
419
- context 'Howitzer.selenium_browser = :chrome' do
420
- before { allow(Howitzer).to receive(:selenium_browser) { :chrome } }
421
- it { is_expected.to be_truthy }
422
- end
423
- context 'Howitzer.selenium_browser = :firefox' do
424
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
425
- it { is_expected.to be_falsey }
426
- end
427
- context 'Howitzer.selenium_browser is not specified' do
428
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
429
- it do
430
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
431
- end
432
- end
433
- end
434
- end
435
- end
436
-
437
- describe '#safari_browser?' do
438
- subject { safari_browser? }
439
- before { allow(self).to receive(:selenium_grid_driver?) { selenium_grid_driver } }
440
- context 'when cloud_driver? is TRUE' do
441
- before { allow(self).to receive(:cloud_driver?) { true } }
442
- context 'Howitzer.cloud_browser_name = :safari' do
443
- before { allow(Howitzer).to receive(:cloud_browser_name) { :safari } }
444
- it { is_expected.to be_truthy }
445
- end
446
- context 'Howitzer.cloud_browser_name = :firefox' do
447
- before { allow(Howitzer).to receive(:cloud_browser_name) { :firefox } }
448
- it { is_expected.to be_falsey }
449
- end
450
- context 'Howitzer.cloud_browser_name is not specified' do
451
- before { allow(Howitzer).to receive(:cloud_browser_name) { nil } }
452
- it do
453
- expect { subject }.to raise_error(Howitzer::CloudBrowserNotSpecifiedError, 'Please check your settings')
454
- end
455
- end
456
- end
457
- context 'when sauce_driver? is FALSE' do
458
- before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
459
- before { allow(self).to receive(:cloud_driver?) { false } }
460
- context 'when selenium_driver? is TRUE' do
461
- let(:selenium_driver) { true }
462
- context 'Howitzer.selenium_browser = :safari' do
463
- before { allow(Howitzer).to receive(:selenium_browser) { :safari } }
464
- it { is_expected.to be_truthy }
465
- end
466
- context 'Howitzer.selenium_browser = :firefox' do
467
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
468
- it { is_expected.to be_falsey }
469
- end
470
- context 'Howitzer.selenium_browser is not specified' do
471
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
472
- it do
473
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
474
- end
475
- end
476
- end
477
- context 'when selenium_driver? is FALSE' do
478
- it { is_expected.to be_falsey }
479
- end
480
- end
481
- context 'when selenium_driver? is TRUE' do
482
- before { allow(self).to receive(:cloud_driver?) { false } }
483
- before { allow(self).to receive(:selenium_driver?) { selenium_driver } }
484
- context 'when selenium_driver? is TRUE' do
485
- let(:selenium_driver) { true }
486
- context 'Howitzer.selenium_browser = :safari' do
487
- before { allow(Howitzer).to receive(:selenium_browser) { :safari } }
488
- it { is_expected.to be_truthy }
489
- end
490
- context 'Howitzer.selenium_browser = :firefox' do
491
- before { allow(Howitzer).to receive(:selenium_browser) { :firefox } }
492
- it { is_expected.to be_falsey }
493
- end
494
- context 'Howitzer.selenium_browser is not specified' do
495
- before { allow(Howitzer).to receive(:selenium_browser) { nil } }
496
- it do
497
- expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError, 'Please check your settings')
498
- end
499
- end
500
- end
501
- end
502
- end
503
- describe '#duration' do
504
- context 'when more than hour' do
505
- it { expect(duration(10_000)).to eq('[2h 46m 40s]') }
506
- end
507
- context 'when 1 hour exactly' do
508
- it { expect(duration(3600)).to eq('[1h 0m 0s]') }
509
- end
510
- context 'when 0 hours and more than minute' do
511
- it { expect(duration(2000)).to eq('[33m 20s]') }
512
- end
513
- context 'when 1 minute exactly' do
514
- it { expect(duration(60)).to eq('[1m 0s]') }
515
- end
516
- context 'when less than minute' do
517
- it { expect(duration(45)).to eq('[0m 45s]') }
518
- end
519
- context 'when zero' do
520
- it { expect(duration(0)).to eq('[0m 0s]') }
521
- end
522
- end
523
-
524
- describe '.sauce_resource_path' do
525
- subject { sauce_resource_path(kind) }
526
- let(:name) { 'test_name' }
527
- before do
528
- allow(Howitzer).to receive(:cloud_auth_login) { 'vlad' }
529
- allow(Howitzer).to receive(:cloud_auth_pass) { '11111' }
530
- allow(self).to receive(:session_id) { '12341234' }
531
- end
532
- context 'when kind video' do
533
- let(:kind) { :video }
534
- it { is_expected.to eql('https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/video.flv') }
535
- end
536
- context 'when kind server_log' do
537
- let(:kind) { :server_log }
538
- it { is_expected.to eql('https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/selenium-server.log') }
539
- end
540
- context 'when unknown kind' do
541
- let(:kind) { :unknown }
542
- it { expect { subject }.to raise_error(ArgumentError, "Unknown 'unknown' kind") }
543
- end
544
- end
545
-
546
- describe '.update_sauce_job_statu' do
547
- subject { update_sauce_job_status }
548
- before do
549
- allow(Howitzer).to receive(:cloud_auth_login) { 'vlad1' }
550
- allow(Howitzer).to receive(:cloud_auth_pass) { '22222' }
551
- allow(self).to receive(:session_id) { '12341234' }
552
- stub_const('RestClient', double)
553
- end
554
-
555
- it do
556
- expect(RestClient).to receive(:put).with(
557
- 'http://vlad1:22222@saucelabs.com/rest/v1/vlad1/jobs/12341234',
558
- '{}',
559
- content_type: :json,
560
- accept: :json
561
- ).once
562
- subject
563
- end
564
- end
565
-
566
- describe '.update_cloud_job_status' do
567
- subject { update_cloud_job_status(status: true) }
568
- context 'when sauce driver' do
569
- before do
570
- allow(Howitzer).to receive(:driver) { 'sauce' }
571
- expect(self).to receive(:update_sauce_job_status).with(status: true) { true }
572
- end
573
- it { is_expected.to eq(true) }
574
- end
575
- context 'when other driver' do
576
- before { allow(Howitzer).to receive(:driver) { 'browserstack' } }
577
- it { is_expected.to eq('[NOT IMPLEMENTED]') }
578
- end
579
- end
580
-
581
- describe '.session_id' do
582
- subject { session_id }
583
- before do
584
- browser = double
585
- current_session = double
586
- driver = double
587
- instance_variable = double
588
- allow(Capybara).to receive(:current_session) { current_session }
589
- allow(current_session).to receive(:driver) { driver }
590
- allow(driver).to receive(:browser) { browser }
591
- allow(browser).to receive(:instance_variable_get).with(:@bridge) { instance_variable }
592
- allow(instance_variable).to receive(:session_id) { 'test' }
593
- end
594
-
595
- it { is_expected.to eql('test') }
596
- end
597
-
598
- describe '.required_cloud_caps' do
599
- subject { required_cloud_caps }
600
- before do
601
- allow(Howitzer).to receive(:cloud_platform) { 'Windows' }
602
- allow(Howitzer).to receive(:cloud_browser_name) { 'Safari' }
603
- allow(Howitzer).to receive(:cloud_browser_version) { '10.0' }
604
- allow(self).to receive(:prefix_name) { 'Suite' }
605
- end
606
- it 'should return correct hash' do
607
- is_expected.to eq(
608
- platform: 'Windows',
609
- browserName: 'Safari',
610
- version: '10.0',
611
- name: 'Suite Safari'
612
- )
613
- end
614
- end
615
-
616
- describe '.remote_file_detector' do
617
- subject { remote_file_detector }
618
- it 'should return lambda' do
619
- is_expected.to be_a(Proc)
620
- end
621
-
622
- it 'should return nil when file missing' do
623
- expect(subject.call('unknown.file')).to be_nil
624
- end
625
- end
626
-
627
- describe '.cloud_driver' do
628
- let(:app) { double(:app) }
629
- let(:caps) { double(:caps) }
630
- let(:url) { 'https://example.com' }
631
- let(:file_detector) { double(:file) }
632
- let(:driver) { double(:driver) }
633
- let(:driver_browser) { double(:driver_browser) }
634
- let(:cap_class) { double(:cap_class) }
635
- let(:des_caps) { double(:des_class) }
636
- let(:http_class) { double(:http_class) }
637
- let(:http_client) { double(:http_client) }
638
- subject { cloud_driver(app, caps, url) }
639
- before do
640
- allow(Howitzer).to receive(:cloud_http_idle_timeout) { 10 }
641
- allow(self).to receive(:remote_file_detector) { file_detector }
642
- stub_const('Selenium::WebDriver::Remote::Capabilities', cap_class)
643
- allow(cap_class).to receive(:new).with(caps) { des_caps }
644
- stub_const('Selenium::WebDriver::Remote::Http::Default', http_class)
645
- allow(http_class).to receive(:new).with(no_args) { http_client }
646
- expect(http_client).to receive(:timeout=).with(10)
647
- allow(Capybara::Selenium::Driver).to receive(:new).with(app, kind_of(Hash)) { driver }
648
- expect(driver).to receive(:browser) { driver_browser }
649
- expect(driver_browser).to receive(:file_detector=).with(file_detector)
650
- end
651
- it { is_expected.to eq(driver) }
652
- end
653
-
654
- describe '.cloud_resource_path' do
655
- subject { cloud_resource_path(:video) }
656
- context 'when sauce driver' do
657
- before do
658
- allow(Howitzer).to receive(:driver) { 'sauce' }
659
- expect(self).to receive(:sauce_resource_path).with(:video) { true }
660
- end
661
- it { is_expected.to eq(true) }
662
- end
663
- context 'when other driver' do
664
- before { allow(Howitzer).to receive(:driver) { 'browserstack' } }
665
- it { is_expected.to eq('[NOT IMPLEMENTED]') }
666
- end
667
- end
668
-
669
- describe '.prefix_name' do
670
- subject { prefix_name }
671
- context 'when current rake task present' do
672
- before { Howitzer.current_rake_task = 'Foo' }
673
- after { Howitzer.current_rake_task = nil }
674
- it { is_expected.to eq('FOO') }
675
- end
676
- context 'when rake_task_name empty' do
677
- it { is_expected.to eq('ALL') }
678
- end
679
- end
680
-
681
- describe '.load_driver_gem!' do
682
- subject { load_driver_gem!(:webkit, 'capybara-webkit', 'capybara-webkit') }
683
- context 'when possible to require' do
684
- before { allow(self).to receive(:require).with('capybara-webkit') { true } }
685
- it { expect { subject }.not_to raise_error }
686
- end
687
- context 'when impossible to require' do
688
- it do
689
- expect { subject }.to raise_error(
690
- LoadError,
691
- "`:webkit` driver is unable to load `capybara-webkit`, please add `gem 'capybara-webkit'` to your Gemfile."
692
- )
693
- end
694
- end
695
- end
696
- end