summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-12-07 13:40:25 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-12-07 13:40:25 +0100
commitfc00d739fcf86b5dbd22cf0eb3c57072ea5b439f (patch)
tree4b4b52c67dd8a04ed9e725c105d65c263a9d7115 /qa
parent4c37cf684d75297a88db2dd1c286a68fd8aec701 (diff)
parentfe62860e05ca6e3ef7125fe92fdf52cd6f7b63df (diff)
downloadgitlab-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/Dockerfile7
-rw-r--r--qa/qa.rb14
-rw-r--r--qa/qa/page/admin/menu.rb7
-rw-r--r--qa/qa/page/admin/settings.rb18
-rw-r--r--qa/qa/page/base.rb19
-rw-r--r--qa/qa/page/dashboard/projects.rb11
-rw-r--r--qa/qa/page/main/menu.rb5
-rw-r--r--qa/qa/page/main/oauth.rb15
-rw-r--r--qa/qa/page/project/show.rb4
-rw-r--r--qa/qa/scenario/bootable.rb2
-rw-r--r--qa/qa/scenario/gitlab/admin/hashed_storage.rb25
-rw-r--r--qa/qa/shell/omnibus.rb39
-rw-r--r--qa/qa/specs/features/mattermost/login_spec.rb11
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 -
diff --git a/qa/qa.rb b/qa/qa.rb
index 3089e515082..4ffa01ad06d 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -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