jenkins-bot has submitted this change and it was merged.
Change subject: Login helper for fast API-based authentication
......................................................................
Login helper for fast API-based authentication
The `LoginHelper` provides a `log_in` method that authenticates via the
API and adds the resulting cookies to the current browser instance.
This technique is a much faster way to satisfy an initial logged in
precondition and should speed up a large number of end-to-end MediaWiki
tests. It also has the added benefit of not exposing credentials in the
Selenium log.
Bug: T112908
Change-Id: I66002f5b824c2097effb8f9feda42e99b01074ba
---
A features/login_helper.feature
A features/step_definitions/login_helper_steps.rb
M lib/mediawiki_selenium.rb
M lib/mediawiki_selenium/cucumber/env.rb
M lib/mediawiki_selenium/environment.rb
A lib/mediawiki_selenium/helpers/login_helper.rb
M lib/mediawiki_selenium/step_definitions/login_steps.rb
M mediawiki_selenium.gemspec
8 files changed, 67 insertions(+), 5 deletions(-)
Approvals:
Zfilipin: Looks good to me, approved
jenkins-bot: Verified
diff --git a/features/login_helper.feature b/features/login_helper.feature
new file mode 100644
index 0000000..b69f213
--- /dev/null
+++ b/features/login_helper.feature
@@ -0,0 +1,15 @@
+Feature: Login Helper
+
+ Background:
+ Given I have configured my environment from `ENV` and with:
+ """
+ user_factory: true
+ """
+ And I have set "MEDIAWIKI_API_URL" in my shell
+ And I have set "MEDIAWIKI_URL" in my shell
+ And I am using the user factory
+ And I am using the login helper
+
+ Scenario: Login helper logs in in via the API
+ When I log in via the helper method
+ Then I should be logged in to the wiki
diff --git a/features/step_definitions/login_helper_steps.rb
b/features/step_definitions/login_helper_steps.rb
new file mode 100644
index 0000000..8a5bb05
--- /dev/null
+++ b/features/step_definitions/login_helper_steps.rb
@@ -0,0 +1,11 @@
+Given(/^I am using the login helper$/) do
+ @env.extend(MediawikiSelenium::LoginHelper)
+end
+
+When(/^I log in via the helper method$/) do
+ @env.log_in
+end
+
+Then(/^I should be logged in to the wiki$/) do
+ expect(@env.browser.element(id: 'pt-logout')).to be_present
+end
diff --git a/lib/mediawiki_selenium.rb b/lib/mediawiki_selenium.rb
index c32c8fd..659828d 100644
--- a/lib/mediawiki_selenium.rb
+++ b/lib/mediawiki_selenium.rb
@@ -6,6 +6,7 @@
autoload :Environment, 'mediawiki_selenium/environment'
autoload :HeadlessHelper, 'mediawiki_selenium/helpers/headless_helper'
autoload :Initializer, 'mediawiki_selenium/initializer'
+ autoload :LoginHelper, 'mediawiki_selenium/helpers/login_helper'
autoload :PageFactory, 'mediawiki_selenium/page_factory'
autoload :Raita, 'mediawiki_selenium/raita'
autoload :RemoteBrowserFactory, 'mediawiki_selenium/remote_browser_factory'
diff --git a/lib/mediawiki_selenium/cucumber/env.rb
b/lib/mediawiki_selenium/cucumber/env.rb
index a6ec7af..8309cee 100644
--- a/lib/mediawiki_selenium/cucumber/env.rb
+++ b/lib/mediawiki_selenium/cucumber/env.rb
@@ -5,6 +5,7 @@
World { MediawikiSelenium::Environment.load_default }
World(MediawikiSelenium::ApiHelper)
+World(MediawikiSelenium::LoginHelper)
World(MediawikiSelenium::PageFactory)
World(MediawikiSelenium::ScreenshotHelper)
World(MediawikiSelenium::StrictPending)
diff --git a/lib/mediawiki_selenium/environment.rb
b/lib/mediawiki_selenium/environment.rb
index 3da2f1d..7fd6cb4 100644
--- a/lib/mediawiki_selenium/environment.rb
+++ b/lib/mediawiki_selenium/environment.rb
@@ -437,7 +437,7 @@
# @yield [url]
# @yieldparam url [String] Wiki URL.
#
- def visit_wiki(id)
+ def visit_wiki(id = nil)
on_wiki(id) do |url|
browser.goto url
yield url if block_given?
diff --git a/lib/mediawiki_selenium/helpers/login_helper.rb
b/lib/mediawiki_selenium/helpers/login_helper.rb
new file mode 100644
index 0000000..9649744
--- /dev/null
+++ b/lib/mediawiki_selenium/helpers/login_helper.rb
@@ -0,0 +1,36 @@
+require 'uri'
+
+module MediawikiSelenium
+ # Expepiates logging in to wikis by authenticating with the MW API and
+ # transfering the returned cookie to the current browser.
+ #
+ module LoginHelper
+ # Authenticate with the current wiki's API and save the resulting cookie
+ # in the current browser.
+ #
+ # @param cookies [Hash] Extra cookies to set.
+ #
+ def log_in(cookies = {})
+ visit_wiki do |url|
+ uri = URI.parse(url)
+
+ options = {}
+ options[:domain] = uri.host unless ['localhost',
'127.0.0.1'].include?(uri.host)
+
+ api.cookies.each do |cookie|
+ browser.cookies.add cookie.name, cookie.value, options.merge({
+ secure: cookie.secure,
+ path: cookie.path,
+ expires: cookie.expires
+ })
+ end
+
+ cookies.each do |name, value|
+ browser.cookies.add name.to_s, value, options
+ end
+
+ browser.refresh
+ end
+ end
+ end
+end
diff --git a/lib/mediawiki_selenium/step_definitions/login_steps.rb
b/lib/mediawiki_selenium/step_definitions/login_steps.rb
index 8cb9f91..15ee00f 100644
--- a/lib/mediawiki_selenium/step_definitions/login_steps.rb
+++ b/lib/mediawiki_selenium/step_definitions/login_steps.rb
@@ -1,5 +1,3 @@
Given(/^I am logged in(?: as (\w+))?$/) do |user|
- as_user(user) do |user, password|
- visit(LoginPage).login_with(user, password)
- end
+ as_user(user) { log_in }
end
diff --git a/mediawiki_selenium.gemspec b/mediawiki_selenium.gemspec
index 6bb7269..8526d32 100644
--- a/mediawiki_selenium.gemspec
+++ b/mediawiki_selenium.gemspec
@@ -30,7 +30,7 @@
spec.add_runtime_dependency 'cucumber', '~> 1.3', '>= 1.3.20'
spec.add_runtime_dependency 'headless', '~> 2.0', '>= 2.1.0'
spec.add_runtime_dependency 'json', '~> 1.8', '>= 1.8.1'
- spec.add_runtime_dependency 'mediawiki_api', '~> 0.4', '>= 0.4.1'
+ spec.add_runtime_dependency 'mediawiki_api', '~> 0.5', '>= 0.5.0'
spec.add_runtime_dependency 'page-object', '~> 1.0'
spec.add_runtime_dependency 'rest-client', '~> 1.6', '>= 1.6.7'
spec.add_runtime_dependency 'rspec-core', '~> 2.14', '>= 2.14.4'
--
To view, visit https://gerrit.wikimedia.org/r/226950
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I66002f5b824c2097effb8f9feda42e99b01074ba
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/selenium
Gerrit-Branch: master
Gerrit-Owner: Dduvall <[email protected]>
Gerrit-Reviewer: CSteipp <[email protected]>
Gerrit-Reviewer: Dduvall <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: Jdlrobson <[email protected]>
Gerrit-Reviewer: Sbisson <[email protected]>
Gerrit-Reviewer: Zfilipin <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits