Dduvall has uploaded a new change for review.
https://gerrit.wikimedia.org/r/216866
Change subject: Allow explicit configuration overrides at runtime
......................................................................
Allow explicit configuration overrides at runtime
It's sometimes necessary to set up specific browser configuration at
runtime and while it can be achieved via
`BrowserFactory::Base#configure` the latter method can be cumbersome for
simple cases as it requires providing bindings for all possible
browsers.
Change-Id: Ia9d4f5dc487785732a837000d02e80b9ac6bfe32
---
M lib/mediawiki_selenium/browser_factory/base.rb
M spec/browser_factory/base_spec.rb
2 files changed, 36 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/selenium
refs/changes/66/216866/1
diff --git a/lib/mediawiki_selenium/browser_factory/base.rb
b/lib/mediawiki_selenium/browser_factory/base.rb
index 784ab20..4640311 100644
--- a/lib/mediawiki_selenium/browser_factory/base.rb
+++ b/lib/mediawiki_selenium/browser_factory/base.rb
@@ -71,6 +71,7 @@
@browser_name = browser_name
@bindings = {}
@browser_cache = {}
+ @overrides = {}
end
# Returns a unique set of all the binding keys.
@@ -146,6 +147,8 @@
# @return [Hash]
#
def browser_options(config)
+ config = config.merge(@overrides)
+
options = default_browser_options.tap do |default_options|
bindings.each do |(names, bindings_for_option)|
bindings_for_option.each do |binding|
@@ -183,6 +186,15 @@
new_browser(browser_options(config))
end
+ # Always use the given configuration when setting up a new browser,
+ # regardless of what has been previously configured.
+ #
+ # @param overrides [Hash] Configuration overrides.
+ #
+ def override(config)
+ @overrides.merge!(config)
+ end
+
# Executes additional teardown tasks.
#
# @param env [Environment] Environment.
diff --git a/spec/browser_factory/base_spec.rb
b/spec/browser_factory/base_spec.rb
index 53e5ca9..0993a57 100644
--- a/spec/browser_factory/base_spec.rb
+++ b/spec/browser_factory/base_spec.rb
@@ -211,5 +211,29 @@
end
end
end
+
+ describe "#override" do
+ subject { factory.override(overrides) }
+
+ before do
+ allow(Selenium::WebDriver::Remote::Capabilities).to
receive(browser_name)
+ end
+
+ it 'always uses the given configuration when setting up a new browser' do
+ # Set up a binding that will accept :foo configuration
+ @foo = nil
+ factory.configure(:foo) { |foo| @foo = foo }
+
+ # Override with config { foo: 'y' }
+ factory.override(foo: 'y')
+
+ # Invoke the binding with `browser_options` and config { foo: 'x' }
+ factory.browser_options(foo: 'x')
+
+ # The configuration hook should have been invoked with the overriden
+ # value
+ expect(@foo).to eq('y')
+ end
+ end
end
end
--
To view, visit https://gerrit.wikimedia.org/r/216866
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia9d4f5dc487785732a837000d02e80b9ac6bfe32
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/selenium
Gerrit-Branch: master
Gerrit-Owner: Dduvall <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits