diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-12-07 13:40:25 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-12-07 13:40:25 +0100 |
commit | fc00d739fcf86b5dbd22cf0eb3c57072ea5b439f (patch) | |
tree | 4b4b52c67dd8a04ed9e725c105d65c263a9d7115 /qa | |
parent | 4c37cf684d75297a88db2dd1c286a68fd8aec701 (diff) | |
parent | fe62860e05ca6e3ef7125fe92fdf52cd6f7b63df (diff) | |
download | gitlab-ce-fc00d739fcf86b5dbd22cf0eb3c57072ea5b439f.tar.gz |
Merge branch 'master' into qa/gb/selenium-handle-domain-sessions
* master: (694 commits)
Conflicts:
qa/qa/page/base.rb
qa/qa/page/main/entry.rb
Diffstat (limited to 'qa')
-rw-r--r-- | qa/Dockerfile | 7 | ||||
-rw-r--r-- | qa/qa.rb | 14 | ||||
-rw-r--r-- | qa/qa/page/admin/menu.rb | 7 | ||||
-rw-r--r-- | qa/qa/page/admin/settings.rb | 18 | ||||
-rw-r--r-- | qa/qa/page/base.rb | 19 | ||||
-rw-r--r-- | qa/qa/page/dashboard/projects.rb | 11 | ||||
-rw-r--r-- | qa/qa/page/main/menu.rb | 5 | ||||
-rw-r--r-- | qa/qa/page/main/oauth.rb | 15 | ||||
-rw-r--r-- | qa/qa/page/project/show.rb | 4 | ||||
-rw-r--r-- | qa/qa/scenario/bootable.rb | 2 | ||||
-rw-r--r-- | qa/qa/scenario/gitlab/admin/hashed_storage.rb | 25 | ||||
-rw-r--r-- | qa/qa/shell/omnibus.rb | 39 | ||||
-rw-r--r-- | qa/qa/specs/features/mattermost/login_spec.rb | 11 |
13 files changed, 171 insertions, 6 deletions
diff --git a/qa/Dockerfile b/qa/Dockerfile index f3a81a7e355..9b6ffff7c4d 100644 --- a/qa/Dockerfile +++ b/qa/Dockerfile @@ -9,6 +9,13 @@ RUN sed -i "s/httpredir.debian.org/ftp.us.debian.org/" /etc/apt/sources.list RUN apt-get update && apt-get install -y wget git unzip xvfb ## +# Install Docker +# +RUN wget -q https://download.docker.com/linux/static/stable/x86_64/docker-17.09.0-ce.tgz && \ + tar -zxf docker-17.09.0-ce.tgz && mv docker/docker /usr/local/bin/docker && \ + rm docker-17.09.0-ce.tgz + +## # Install Google Chrome version with headless support # RUN curl -sS -L https://dl.google.com/linux/linux_signing_key.pub | apt-key add - @@ -50,6 +50,10 @@ module QA module Sandbox autoload :Prepare, 'qa/scenario/gitlab/sandbox/prepare' end + + module Admin + autoload :HashedStorage, 'qa/scenario/gitlab/admin/hashed_storage' + end end end @@ -64,9 +68,11 @@ module QA module Main autoload :Login, 'qa/page/main/login' autoload :Menu, 'qa/page/main/menu' + autoload :OAuth, 'qa/page/main/oauth' end module Dashboard + autoload :Projects, 'qa/page/dashboard/projects' autoload :Groups, 'qa/page/dashboard/groups' end @@ -82,6 +88,7 @@ module QA module Admin autoload :Menu, 'qa/page/admin/menu' + autoload :Settings, 'qa/page/admin/settings' end module Mattermost @@ -98,6 +105,13 @@ module QA end ## + # Classes describing shell interaction with GitLab + # + module Shell + autoload :Omnibus, 'qa/shell/omnibus' + end + + ## # Classes that make it possible to execute features tests. # module Specs diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb index baa06b1c75e..dd289ffe269 100644 --- a/qa/qa/page/admin/menu.rb +++ b/qa/qa/page/admin/menu.rb @@ -3,8 +3,11 @@ module QA module Admin class Menu < Page::Base def go_to_license - link = find_link 'License' - link.click + click_link 'License' + end + + def go_to_settings + click_link 'Settings' end end end diff --git a/qa/qa/page/admin/settings.rb b/qa/qa/page/admin/settings.rb new file mode 100644 index 00000000000..39e2f2062ad --- /dev/null +++ b/qa/qa/page/admin/settings.rb @@ -0,0 +1,18 @@ +module QA + module Page + module Admin + class Settings < Page::Base + def enable_hashed_storage + scroll_to 'legend', text: 'Repository Storage' + check 'Create new projects using hashed storage paths' + end + + def save_settings + scroll_to '.form-actions' do + click_button 'Save' + end + end + end + end + end +end diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 69f14386223..1d4a5c54969 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -1,3 +1,5 @@ +require 'capybara/dsl' + module QA module Page class Base @@ -9,8 +11,6 @@ module QA 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) @@ -25,6 +25,21 @@ module QA def self.address raise NotImplementedError end + + def scroll_to(selector, text: nil) + page.execute_script <<~JS + var elements = Array.from(document.querySelectorAll('#{selector}')); + var text = '#{text}'; + + if (text.length > 0) { + elements.find(e => e.textContent === text).scrollIntoView(); + } else { + elements[0].scrollIntoView(); + } + JS + + page.within(selector) { yield } if block_given? + end end end end diff --git a/qa/qa/page/dashboard/projects.rb b/qa/qa/page/dashboard/projects.rb new file mode 100644 index 00000000000..7ed27da6d89 --- /dev/null +++ b/qa/qa/page/dashboard/projects.rb @@ -0,0 +1,11 @@ +module QA + module Page + module Dashboard + class Projects < Page::Base + def go_to_project(name) + find_link(text: name).click + end + end + end + end +end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index 178c5ea6930..bc9c4ec1215 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -7,7 +7,10 @@ module QA end def go_to_projects - within_top_menu { click_link 'Projects' } + within_top_menu do + click_link 'Projects' + click_link 'Your projects' + end end def go_to_admin_area diff --git a/qa/qa/page/main/oauth.rb b/qa/qa/page/main/oauth.rb new file mode 100644 index 00000000000..e746cff0a80 --- /dev/null +++ b/qa/qa/page/main/oauth.rb @@ -0,0 +1,15 @@ +module QA + module Page + module Main + class OAuth < Page::Base + def needs_authorization? + page.current_url.include?('/oauth') + end + + def authorize! + click_button 'Authorize' + end + end + end + end +end diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb index 68d9597c4d2..3b2bac84f3f 100644 --- a/qa/qa/page/project/show.rb +++ b/qa/qa/page/project/show.rb @@ -14,6 +14,10 @@ module QA find('#project_clone').value end + def project_name + find('.project-title').text + end + def wait_for_push sleep 5 end diff --git a/qa/qa/scenario/bootable.rb b/qa/qa/scenario/bootable.rb index cf8996cd597..d6de4d404c8 100644 --- a/qa/qa/scenario/bootable.rb +++ b/qa/qa/scenario/bootable.rb @@ -28,7 +28,7 @@ module QA private - def attribute(name, arg, desc) + def attribute(name, arg, desc = '') options.push(Option.new(name, arg, desc)) end diff --git a/qa/qa/scenario/gitlab/admin/hashed_storage.rb b/qa/qa/scenario/gitlab/admin/hashed_storage.rb new file mode 100644 index 00000000000..ac2cd549829 --- /dev/null +++ b/qa/qa/scenario/gitlab/admin/hashed_storage.rb @@ -0,0 +1,25 @@ +module QA + module Scenario + module Gitlab + module Admin + class HashedStorage < Scenario::Template + def perform(*traits) + raise ArgumentError unless traits.include?(:enabled) + + Page::Main::Entry.act { visit_login_page } + Page::Main::Login.act { sign_in_using_credentials } + Page::Main::Menu.act { go_to_admin_area } + Page::Admin::Menu.act { go_to_settings } + + Page::Admin::Settings.act do + enable_hashed_storage + save_settings + end + + QA::Page::Main::Menu.act { sign_out } + end + end + end + end + end +end diff --git a/qa/qa/shell/omnibus.rb b/qa/qa/shell/omnibus.rb new file mode 100644 index 00000000000..6b3628d3109 --- /dev/null +++ b/qa/qa/shell/omnibus.rb @@ -0,0 +1,39 @@ +require 'open3' + +module QA + module Shell + class Omnibus + include Scenario::Actable + + def initialize(container) + @name = container + end + + def gitlab_ctl(command, input: nil) + if input.nil? + shell "docker exec #{@name} gitlab-ctl #{command}" + else + shell "docker exec #{@name} bash -c '#{input} | gitlab-ctl #{command}'" + end + end + + private + + ## + # TODO, make it possible to use generic QA framework classes + # as a library - gitlab-org/gitlab-qa#94 + # + def shell(command) + puts "Executing `#{command}`" + + Open3.popen2e(command) do |_in, out, wait| + out.each { |line| puts line } + + if wait.value.exited? && wait.value.exitstatus.nonzero? + raise "Docker command `#{command}` failed!" + end + end + end + end + end +end diff --git a/qa/qa/specs/features/mattermost/login_spec.rb b/qa/qa/specs/features/mattermost/login_spec.rb index 7820170a345..4b3987efcb3 100644 --- a/qa/qa/specs/features/mattermost/login_spec.rb +++ b/qa/qa/specs/features/mattermost/login_spec.rb @@ -13,5 +13,16 @@ module QA end end end + + ## + # TODO, temporary workaround for gitlab-org/gitlab-qa#102. + # + after do + visit Runtime::Scenario.mattermost_address + reset_session! + + visit Runtime::Scenario.gitlab_address + reset_session! + end end end |