Commit d29e2e82 authored by Sanad Liaquat's avatar Sanad Liaquat

Add e2e QA test for logging in using GitHub OAuth

Adds the test itself and the vendor page object model for GitHub
login pages.
parent cbcd3cb9
...@@ -16,6 +16,13 @@ module AuthHelper ...@@ -16,6 +16,13 @@ module AuthHelper
PROVIDERS_WITH_ICONS.include?(name.to_s) PROVIDERS_WITH_ICONS.include?(name.to_s)
end end
def qa_class_for_provider(provider)
{
saml: 'qa-saml-login-button',
github: 'qa-github-login-button'
}[provider.to_sym]
end
def auth_providers def auth_providers
Gitlab::Auth::OAuth::Provider.providers Gitlab::Auth::OAuth::Provider.providers
end end
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
.d-flex.justify-content-between.flex-wrap .d-flex.justify-content-between.flex-wrap
- providers.each do |provider| - providers.each do |provider|
- has_icon = provider_has_icon?(provider) - has_icon = provider_has_icon?(provider)
= link_to omniauth_authorize_path(:user, provider), method: :post, class: 'btn d-flex align-items-center omniauth-btn text-left oauth-login qa-saml-login-button', id: "oauth-login-#{provider}" do = link_to omniauth_authorize_path(:user, provider), method: :post, class: "btn d-flex align-items-center omniauth-btn text-left oauth-login #{qa_class_for_provider(provider)}", id: "oauth-login-#{provider}" do
- if has_icon - if has_icon
= provider_image_tag(provider) = provider_image_tag(provider)
%span %span
......
...@@ -99,6 +99,7 @@ module QA ...@@ -99,6 +99,7 @@ module QA
autoload :LDAPNoTLS, 'qa/scenario/test/integration/ldap_no_tls' autoload :LDAPNoTLS, 'qa/scenario/test/integration/ldap_no_tls'
autoload :LDAPTLS, 'qa/scenario/test/integration/ldap_tls' autoload :LDAPTLS, 'qa/scenario/test/integration/ldap_tls'
autoload :InstanceSAML, 'qa/scenario/test/integration/instance_saml' autoload :InstanceSAML, 'qa/scenario/test/integration/instance_saml'
autoload :OAuth, 'qa/scenario/test/integration/oauth'
autoload :Kubernetes, 'qa/scenario/test/integration/kubernetes' autoload :Kubernetes, 'qa/scenario/test/integration/kubernetes'
autoload :Mattermost, 'qa/scenario/test/integration/mattermost' autoload :Mattermost, 'qa/scenario/test/integration/mattermost'
autoload :ObjectStorage, 'qa/scenario/test/integration/object_storage' autoload :ObjectStorage, 'qa/scenario/test/integration/object_storage'
...@@ -342,6 +343,13 @@ module QA ...@@ -342,6 +343,13 @@ module QA
autoload :Login, 'qa/vendor/saml_idp/page/login' autoload :Login, 'qa/vendor/saml_idp/page/login'
end end
end end
module Github
module Page
autoload :Base, 'qa/vendor/github/page/base'
autoload :Login, 'qa/vendor/github/page/login'
end
end
end end
# Classes that provide support to other parts of the framework. # Classes that provide support to other parts of the framework.
......
...@@ -31,8 +31,9 @@ module QA ...@@ -31,8 +31,9 @@ module QA
element :register_tab element :register_tab
end end
view 'app/views/devise/shared/_omniauth_box.html.haml' do view 'app/helpers/auth_helper.rb' do
element :saml_login_button element :saml_login_button
element :github_login_button
end end
view 'app/views/layouts/devise.html.haml' do view 'app/views/layouts/devise.html.haml' do
...@@ -149,13 +150,18 @@ module QA ...@@ -149,13 +150,18 @@ module QA
click_element :standard_tab click_element :standard_tab
end end
private def sign_in_with_github
set_initial_password_if_present
click_element :github_login_button
end
def sign_in_with_saml def sign_in_with_saml
set_initial_password_if_present set_initial_password_if_present
click_element :saml_login_button click_element :saml_login_button
end end
private
def sign_in_using_gitlab_credentials(user) def sign_in_using_gitlab_credentials(user)
switch_to_sign_in_tab if has_sign_in_tab? switch_to_sign_in_tab if has_sign_in_tab?
switch_to_standard_tab if has_standard_tab? switch_to_standard_tab if has_standard_tab?
......
...@@ -102,6 +102,14 @@ module QA ...@@ -102,6 +102,14 @@ module QA
ENV['GITLAB_ADMIN_PASSWORD'] ENV['GITLAB_ADMIN_PASSWORD']
end end
def github_username
ENV['GITHUB_USERNAME']
end
def github_password
ENV['GITHUB_PASSWORD']
end
def forker? def forker?
!!(forker_username && forker_password) !!(forker_username && forker_password)
end end
......
# frozen_string_literal: true
module QA
module Scenario
module Test
module Integration
class OAuth < Test::Instance::All
tags :oauth
end
end
end
end
end
# frozen_string_literal: true
module QA
context 'Manage', :orchestrated, :oauth do
describe 'OAuth login' do
it 'User logs in to GitLab with GitHub OAuth' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_with_github)
Vendor::Github::Page::Login.perform(&:login)
expect(page).to have_content('Welcome to GitLab')
end
end
end
end
# frozen_string_literal: true
module QA
module Vendor
module Github
module Page
class Base
include Capybara::DSL
include Scenario::Actable
end
end
end
end
end
# frozen_string_literal: true
require 'capybara/dsl'
module QA
module Vendor
module Github
module Page
class Login < Page::Base
def login
fill_in 'login', with: QA::Runtime::Env.github_username
fill_in 'password', with: QA::Runtime::Env.github_password
click_on 'Sign in'
unless has_no_text?("Authorize GitLab-OAuth")
click_on 'Authorize gitlab-qa' if has_button?('Authorize gitlab-qa')
end
end
end
end
end
end
end
# frozen_string_literal: true
describe QA::Scenario::Test::Integration::OAuth do
context '#perform' do
it_behaves_like 'a QA scenario class' do
let(:tags) { [:oauth] }
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment