mediawiki_selenium 0.2.26 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f079ad42db103a267db048e2caf9bb03e910911d
4
- data.tar.gz: b0c542267736ce3e2956b902e8b43b90e74f7a23
3
+ metadata.gz: 39a9f6171eeccfe111262d9a406ca3d7a569ecfc
4
+ data.tar.gz: 3232fb53eea9d230aaeec39878ea44d987859f70
5
5
  SHA512:
6
- metadata.gz: d1760d96c06c03b8e49cc292b7fa0172da951a725610eba00fc0cd8432df1bb754f0235f013acca7495136e28c59bd4b27cf5ec9294d0a5d14a3c7bf38b2d333
7
- data.tar.gz: a8c620362ea465f5399ca3c077d53310c52e3dfc22999a3825cf2386e15119517e9453187e5ce92f36f282e39ca0476d7544ea2606765b2e25208315866e105e
6
+ metadata.gz: aa23a5af45e5b55bd38d789c56b81c3d9e7c020a28a4039eb0281d29794235b9d718593f698c31aa06f76d059ec4b69c81578f236f011b7cd7e24c871da2e84a
7
+ data.tar.gz: 08146c6e2d7494b117edcc1fdd9376736713843a1867ceb965b21b7886aefdb30d13c807a81c7d16ef1a3e246643f0624a76e995942d5ad3fb3c0b05f8e4753d
data/CREDITS CHANGED
@@ -6,6 +6,7 @@ For further details on licensing, see the LICENSE file.
6
6
 
7
7
  == Developers ==
8
8
  * Chris McMahon
9
+ * Dan Duvall
9
10
  * Jeff Hall
10
11
  * Nikolas Everett
11
12
  * Tobias Gritschacher
data/README.md CHANGED
@@ -11,7 +11,7 @@ versions of RubyGems and Firefox (the default browser in which the tests run).
11
11
  The easiest way to install Ruby on Linux/Unix/Mac is [RVM](https://rvm.io/) and
12
12
  on Windows [RubyInstaller](http://rubyinstaller.org/).
13
13
 
14
- cd /tests/browser
14
+ cd tests/browser
15
15
  gem update --system
16
16
  gem install bundler
17
17
  bundle install
@@ -89,7 +89,12 @@ commit back both files.
89
89
 
90
90
  ## Links
91
91
 
92
- mediawiki_selenium gem: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/selenium), [GitHub](https://github.com/wikimedia/mediawiki-selenium), [RubyGems](https://rubygems.org/gems/mediawiki_selenium), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-selenium)
92
+ ### Gems
93
+
94
+ 1. mediawiki_selenium: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/selenium), [GitHub](https://github.com/wikimedia/mediawiki-selenium), [RubyGems](https://rubygems.org/gems/mediawiki_selenium), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-selenium)
95
+ 1. mediawiki_api: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/ruby/api), [GitHub](https://github.com/wikimedia/mediawiki-ruby-api), [RubyGems](https://rubygems.org/gems/mediawiki_api), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-ruby-api)
96
+
97
+ ### Repositories
93
98
 
94
99
  If not stated differently, Selenium tests are in `/tests/browser` folder and Jenkins jobs are at [integration.wikimedia.org/ci/view/BrowserTests](https://integration.wikimedia.org/ci/view/BrowserTests/).
95
100
 
@@ -99,7 +104,8 @@ Repositories that use the gem:
99
104
  1. CirrusSearch: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/CirrusSearch), [GitHub](https://github.com/wikimedia/mediawiki-extensions-CirrusSearch), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-CirrusSearch)
100
105
  1. ContentTranslation: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/ContentTranslation), [GitHub](https://github.com/wikimedia/mediawiki-extensions-ContentTranslation), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-ContentTranslation)
101
106
  1. Flow: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/Flow), [GitHub](https://github.com/wikimedia/mediawiki-extensions-Flow), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-Flow)
102
- 1. MediaWiki: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/core), [GitHub](https://github.com/wikimedia/mediawiki-core), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-core)
107
+ 1. Math: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/Math), [GitHub](https://github.com/wikimedia/mediawiki-extensions-Math), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-Math)
108
+ 1. mediawiki/core: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/core), [GitHub](https://github.com/wikimedia/mediawiki-core), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-core)
103
109
  1. MobileFrontend: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/MobileFrontend), [GitHub](https://github.com/wikimedia/mediawiki-extensions-MobileFrontend), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-MobileFrontend)
104
110
  1. MultimediaViewer: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/MultimediaViewer), [GitHub](https://github.com/wikimedia/mediawiki-extensions-MultimediaViewer), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-MultimediaViewer)
105
111
  1. PageTriage: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/PageTriage), [GitHub](https://github.com/wikimedia/mediawiki-extensions-PageTriage), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-PageTriage)
@@ -108,22 +114,29 @@ Repositories that use the gem:
108
114
  1. UniversalLanguageSelector: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/UniversalLanguageSelector), [GitHub](https://github.com/wikimedia/mediawiki-extensions-UniversalLanguageSelector), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-UniversalLanguageSelector)
109
115
  1. UploadWizard: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/UploadWizard), [GitHub](https://github.com/wikimedia/mediawiki-extensions-UploadWizard), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-UploadWizard)
110
116
  1. VisualEditor: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/VisualEditor), [GitHub](https://github.com/wikimedia/mediawiki-extensions-VisualEditor), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-VisualEditor), `/modules/ve-mw/tests/browser` folder
111
- 1. WikidataBrowserTests: [GitHub](https://github.com/wmde/WikidataBrowserTests), [Code Climate](https://codeclimate.com/github/wmde/WikidataBrowserTests), [Jenkins](http://wdjenkins.wmflabs.org/ci/), `/` folder
117
+ 1. WikidataBrowserTests: [GitHub](https://github.com/wmde/WikidataBrowserTests), [Code Climate](https://codeclimate.com/github/wmde/WikidataBrowserTests), [Jenkins](http://wdjenkins.wmflabs.org/ci/)
112
118
  1. WikiLove: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/WikiLove), [GitHub](https://github.com/wikimedia/mediawiki-extensions-WikiLove), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-WikiLove)
113
119
  1. ZeroBanner: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/ZeroBanner), [GitHub](https://github.com/wikimedia/mediawiki-extensions-ZeroBanner), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-ZeroBanner)
114
120
 
115
- ## Contributing
121
+ ### Alumni
116
122
 
117
- 1. Fork it
118
- 2. Create your feature branch (`git checkout -b my-new-feature`)
119
- 3. Commit your changes (`git commit -am 'Add some feature'`)
120
- 4. Push to the branch (`git push origin my-new-feature`)
121
- 5. Create new Pull Request
123
+ 1. Wikibase: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/Wikibase), [GitHub](https://github.com/wikimedia/mediawiki-extensions-Wikibase), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-Wikibase)
124
+ 1. ZeroRatedMobileAccess: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/extensions/ZeroRatedMobileAccess), [GitHub](https://github.com/wikimedia/mediawiki-extensions-ZeroRatedMobileAccess), [Code Climate](https://codeclimate.com/github/wikimedia/mediawiki-extensions-ZeroRatedMobileAccess)
125
+ 1. browsertests: [Gerrit](https://gerrit.wikimedia.org/r/#/admin/projects/qa/browsertests), [GitHub](https://github.com/wikimedia/qa-browsertests), [Code Climate](https://codeclimate.com/github/wikimedia/qa-browsertests)
122
126
 
123
- Also see https://www.mediawiki.org/wiki/QA/Browser_testing#How_to_contribute
127
+ ## Contributing
128
+
129
+ See https://www.mediawiki.org/wiki/Gerrit
124
130
 
125
131
  ## Release notes
126
132
 
133
+ ### 0.3.0 2014-08-08
134
+
135
+ * Support for MediaWiki extension dependencies via `@extension-<name>` tags
136
+ * World `api` helper method for direct access to a pre-authenticated API client
137
+ * Gem dependency fixes
138
+ * Updated readme
139
+
127
140
  ### 0.2.26 2014-07-18
128
141
 
129
142
  * Added runtime dependency on mediawiki_api
@@ -21,6 +21,7 @@ require "mediawiki_selenium/step_definitions/preferences_steps"
21
21
  require "mediawiki_selenium/step_definitions/resource_loader_steps"
22
22
  require "mediawiki_selenium/step_definitions/upload_file_steps"
23
23
 
24
+ require "mediawiki_selenium/support/modules/api_helper"
24
25
  require "mediawiki_selenium/support/modules/url_module"
25
26
 
26
27
  require "mediawiki_selenium/support/pages/api_page"
@@ -15,9 +15,11 @@ require "page-object"
15
15
  require "page-object/page_factory"
16
16
  require "rest_client"
17
17
  require "watir-webdriver"
18
- require "yaml"
18
+
19
+ require "mediawiki_selenium/support/modules/api_helper"
19
20
 
20
21
  World(PageObject::PageFactory)
22
+ World(MediawikiSelenium::ApiHelper)
21
23
 
22
24
  def browser(test_name, configuration = nil)
23
25
  if environment == :saucelabs
@@ -19,9 +19,45 @@ Before("@login") do
19
19
  puts "MEDIAWIKI_PASSWORD environment variable is not defined! Please export a value for that variable before proceeding." unless ENV["MEDIAWIKI_PASSWORD"]
20
20
  end
21
21
 
22
+ # Install a formatter that can be used to show feature-related warnings
23
+ AfterConfiguration do |config|
24
+ pretty_format, io = config.formats.find { |(format, io)| format == "pretty" }
25
+ config.formats << ["MediawikiSelenium::WarningsFormatter", io] if pretty_format
26
+ end
27
+
28
+ # Enforce a dependency check for all scenarios tagged with @extension- tags
29
+ Before do |scenario|
30
+ # Backgrounds themselves don't have tags, so get them from the feature
31
+ if scenario.is_a?(Cucumber::Ast::Background)
32
+ tag_source = scenario.feature
33
+ else
34
+ tag_source = scenario
35
+ end
36
+
37
+ tags = tag_source.source_tag_names
38
+ dependencies = tags.map { |tag| tag.match(/^@extension-(.+)$/) { |m| m[1] } }.compact
39
+
40
+ unless dependencies.empty?
41
+ extensions = api.meta(:siteinfo, siprop: "extensions").data["extensions"]
42
+ extensions = extensions.map { |ext| ext["type"] }
43
+ missing = dependencies - extensions
44
+
45
+ if missing.any?
46
+ scenario.skip_invoke!
47
+
48
+ if scenario.feature.respond_to?(:mw_warn)
49
+ warning = "Skipped feature due to missing wiki extensions: #{missing.join(", ")}"
50
+ scenario.feature.mw_warn(warning, "missing wiki extensions")
51
+ end
52
+ end
53
+ end
54
+ end
55
+
22
56
  Before do |scenario|
23
57
  @random_string = Random.new.rand.to_s
24
- if ENV["REUSE_BROWSER"] == "true" and $browser # CirrusSearch and VisualEditor need this
58
+
59
+ # CirrusSearch and VisualEditor need this
60
+ if ENV["REUSE_BROWSER"] == "true" && $browser
25
61
  @browser = $browser
26
62
  elsif scenario.source_tag_names.include? "@custom-browser"
27
63
  # browser will be started in Cucumber step
@@ -42,10 +78,15 @@ After do |scenario|
42
78
  @browser.screenshot.save path
43
79
  embed path, "image/png"
44
80
  end
81
+
45
82
  if environment == :saucelabs
46
83
  sauce_api(%Q{{"passed": #{scenario.passed?}}})
47
84
  sauce_api(%Q{{"public": true}})
48
85
  sauce_api(%Q{{"build": #{ENV["BUILD_NUMBER"]}}}) if ENV["BUILD_NUMBER"]
49
86
  end
50
- @browser.close unless ENV["KEEP_BROWSER_OPEN"] == "true" or ENV["REUSE_BROWSER"] == "true" # CirrusSearch and VisualEditor need this
87
+
88
+ if @browser
89
+ # CirrusSearch and VisualEditor need this
90
+ @browser.close unless ENV["KEEP_BROWSER_OPEN"] == "true" || ENV["REUSE_BROWSER"] == "true"
91
+ end
51
92
  end
@@ -0,0 +1,20 @@
1
+ require "mediawiki_api"
2
+
3
+ module MediawikiSelenium
4
+ # Provides more direct access to the API client from hooks and step
5
+ # definitions.
6
+ #
7
+ module ApiHelper
8
+ # A pre-authenticated API client.
9
+ #
10
+ # @return [MediawikiApi::Client]
11
+ #
12
+ def api
13
+ return @api if defined?(@api)
14
+
15
+ @api = MediawikiApi::Client.new(ENV["MEDIAWIKI_API_URL"])
16
+ @api.log_in(*ENV.values_at("MEDIAWIKI_USER", "MEDIAWIKI_PASSWORD")) unless @api.logged_in?
17
+ @api
18
+ end
19
+ end
20
+ end
@@ -4,18 +4,23 @@ class APIPage
4
4
  include PageObject
5
5
 
6
6
  def client
7
- abort "Environment variable MEDIAWIKI_API_URL must be set in order to create a target page for this test" unless ENV["MEDIAWIKI_API_URL"]
7
+ return @client if defined?(@client)
8
8
 
9
- client = MediawikiApi::Client.new ENV["MEDIAWIKI_API_URL"]
10
- client.log_in ENV["MEDIAWIKI_USER"], ENV["MEDIAWIKI_PASSWORD"]
11
- client
9
+ unless ENV["MEDIAWIKI_API_URL"]
10
+ raise "Environment variable MEDIAWIKI_API_URL must be set in order to use the API"
11
+ end
12
+
13
+ @client = MediawikiApi::Client.new(ENV["MEDIAWIKI_API_URL"])
14
+ @client.log_in ENV["MEDIAWIKI_USER"], ENV["MEDIAWIKI_PASSWORD"]
15
+
16
+ @client
12
17
  end
13
18
 
14
- def create title, content
19
+ def create(title, content)
15
20
  client.create_page title, content
16
21
  end
17
22
 
18
- def protect title, reason
23
+ def protect(title, reason)
19
24
  client.protect_page title, reason
20
25
  end
21
26
  end
@@ -10,5 +10,5 @@ https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
10
10
  =end
11
11
 
12
12
  module MediawikiSelenium
13
- VERSION = "0.2.26"
13
+ VERSION = "0.3.0"
14
14
  end
@@ -0,0 +1,54 @@
1
+ require "cucumber/formatter/console"
2
+
3
+ module MediawikiSelenium
4
+ class WarningsFormatter
5
+ include Cucumber::Formatter::Console
6
+
7
+ def initialize(runtime, io, options)
8
+ @io = io
9
+ @warning_counts = Hash.new(0)
10
+ end
11
+
12
+ def after_feature(feature)
13
+ if feature.mw_warnings.any?
14
+ feature.mw_warnings.each do |type, messages|
15
+ messages.each { |msg| @io.puts format_string(msg, :pending) }
16
+ @warning_counts[type] += messages.length
17
+ end
18
+
19
+ @io.puts
20
+ end
21
+ end
22
+
23
+ def after_features(features)
24
+ if @warning_counts.any?
25
+ @warning_counts.each do |type, count|
26
+ message = "#{count} warning#{count > 1 ? "s" : ""}"
27
+ message += " due to #{type}" unless type == :default
28
+ @io.puts format_string(message, :pending)
29
+ end
30
+ end
31
+ end
32
+
33
+ def before_feature(feature)
34
+ feature.extend(FeatureWarnings)
35
+ end
36
+
37
+ private
38
+
39
+ module FeatureWarnings
40
+ def mw_warn(message, type = :default)
41
+ mw_warnings[type] ||= []
42
+ mw_warnings[type] << message
43
+ end
44
+
45
+ def mw_warnings
46
+ @__mediawiki_warnings ||= {}
47
+ end
48
+
49
+ def mw_warning_messages
50
+ mw_warnings.map(&:values).flatten
51
+ end
52
+ end
53
+ end
54
+ end
@@ -6,8 +6,8 @@ require "mediawiki_selenium/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "mediawiki_selenium"
8
8
  spec.version = MediawikiSelenium::VERSION
9
- spec.authors = ["Chris McMahon", "Jeff Hall", "Nikolas Everett", "Tobias Gritschacher", "Željko Filipin"]
10
- spec.email = ["cmcmahon@wikimedia.org", "jhall@wikimedia.org", "neverett@wikimedia.org", "tobias.gritschacher@wikimedia.de", "zeljko.filipin@gmail.com"]
9
+ spec.authors = ["Chris McMahon", "Dan Duvall", "Jeff Hall", "Nikolas Everett", "Tobias Gritschacher", "Željko Filipin"]
10
+ spec.email = ["cmcmahon@wikimedia.org", "dduvall@wikimedia.org", "jhall@wikimedia.org", "neverett@wikimedia.org", "tobias.gritschacher@wikimedia.de", "zeljko.filipin@gmail.com"]
11
11
  spec.description = %q{Several MediaWiki extensions share code that makes it easy to run Selenium tests. This gem
12
12
  makes it easy to update the shared code.}
13
13
  spec.summary = %q{An easy way to run MediaWiki Selenium tests.}
@@ -20,7 +20,7 @@ makes it easy to update the shared code.}
20
20
  spec.add_runtime_dependency "cucumber", "~> 1.3", ">= 1.3.10"
21
21
  spec.add_runtime_dependency "headless", "~> 1.0", ">= 1.0.1"
22
22
  spec.add_runtime_dependency "json", "~> 1.8", ">= 1.8.1"
23
- spec.add_runtime_dependency "mediawiki_api", "~> 0.1.3"
23
+ spec.add_runtime_dependency "mediawiki_api", "~> 0.2", ">= 0.2.0"
24
24
  spec.add_runtime_dependency "page-object", "~> 1.0"
25
25
  spec.add_runtime_dependency "rest-client", "~> 1.6", ">= 1.6.7"
26
26
  spec.add_runtime_dependency "rspec-expectations", "~> 2.14", ">= 2.14.4"
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediawiki_selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.26
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris McMahon
8
+ - Dan Duvall
8
9
  - Jeff Hall
9
10
  - Nikolas Everett
10
11
  - Tobias Gritschacher
@@ -12,7 +13,7 @@ authors:
12
13
  autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
- date: 2014-07-18 00:00:00.000000000 Z
16
+ date: 2014-08-08 00:00:00.000000000 Z
16
17
  dependencies:
17
18
  - !ruby/object:Gem::Dependency
18
19
  name: cucumber
@@ -80,14 +81,20 @@ dependencies:
80
81
  requirements:
81
82
  - - "~>"
82
83
  - !ruby/object:Gem::Version
83
- version: 0.1.3
84
+ version: '0.2'
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 0.2.0
84
88
  type: :runtime
85
89
  prerelease: false
86
90
  version_requirements: !ruby/object:Gem::Requirement
87
91
  requirements:
88
92
  - - "~>"
89
93
  - !ruby/object:Gem::Version
90
- version: 0.1.3
94
+ version: '0.2'
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 0.2.0
91
98
  - !ruby/object:Gem::Dependency
92
99
  name: page-object
93
100
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +174,7 @@ description: |-
167
174
  makes it easy to update the shared code.
168
175
  email:
169
176
  - cmcmahon@wikimedia.org
177
+ - dduvall@wikimedia.org
170
178
  - jhall@wikimedia.org
171
179
  - neverett@wikimedia.org
172
180
  - tobias.gritschacher@wikimedia.de
@@ -189,6 +197,7 @@ files:
189
197
  - lib/mediawiki_selenium/step_definitions/upload_file_steps.rb
190
198
  - lib/mediawiki_selenium/support/env.rb
191
199
  - lib/mediawiki_selenium/support/hooks.rb
200
+ - lib/mediawiki_selenium/support/modules/api_helper.rb
192
201
  - lib/mediawiki_selenium/support/modules/url_module.rb
193
202
  - lib/mediawiki_selenium/support/pages/api_page.rb
194
203
  - lib/mediawiki_selenium/support/pages/login_page.rb
@@ -196,6 +205,7 @@ files:
196
205
  - lib/mediawiki_selenium/support/pages/reset_preferences_page.rb
197
206
  - lib/mediawiki_selenium/support/sauce.rb
198
207
  - lib/mediawiki_selenium/version.rb
208
+ - lib/mediawiki_selenium/warnings_formatter.rb
199
209
  - mediawiki_selenium.gemspec
200
210
  homepage: https://gerrit.wikimedia.org/r/#/admin/projects/mediawiki/selenium
201
211
  licenses:
@@ -217,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
227
  version: '0'
218
228
  requirements: []
219
229
  rubyforge_project:
220
- rubygems_version: 2.4.1
230
+ rubygems_version: 2.2.2
221
231
  signing_key:
222
232
  specification_version: 4
223
233
  summary: An easy way to run MediaWiki Selenium tests.