mediawiki_selenium 0.4.3 → 1.0.0.pre.1

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitreview +1 -1
  3. data/.rspec +1 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -1
  6. data/README.md +108 -55
  7. data/bin/mediawiki-selenium-init +5 -0
  8. data/lib/mediawiki_selenium.rb +10 -19
  9. data/lib/mediawiki_selenium/browser_factory.rb +24 -0
  10. data/lib/mediawiki_selenium/browser_factory/base.rb +212 -0
  11. data/lib/mediawiki_selenium/browser_factory/chrome.rb +27 -0
  12. data/lib/mediawiki_selenium/browser_factory/firefox.rb +34 -0
  13. data/lib/mediawiki_selenium/browser_factory/phantomjs.rb +21 -0
  14. data/lib/mediawiki_selenium/configuration_error.rb +4 -0
  15. data/lib/mediawiki_selenium/environment.rb +494 -0
  16. data/lib/mediawiki_selenium/initializer.rb +19 -0
  17. data/lib/mediawiki_selenium/page_factory.rb +38 -0
  18. data/lib/mediawiki_selenium/remote_browser_factory.rb +87 -0
  19. data/lib/mediawiki_selenium/step_definitions.rb +5 -0
  20. data/lib/mediawiki_selenium/support.rb +3 -0
  21. data/lib/mediawiki_selenium/support/env.rb +3 -127
  22. data/lib/mediawiki_selenium/support/hooks.rb +23 -34
  23. data/lib/mediawiki_selenium/support/modules/api_helper.rb +44 -5
  24. data/lib/mediawiki_selenium/support/pages.rb +4 -0
  25. data/lib/mediawiki_selenium/support/pages/api_page.rb +1 -0
  26. data/lib/mediawiki_selenium/support/pages/login_page.rb +3 -12
  27. data/lib/mediawiki_selenium/support/pages/random_page.rb +2 -12
  28. data/lib/mediawiki_selenium/support/pages/reset_preferences_page.rb +3 -12
  29. data/lib/mediawiki_selenium/version.rb +1 -1
  30. data/mediawiki_selenium.gemspec +9 -3
  31. data/spec/api_helper_spec.rb +84 -0
  32. data/spec/browser_factory/base_spec.rb +211 -0
  33. data/spec/browser_factory/chrome_spec.rb +36 -0
  34. data/spec/browser_factory/firefox_spec.rb +60 -0
  35. data/spec/browser_factory/phantomjs_spec.rb +38 -0
  36. data/spec/environment_spec.rb +474 -0
  37. data/spec/page_factory_spec.rb +61 -0
  38. data/spec/remote_browser_factory_spec.rb +50 -0
  39. data/spec/spec_helper.rb +4 -0
  40. data/templates/tests/browser/environments.yml +35 -0
  41. data/templates/tests/browser/features/support/env.rb +6 -0
  42. metadata +122 -20
  43. data/lib/mediawiki_selenium/support/modules/sauce_helper.rb +0 -13
  44. data/lib/mediawiki_selenium/support/modules/url_module.rb +0 -21
  45. data/spec/README +0 -2
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ module MediawikiSelenium
4
+ describe PageFactory do
5
+ let(:env) { Environment.new(config).extend(PageFactory) }
6
+ let(:config) { {} }
7
+
8
+ it "also includes page-object's factory" do
9
+ expect(env).to be_a(::PageObject::PageFactory)
10
+ end
11
+
12
+ describe "#on_page" do
13
+ subject { env.on_page(page_class, { using_params: {} }, visit) }
14
+
15
+ let(:browser) { double("Watir::Browser") }
16
+
17
+ context "when told to visit a page" do
18
+ let(:visit) { true }
19
+ let(:config) { { mediawiki_url: "http://an.example/wiki/" } }
20
+
21
+ let(:page_object_platform) { double("PageObject::WatirPageObject") }
22
+
23
+ before do
24
+ expect(env).to receive(:browser)
25
+ allow_any_instance_of(page_class).to receive(:initialize_browser)
26
+ end
27
+
28
+ context "where the page URL is defined" do
29
+ let(:page_class) do
30
+ Class.new do
31
+ include ::PageObject
32
+ page_url "Special:RandomPage"
33
+ end
34
+ end
35
+
36
+ it "qualifies the path with the configured :mediawiki_url" do
37
+ expect_any_instance_of(page_class).to receive(:platform).
38
+ and_return(page_object_platform)
39
+
40
+ expect(page_object_platform).to receive(:navigate_to).
41
+ with("http://an.example/wiki/Special:RandomPage")
42
+
43
+ subject
44
+ end
45
+ end
46
+
47
+ context "where the page URL is undefined" do
48
+ let(:page_class) do
49
+ Class.new do
50
+ include ::PageObject
51
+ end
52
+ end
53
+
54
+ it "never attempts to qualify one but still works" do
55
+ expect { subject }.not_to raise_error
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+ require "mediawiki_selenium/browser_factory/base"
3
+
4
+ module MediawikiSelenium
5
+ describe RemoteBrowserFactory do
6
+ subject { factory }
7
+
8
+ let(:factory_class) { Class.new(BrowserFactory::Base) }
9
+ let(:factory) { factory_class.new(:foo).extend(RemoteBrowserFactory) }
10
+
11
+ it { is_expected.to be_a(RemoteBrowserFactory) }
12
+
13
+ describe "#browser_options" do
14
+ subject { factory.browser_options(config) }
15
+
16
+ let(:config) { {} }
17
+ let(:capabilities) { double(Selenium::WebDriver::Remote::Capabilities) }
18
+
19
+ before do
20
+ expect(Selenium::WebDriver::Remote::Capabilities).to receive(:foo).and_return(capabilities)
21
+ end
22
+
23
+ context "given a sauce_ondemand_username and sauce_ondemand_access_key" do
24
+ let(:config) { { sauce_ondemand_username: "foo", sauce_ondemand_access_key: "bar" } }
25
+
26
+ it "configures the remote webdriver url" do
27
+ expect(subject[:url]).to eq(URI.parse("http://foo:bar@ondemand.saucelabs.com/wd/hub"))
28
+ end
29
+ end
30
+
31
+ context "given a browser platform" do
32
+ let(:config) { { platform: "foo" } }
33
+
34
+ it "configures the browser platform" do
35
+ expect(capabilities).to receive(:platform=).with("foo")
36
+ subject
37
+ end
38
+ end
39
+
40
+ context "given a browser version" do
41
+ let(:config) { { version: "123" } }
42
+
43
+ it "configures the browser version" do
44
+ expect(capabilities).to receive(:version=).with("123")
45
+ subject
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,4 @@
1
+ require "bundler/setup"
2
+ require "mediawiki_selenium"
3
+
4
+ Bundler.require(:development)
@@ -0,0 +1,35 @@
1
+ # Customize this configuration as necessary to provide defaults for various
2
+ # test environments.
3
+ #
4
+ # The set of defaults to use is determined by the MEDIAWIKI_ENVIRONMENT
5
+ # environment variable.
6
+ #
7
+ # export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
8
+ # bundle exec cucumber
9
+ #
10
+ # Additional variables set by the environment will override the corresponding
11
+ # defaults defined here.
12
+ #
13
+ # export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
14
+ # export MEDIAWIKI_USER=Selenium_user2
15
+ # bundle exec cucumber
16
+ #
17
+ mw-vagrant-host:
18
+ mediawiki_url: http://127.0.0.1:8080/wiki/
19
+ mediawiki_user: Selenium_user
20
+ mediawiki_password: vagrant
21
+
22
+ mw-vagrant-guest:
23
+ mediawiki_url: http://127.0.0.1/wiki/
24
+ mediawiki_user: Selenium_user
25
+ mediawiki_password: vagrant
26
+
27
+ beta:
28
+ mediawiki_url: http://en.wikipedia.beta.wmflabs.org/wiki/
29
+ mediawiki_user: Selenium_user
30
+ # mediawiki_password: SET THIS IN THE ENVIRONMENT!
31
+
32
+ test2:
33
+ mediawiki_url: http://test2.wikipedia.org/wiki/
34
+ mediawiki_user: Selenium_user
35
+ # mediawiki_password: SET THIS IN THE ENVIRONMENT!
@@ -0,0 +1,6 @@
1
+ require "mediawiki_selenium"
2
+
3
+ require "mediawiki_selenium/support/env"
4
+ require "mediawiki_selenium/support/hooks"
5
+ require "mediawiki_selenium/support/pages"
6
+ require "mediawiki_selenium/step_definitions"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediawiki_selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 1.0.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris McMahon
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2015-06-03 00:00:00.000000000 Z
16
+ date: 2015-01-17 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: cucumber
@@ -170,44 +170,93 @@ dependencies:
170
170
  - !ruby/object:Gem::Version
171
171
  version: 1.2.0
172
172
  - !ruby/object:Gem::Dependency
173
- name: redcarpet
173
+ name: thor
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: '0.19'
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: 0.19.1
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '0.19'
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: 0.19.1
192
+ - !ruby/object:Gem::Dependency
193
+ name: bundler
174
194
  requirement: !ruby/object:Gem::Requirement
175
195
  requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '1.6'
176
199
  - - ">="
177
200
  - !ruby/object:Gem::Version
178
- version: '0'
201
+ version: 1.6.3
179
202
  type: :development
180
203
  prerelease: false
181
204
  version_requirements: !ruby/object:Gem::Requirement
182
205
  requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.6'
183
209
  - - ">="
184
210
  - !ruby/object:Gem::Version
185
- version: '0'
211
+ version: 1.6.3
186
212
  - !ruby/object:Gem::Dependency
187
- name: rspec-core
213
+ name: yard
188
214
  requirement: !ruby/object:Gem::Requirement
189
215
  requirements:
190
216
  - - "~>"
191
217
  - !ruby/object:Gem::Version
192
- version: '2.14'
218
+ version: '0.8'
193
219
  - - ">="
194
220
  - !ruby/object:Gem::Version
195
- version: 2.14.4
221
+ version: 0.8.7.4
196
222
  type: :development
197
223
  prerelease: false
198
224
  version_requirements: !ruby/object:Gem::Requirement
199
225
  requirements:
200
226
  - - "~>"
201
227
  - !ruby/object:Gem::Version
202
- version: '2.14'
228
+ version: '0.8'
203
229
  - - ">="
204
230
  - !ruby/object:Gem::Version
205
- version: 2.14.4
231
+ version: 0.8.7.4
232
+ - !ruby/object:Gem::Dependency
233
+ name: redcarpet
234
+ requirement: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: '3.2'
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: 3.2.0
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - "~>"
247
+ - !ruby/object:Gem::Version
248
+ version: '3.2'
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: 3.2.0
206
252
  - !ruby/object:Gem::Dependency
207
253
  name: rubocop
208
254
  requirement: !ruby/object:Gem::Requirement
209
255
  requirements:
210
256
  - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: '0.26'
259
+ - - ">="
211
260
  - !ruby/object:Gem::Version
212
261
  version: 0.26.1
213
262
  type: :development
@@ -215,22 +264,51 @@ dependencies:
215
264
  version_requirements: !ruby/object:Gem::Requirement
216
265
  requirements:
217
266
  - - "~>"
267
+ - !ruby/object:Gem::Version
268
+ version: '0.26'
269
+ - - ">="
218
270
  - !ruby/object:Gem::Version
219
271
  version: 0.26.1
220
272
  - !ruby/object:Gem::Dependency
221
- name: yard
273
+ name: rspec-core
222
274
  requirement: !ruby/object:Gem::Requirement
223
275
  requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: '2.14'
224
279
  - - ">="
225
280
  - !ruby/object:Gem::Version
226
- version: '0'
281
+ version: 2.14.4
227
282
  type: :development
228
283
  prerelease: false
229
284
  version_requirements: !ruby/object:Gem::Requirement
230
285
  requirements:
286
+ - - "~>"
287
+ - !ruby/object:Gem::Version
288
+ version: '2.14'
231
289
  - - ">="
232
290
  - !ruby/object:Gem::Version
233
- version: '0'
291
+ version: 2.14.4
292
+ - !ruby/object:Gem::Dependency
293
+ name: rspec-mocks
294
+ requirement: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '2.14'
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: 2.14.4
302
+ type: :development
303
+ prerelease: false
304
+ version_requirements: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - "~>"
307
+ - !ruby/object:Gem::Version
308
+ version: '2.14'
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: 2.14.4
234
312
  description: |-
235
313
  Several MediaWiki extensions share code that makes it easy to run Selenium tests. This gem
236
314
  makes it easy to update the shared code.
@@ -241,12 +319,14 @@ email:
241
319
  - neverett@wikimedia.org
242
320
  - tobias.gritschacher@wikimedia.de
243
321
  - zeljko.filipin@gmail.com
244
- executables: []
322
+ executables:
323
+ - mediawiki-selenium-init
245
324
  extensions: []
246
325
  extra_rdoc_files: []
247
326
  files:
248
327
  - ".gitignore"
249
328
  - ".gitreview"
329
+ - ".rspec"
250
330
  - ".rubocop.yml"
251
331
  - ".rubocop_todo.yml"
252
332
  - ".yardopts"
@@ -254,18 +334,30 @@ files:
254
334
  - Gemfile
255
335
  - LICENSE
256
336
  - README.md
337
+ - bin/mediawiki-selenium-init
257
338
  - lib/mediawiki_selenium.rb
339
+ - lib/mediawiki_selenium/browser_factory.rb
340
+ - lib/mediawiki_selenium/browser_factory/base.rb
341
+ - lib/mediawiki_selenium/browser_factory/chrome.rb
342
+ - lib/mediawiki_selenium/browser_factory/firefox.rb
343
+ - lib/mediawiki_selenium/browser_factory/phantomjs.rb
344
+ - lib/mediawiki_selenium/configuration_error.rb
345
+ - lib/mediawiki_selenium/environment.rb
346
+ - lib/mediawiki_selenium/initializer.rb
347
+ - lib/mediawiki_selenium/page_factory.rb
348
+ - lib/mediawiki_selenium/remote_browser_factory.rb
349
+ - lib/mediawiki_selenium/step_definitions.rb
258
350
  - lib/mediawiki_selenium/step_definitions/login_steps.rb
259
351
  - lib/mediawiki_selenium/step_definitions/navigation_steps.rb
260
352
  - lib/mediawiki_selenium/step_definitions/preferences_steps.rb
261
353
  - lib/mediawiki_selenium/step_definitions/resource_loader_steps.rb
262
354
  - lib/mediawiki_selenium/step_definitions/upload_file_steps.rb
355
+ - lib/mediawiki_selenium/support.rb
263
356
  - lib/mediawiki_selenium/support/env.rb
264
357
  - lib/mediawiki_selenium/support/hooks.rb
265
358
  - lib/mediawiki_selenium/support/modules/api_helper.rb
266
- - lib/mediawiki_selenium/support/modules/sauce_helper.rb
267
359
  - lib/mediawiki_selenium/support/modules/strict_pending.rb
268
- - lib/mediawiki_selenium/support/modules/url_module.rb
360
+ - lib/mediawiki_selenium/support/pages.rb
269
361
  - lib/mediawiki_selenium/support/pages/api_page.rb
270
362
  - lib/mediawiki_selenium/support/pages/login_page.rb
271
363
  - lib/mediawiki_selenium/support/pages/random_page.rb
@@ -274,7 +366,17 @@ files:
274
366
  - lib/mediawiki_selenium/version.rb
275
367
  - lib/mediawiki_selenium/warnings_formatter.rb
276
368
  - mediawiki_selenium.gemspec
277
- - spec/README
369
+ - spec/api_helper_spec.rb
370
+ - spec/browser_factory/base_spec.rb
371
+ - spec/browser_factory/chrome_spec.rb
372
+ - spec/browser_factory/firefox_spec.rb
373
+ - spec/browser_factory/phantomjs_spec.rb
374
+ - spec/environment_spec.rb
375
+ - spec/page_factory_spec.rb
376
+ - spec/remote_browser_factory_spec.rb
377
+ - spec/spec_helper.rb
378
+ - templates/tests/browser/environments.yml
379
+ - templates/tests/browser/features/support/env.rb
278
380
  homepage: https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/selenium
279
381
  licenses:
280
382
  - GPL-2
@@ -290,12 +392,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
290
392
  version: '0'
291
393
  required_rubygems_version: !ruby/object:Gem::Requirement
292
394
  requirements:
293
- - - ">="
395
+ - - ">"
294
396
  - !ruby/object:Gem::Version
295
- version: '0'
397
+ version: 1.3.1
296
398
  requirements: []
297
399
  rubyforge_project:
298
- rubygems_version: 2.4.3
400
+ rubygems_version: 2.2.2
299
401
  signing_key:
300
402
  specification_version: 4
301
403
  summary: An easy way to run MediaWiki Selenium tests.
@@ -1,13 +0,0 @@
1
- module MediawikiSelenium
2
- module SauceHelper
3
- # The current Sauce session ID.
4
- #
5
- # @return [String]
6
- #
7
- def sauce_session_id
8
- @session_id ||= @browser.driver.instance_variable_get(:@bridge).session_id if @browser
9
- rescue StandardError
10
- nil
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- =begin
2
- This file is subject to the license terms in the LICENSE file found in the
3
- mediawiki_selenium top-level directory and at
4
- https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
5
- mediawiki_selenium, including this file, may be copied, modified, propagated, or
6
- distributed except according to the terms contained in the LICENSE file.
7
- Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
8
- mediawiki_selenium top-level directory and at
9
- https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
10
- =end
11
-
12
- module URL
13
- def self.url(name)
14
- if ENV["MEDIAWIKI_URL"]
15
- mediawiki_url = ENV["MEDIAWIKI_URL"]
16
- else
17
- mediawiki_url = "http://en.wikipedia.beta.wmflabs.org/wiki/"
18
- end
19
- "#{mediawiki_url}#{name}"
20
- end
21
- end