diff options
-rw-r--r-- | qa/qa.rb | 6 | ||||
-rw-r--r-- | qa/qa/page/mattermost/login.rb | 19 | ||||
-rw-r--r-- | qa/qa/page/mattermost/main.rb | 11 | ||||
-rw-r--r-- | qa/qa/runtime/scenario.rb | 8 | ||||
-rw-r--r-- | qa/qa/scenario/test/integration/mattermost.rb | 5 | ||||
-rw-r--r-- | qa/qa/specs/features/mattermost/login_spec.rb | 12 | ||||
-rw-r--r-- | qa/spec/scenario/entrypoint_spec.rb | 46 |
7 files changed, 107 insertions, 0 deletions
@@ -8,6 +8,7 @@ module QA autoload :Release, 'qa/runtime/release' autoload :User, 'qa/runtime/user' autoload :Namespace, 'qa/runtime/namespace' + autoload :Scenario, 'qa/runtime/scenario' end ## @@ -80,6 +81,11 @@ module QA module Admin autoload :Menu, 'qa/page/admin/menu' end + + module Mattermost + autoload :Main, 'qa/page/mattermost/main' + autoload :Login, 'qa/page/mattermost/login' + end end ## diff --git a/qa/qa/page/mattermost/login.rb b/qa/qa/page/mattermost/login.rb new file mode 100644 index 00000000000..2001dc5b230 --- /dev/null +++ b/qa/qa/page/mattermost/login.rb @@ -0,0 +1,19 @@ +module QA + module Page + module Mattermost + class Login < Page::Base + def initialize + visit(Runtime::Scenario.mattermost + '/login') + end + + def sign_in_using_oauth + click_link class: 'btn btn-custom-login gitlab' + + if page.has_content?('Authorize GitLab Mattermost to use your account?') + click_button 'Authorize' + end + end + end + end + end +end diff --git a/qa/qa/page/mattermost/main.rb b/qa/qa/page/mattermost/main.rb new file mode 100644 index 00000000000..e636d7676f4 --- /dev/null +++ b/qa/qa/page/mattermost/main.rb @@ -0,0 +1,11 @@ +module QA + module Page + module Mattermost + class Main < Page::Base + def initialize + visit(Runtime::Scenario.mattermost) + end + end + end + end +end diff --git a/qa/qa/runtime/scenario.rb b/qa/qa/runtime/scenario.rb new file mode 100644 index 00000000000..0c5e9787e17 --- /dev/null +++ b/qa/qa/runtime/scenario.rb @@ -0,0 +1,8 @@ +module QA + module Runtime + module Scenario + extend self + attr_accessor :mattermost + end + end +end diff --git a/qa/qa/scenario/test/integration/mattermost.rb b/qa/qa/scenario/test/integration/mattermost.rb index 4732f2b635b..9a84e5c8fd8 100644 --- a/qa/qa/scenario/test/integration/mattermost.rb +++ b/qa/qa/scenario/test/integration/mattermost.rb @@ -8,6 +8,11 @@ module QA # class Mattermost < Scenario::Entrypoint tags :core, :mattermost + + def perform(address, mattermost, *files) + Runtime::Scenario.mattermost = mattermost + super(address, files) + end end end end diff --git a/qa/qa/specs/features/mattermost/login_spec.rb b/qa/qa/specs/features/mattermost/login_spec.rb new file mode 100644 index 00000000000..a89a6a3d1cf --- /dev/null +++ b/qa/qa/specs/features/mattermost/login_spec.rb @@ -0,0 +1,12 @@ +module QA + feature 'logging in to Mattermost', :mattermost do + scenario 'can use gitlab oauth' do + Page::Main::Entry.act { sign_in_using_credentials } + 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 diff --git a/qa/spec/scenario/entrypoint_spec.rb b/qa/spec/scenario/entrypoint_spec.rb new file mode 100644 index 00000000000..3fd068b641c --- /dev/null +++ b/qa/spec/scenario/entrypoint_spec.rb @@ -0,0 +1,46 @@ +describe QA::Scenario::Entrypoint do + subject do + Class.new(QA::Scenario::Entrypoint) do + tags :rspec + end + end + + context '#perform' do + let(:config) { spy('Specs::Config') } + let(:release) { spy('Runtime::Release') } + let(:runner) { spy('Specs::Runner') } + + before do + allow(config).to receive(:perform) { |&block| block.call config } + allow(runner).to receive(:perform) { |&block| block.call runner } + + stub_const('QA::Specs::Config', config) + stub_const('QA::Runtime::Release', release) + stub_const('QA::Specs::Runner', runner) + end + + it 'should set address' do + subject.perform("hello") + + expect(config).to have_received(:address=).with("hello") + end + + context 'no paths' do + it 'should call runner with default arguments' do + subject.perform("test") + + expect(runner).to have_received(:rspec) + .with(hash_including(files: 'qa/specs/features')) + end + end + + context 'specifying paths' do + it 'should call runner with paths' do + subject.perform('test', 'path1', 'path2') + + expect(runner).to have_received(:rspec) + .with(hash_including(files: %w(path1 path2))) + end + end + end +end |