WIP Handle domain sessions better in QA test scenario
[ci skip]
This commit is contained in:
parent
9799d363db
commit
0430524bfe
1
qa/qa.rb
1
qa/qa.rb
|
@ -9,6 +9,7 @@ module QA
|
|||
autoload :User, 'qa/runtime/user'
|
||||
autoload :Namespace, 'qa/runtime/namespace'
|
||||
autoload :Scenario, 'qa/runtime/scenario'
|
||||
autoload :Browser, 'qa/runtime/browser'
|
||||
end
|
||||
|
||||
##
|
||||
|
|
|
@ -7,6 +7,20 @@ module QA
|
|||
def refresh
|
||||
visit current_url
|
||||
end
|
||||
|
||||
def wait(css = '.application', time: 60)
|
||||
# This resolves cold boot / background tasks problems
|
||||
#
|
||||
Time.now.tap do |start|
|
||||
while Time.now - start < time
|
||||
break if page.has_css?(css, wait: 5)
|
||||
puts "Waiting for `#{css} on `#{current_url}`"
|
||||
refresh
|
||||
end
|
||||
end
|
||||
|
||||
yield if block_given?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,20 +3,8 @@ module QA
|
|||
module Main
|
||||
class Entry < Page::Base
|
||||
def visit_login_page
|
||||
visit("#{Runtime::Scenario.gitlab_address}/users/sign_in")
|
||||
wait_for_instance_to_be_ready
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def wait_for_instance_to_be_ready
|
||||
# This resolves cold boot / background tasks problems
|
||||
#
|
||||
start = Time.now
|
||||
|
||||
while Time.now - start < 240
|
||||
break if page.has_css?('.application', wait: 10)
|
||||
refresh
|
||||
wait(time: 500) do
|
||||
visit("#{Runtime::Scenario.gitlab_address}/users/sign_in")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,37 +3,45 @@ require 'capybara/rspec'
|
|||
require 'capybara-screenshot/rspec'
|
||||
require 'selenium-webdriver'
|
||||
|
||||
# rubocop:disable Metrics/MethodLength
|
||||
# rubocop:disable Metrics/LineLength
|
||||
|
||||
module QA
|
||||
module Specs
|
||||
class Config < Scenario::Template
|
||||
include Scenario::Actable
|
||||
module Runtime
|
||||
module Browser
|
||||
extend self
|
||||
|
||||
def perform
|
||||
configure_rspec!
|
||||
configure_capybara!
|
||||
end
|
||||
def session(address, &block)
|
||||
configure!
|
||||
page.visit(address)
|
||||
|
||||
def configure_rspec!
|
||||
RSpec.configure do |config|
|
||||
config.expect_with :rspec do |expectations|
|
||||
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
||||
end
|
||||
block.call(page)
|
||||
|
||||
config.mock_with :rspec do |mocks|
|
||||
mocks.verify_partial_doubles = true
|
||||
end
|
||||
|
||||
config.order = :random
|
||||
Kernel.srand config.seed
|
||||
config.formatter = :documentation
|
||||
config.color = true
|
||||
page.visit(address)
|
||||
reset_domain_session!
|
||||
rescue
|
||||
# RSpec examples will take care of screenshots on their own
|
||||
#
|
||||
unless block.binding.receiver.class < RSpec::Core::ExampleGroup
|
||||
Capybara::Screenshot.screenshot_and_save_page
|
||||
end
|
||||
|
||||
raise
|
||||
end
|
||||
|
||||
def configure_capybara!
|
||||
def page
|
||||
Capybara.current_session
|
||||
end
|
||||
|
||||
def reset_domain_session(address)
|
||||
##
|
||||
# Selenium allows to reset session cookies for current domain only.
|
||||
#
|
||||
# See gitlab-org/gitlab-qa#102
|
||||
#
|
||||
Capybar.reset_session!
|
||||
end
|
||||
|
||||
def configure!
|
||||
return if Capybara.drivers.include?(:chrome)
|
||||
|
||||
Capybara.register_driver :chrome do |app|
|
||||
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
|
||||
'chromeOptions' => {
|
||||
|
@ -52,8 +60,7 @@ module QA
|
|||
Capybara.configure do |config|
|
||||
config.default_driver = :chrome
|
||||
config.javascript_driver = :chrome
|
||||
config.default_max_wait_time = 10
|
||||
|
||||
config.default_max_wait_time = 4
|
||||
# https://github.com/mattheworiordan/capybara-screenshot/issues/164
|
||||
config.save_path = 'tmp'
|
||||
end
|
|
@ -8,7 +8,6 @@ module QA
|
|||
include Bootable
|
||||
|
||||
def perform(address, *files)
|
||||
Specs::Config.act { configure_capybara! }
|
||||
Runtime::Scenario.define(:gitlab_address, address)
|
||||
|
||||
##
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module QA
|
||||
feature 'standard root login', :core do
|
||||
feature 'standard user login', :core do
|
||||
scenario 'user logs in using credentials' do
|
||||
Page::Main::Entry.act { visit_login_page }
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
module QA
|
||||
feature 'logging in to Mattermost', :mattermost do
|
||||
scenario 'can use gitlab oauth' do
|
||||
Page::Main::Entry.act { visit_login_page }
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
Page::Mattermost::Login.act { sign_in_using_oauth }
|
||||
Runtime::Browser.session(Page::Gitlab::Login) do
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Page::Mattermost::Main.perform do |page|
|
||||
expect(page).to have_content(/(Welcome to: Mattermost|Logout GitLab Mattermost)/)
|
||||
Runtime::Browser.session(Page::Mattermost::Login) do
|
||||
Page::Mattermost::Login.act { sign_in_using_oauth }
|
||||
|
||||
Page::Mattermost::Main.perform do |page|
|
||||
expect(page).to have_content(/(Welcome to: Mattermost|Logout GitLab Mattermost)/)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,7 +17,7 @@ module QA
|
|||
tags.to_a.each { |tag| args.push(['-t', tag.to_s]) }
|
||||
args.push(files)
|
||||
|
||||
Specs::Config.perform
|
||||
Runtime::Browser.configure!
|
||||
|
||||
RSpec::Core::Runner.run(args.flatten, $stderr, $stdout).tap do |status|
|
||||
abort if status.nonzero?
|
||||
|
|
Loading…
Reference in New Issue