mediawiki_selenium 0.4.3 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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