Merge branch 'qa/gb/gitlab-qa-factories' into 'master'
Rename QA scenarios to make factory concept explicit Closes gitlab-qa#86 See merge request gitlab-org/gitlab-ce!15914
This commit is contained in:
commit
c70793aea9
15 changed files with 199 additions and 197 deletions
46
qa/qa.rb
46
qa/qa.rb
|
@ -12,6 +12,27 @@ module QA
|
|||
autoload :Browser, 'qa/runtime/browser'
|
||||
end
|
||||
|
||||
##
|
||||
# GitLab QA fabrication mechanisms
|
||||
#
|
||||
module Factory
|
||||
autoload :Base, 'qa/factory/base'
|
||||
|
||||
module Resource
|
||||
autoload :Sandbox, 'qa/factory/resource/sandbox'
|
||||
autoload :Group, 'qa/factory/resource/group'
|
||||
autoload :Project, 'qa/factory/resource/project'
|
||||
end
|
||||
|
||||
module Repository
|
||||
autoload :Push, 'qa/factory/repository/push'
|
||||
end
|
||||
|
||||
module Settings
|
||||
autoload :HashedStorage, 'qa/factory/settings/hashed_storage'
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# GitLab QA Scenarios
|
||||
#
|
||||
|
@ -34,31 +55,6 @@ module QA
|
|||
autoload :Mattermost, 'qa/scenario/test/integration/mattermost'
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# GitLab instance scenarios.
|
||||
#
|
||||
module Gitlab
|
||||
module Group
|
||||
autoload :Create, 'qa/scenario/gitlab/group/create'
|
||||
end
|
||||
|
||||
module Project
|
||||
autoload :Create, 'qa/scenario/gitlab/project/create'
|
||||
end
|
||||
|
||||
module Repository
|
||||
autoload :Push, 'qa/scenario/gitlab/repository/push'
|
||||
end
|
||||
|
||||
module Sandbox
|
||||
autoload :Prepare, 'qa/scenario/gitlab/sandbox/prepare'
|
||||
end
|
||||
|
||||
module Admin
|
||||
autoload :HashedStorage, 'qa/scenario/gitlab/admin/hashed_storage'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
|
|
16
qa/qa/factory/base.rb
Normal file
16
qa/qa/factory/base.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
module QA
|
||||
module Factory
|
||||
class Base
|
||||
def self.fabricate!(*args)
|
||||
new.tap do |factory|
|
||||
yield factory if block_given?
|
||||
return factory.fabricate!(*args)
|
||||
end
|
||||
end
|
||||
|
||||
def fabricate!(*_args)
|
||||
raise NotImplementedError
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
45
qa/qa/factory/repository/push.rb
Normal file
45
qa/qa/factory/repository/push.rb
Normal file
|
@ -0,0 +1,45 @@
|
|||
require "pry-byebug"
|
||||
|
||||
module QA
|
||||
module Factory
|
||||
module Repository
|
||||
class Push < Factory::Base
|
||||
PAGE_REGEX_CHECK =
|
||||
%r{\/#{Runtime::Namespace.sandbox_name}\/qa-test[^\/]+\/{1}[^\/]+\z}.freeze
|
||||
|
||||
attr_writer :file_name,
|
||||
:file_content,
|
||||
:commit_message,
|
||||
:branch_name
|
||||
|
||||
def initialize
|
||||
@file_name = 'file.txt'
|
||||
@file_content = '# This is test project'
|
||||
@commit_message = "Add #{@file_name}"
|
||||
@branch_name = 'master'
|
||||
end
|
||||
|
||||
def fabricate!
|
||||
Git::Repository.perform do |repository|
|
||||
repository.location = Page::Project::Show.act do
|
||||
unless PAGE_REGEX_CHECK.match(current_path)
|
||||
raise "To perform this scenario the current page should be project show."
|
||||
end
|
||||
|
||||
choose_repository_clone_http
|
||||
repository_location
|
||||
end
|
||||
|
||||
repository.use_default_credentials
|
||||
repository.clone
|
||||
repository.configure_identity('GitLab QA', 'root@gitlab.com')
|
||||
|
||||
repository.add_file(@file_name, @file_content)
|
||||
repository.commit(@commit_message)
|
||||
repository.push_changes(@branch_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
23
qa/qa/factory/resource/group.rb
Normal file
23
qa/qa/factory/resource/group.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
module QA
|
||||
module Factory
|
||||
module Resource
|
||||
class Group < Factory::Base
|
||||
attr_writer :path, :description
|
||||
|
||||
def initialize
|
||||
@path = Runtime::Namespace.name
|
||||
@description = "QA test run at #{Runtime::Namespace.time}"
|
||||
end
|
||||
|
||||
def fabricate!
|
||||
Page::Group::New.perform do |group|
|
||||
group.set_path(@path)
|
||||
group.set_description(@description)
|
||||
group.set_visibility('Private')
|
||||
group.create
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
40
qa/qa/factory/resource/project.rb
Normal file
40
qa/qa/factory/resource/project.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
require 'securerandom'
|
||||
|
||||
module QA
|
||||
module Factory
|
||||
module Resource
|
||||
class Project < Factory::Base
|
||||
attr_writer :description
|
||||
|
||||
def name=(name)
|
||||
@name = "#{name}-#{SecureRandom.hex(8)}"
|
||||
end
|
||||
|
||||
def fabricate!
|
||||
Factory::Resource::Sandbox.fabricate!
|
||||
|
||||
Page::Group::Show.perform do |page|
|
||||
if page.has_subgroup?(Runtime::Namespace.name)
|
||||
page.go_to_subgroup(Runtime::Namespace.name)
|
||||
else
|
||||
page.go_to_new_subgroup
|
||||
|
||||
Factory::Resource::Group.fabricate! do |group|
|
||||
group.path = Runtime::Namespace.name
|
||||
end
|
||||
end
|
||||
|
||||
page.go_to_new_project
|
||||
end
|
||||
|
||||
Page::Project::New.perform do |page|
|
||||
page.choose_test_namespace
|
||||
page.choose_name(@name)
|
||||
page.add_description(@description)
|
||||
page.create_new_project
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
28
qa/qa/factory/resource/sandbox.rb
Normal file
28
qa/qa/factory/resource/sandbox.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module QA
|
||||
module Factory
|
||||
module Resource
|
||||
##
|
||||
# Ensure we're in our sandbox namespace, either by navigating to it or by
|
||||
# creating it if it doesn't yet exist.
|
||||
#
|
||||
class Sandbox < Factory::Base
|
||||
def fabricate!
|
||||
Page::Main::Menu.act { go_to_groups }
|
||||
|
||||
Page::Dashboard::Groups.perform do |page|
|
||||
if page.has_group?(Runtime::Namespace.sandbox_name)
|
||||
page.go_to_group(Runtime::Namespace.sandbox_name)
|
||||
else
|
||||
page.go_to_new_group
|
||||
|
||||
Resource::Group.fabricate! do |group|
|
||||
group.path = Runtime::Namespace.sandbox_name
|
||||
group.description = 'GitLab QA Sandbox'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
22
qa/qa/factory/settings/hashed_storage.rb
Normal file
22
qa/qa/factory/settings/hashed_storage.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
module QA
|
||||
module Factory
|
||||
module Settings
|
||||
class HashedStorage < Factory::Base
|
||||
def fabricate!(*traits)
|
||||
raise ArgumentError unless traits.include?(:enabled)
|
||||
|
||||
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
|
|
@ -1,24 +0,0 @@
|
|||
module QA
|
||||
module Scenario
|
||||
module Gitlab
|
||||
module Admin
|
||||
class HashedStorage < Scenario::Template
|
||||
def perform(*traits)
|
||||
raise ArgumentError unless traits.include?(:enabled)
|
||||
|
||||
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
|
|
@ -1,27 +0,0 @@
|
|||
require 'securerandom'
|
||||
|
||||
module QA
|
||||
module Scenario
|
||||
module Gitlab
|
||||
module Group
|
||||
class Create < Scenario::Template
|
||||
attr_writer :path, :description
|
||||
|
||||
def initialize
|
||||
@path = Runtime::Namespace.name
|
||||
@description = "QA test run at #{Runtime::Namespace.time}"
|
||||
end
|
||||
|
||||
def perform
|
||||
Page::Group::New.perform do |group|
|
||||
group.set_path(@path)
|
||||
group.set_description(@description)
|
||||
group.set_visibility('Private')
|
||||
group.create
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,42 +0,0 @@
|
|||
require 'securerandom'
|
||||
|
||||
module QA
|
||||
module Scenario
|
||||
module Gitlab
|
||||
module Project
|
||||
class Create < Scenario::Template
|
||||
attr_writer :description
|
||||
|
||||
def name=(name)
|
||||
@name = "#{name}-#{SecureRandom.hex(8)}"
|
||||
end
|
||||
|
||||
def perform
|
||||
Scenario::Gitlab::Sandbox::Prepare.perform
|
||||
|
||||
Page::Group::Show.perform do |page|
|
||||
if page.has_subgroup?(Runtime::Namespace.name)
|
||||
page.go_to_subgroup(Runtime::Namespace.name)
|
||||
else
|
||||
page.go_to_new_subgroup
|
||||
|
||||
Scenario::Gitlab::Group::Create.perform do |group|
|
||||
group.path = Runtime::Namespace.name
|
||||
end
|
||||
end
|
||||
|
||||
page.go_to_new_project
|
||||
end
|
||||
|
||||
Page::Project::New.perform do |page|
|
||||
page.choose_test_namespace
|
||||
page.choose_name(@name)
|
||||
page.add_description(@description)
|
||||
page.create_new_project
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,47 +0,0 @@
|
|||
require "pry-byebug"
|
||||
|
||||
module QA
|
||||
module Scenario
|
||||
module Gitlab
|
||||
module Repository
|
||||
class Push < Scenario::Template
|
||||
PAGE_REGEX_CHECK =
|
||||
%r{\/#{Runtime::Namespace.sandbox_name}\/qa-test[^\/]+\/{1}[^\/]+\z}.freeze
|
||||
|
||||
attr_writer :file_name,
|
||||
:file_content,
|
||||
:commit_message,
|
||||
:branch_name
|
||||
|
||||
def initialize
|
||||
@file_name = 'file.txt'
|
||||
@file_content = '# This is test project'
|
||||
@commit_message = "Add #{@file_name}"
|
||||
@branch_name = 'master'
|
||||
end
|
||||
|
||||
def perform
|
||||
Git::Repository.perform do |repository|
|
||||
repository.location = Page::Project::Show.act do
|
||||
unless PAGE_REGEX_CHECK.match(current_path)
|
||||
raise "To perform this scenario the current page should be project show."
|
||||
end
|
||||
|
||||
choose_repository_clone_http
|
||||
repository_location
|
||||
end
|
||||
|
||||
repository.use_default_credentials
|
||||
repository.clone
|
||||
repository.configure_identity('GitLab QA', 'root@gitlab.com')
|
||||
|
||||
repository.add_file(@file_name, @file_content)
|
||||
repository.commit(@commit_message)
|
||||
repository.push_changes(@branch_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,28 +0,0 @@
|
|||
module QA
|
||||
module Scenario
|
||||
module Gitlab
|
||||
module Sandbox
|
||||
# Ensure we're in our sandbox namespace, either by navigating to it or
|
||||
# by creating it if it doesn't yet exist
|
||||
class Prepare < Scenario::Template
|
||||
def perform
|
||||
Page::Main::Menu.act { go_to_groups }
|
||||
|
||||
Page::Dashboard::Groups.perform do |page|
|
||||
if page.has_group?(Runtime::Namespace.sandbox_name)
|
||||
page.go_to_group(Runtime::Namespace.sandbox_name)
|
||||
else
|
||||
page.go_to_new_group
|
||||
|
||||
Scenario::Gitlab::Group::Create.perform do |group|
|
||||
group.path = Runtime::Namespace.sandbox_name
|
||||
group.description = 'QA sandbox'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,7 +4,7 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Scenario::Gitlab::Project::Create.perform do |project|
|
||||
Factory::Resource::Project.fabricate!do |project|
|
||||
project.name = 'awesome-project'
|
||||
project.description = 'create awesome project test'
|
||||
end
|
||||
|
|
|
@ -12,7 +12,7 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Scenario::Gitlab::Project::Create.perform do |scenario|
|
||||
Factory::Resource::Project.fabricate! do |scenario|
|
||||
scenario.name = 'project-with-code'
|
||||
scenario.description = 'project for git clone tests'
|
||||
end
|
||||
|
|
|
@ -5,12 +5,12 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Scenario::Gitlab::Project::Create.perform do |scenario|
|
||||
Factory::Resource::Project.fabricate! do |scenario|
|
||||
scenario.name = 'project_with_code'
|
||||
scenario.description = 'project with repository'
|
||||
end
|
||||
|
||||
Scenario::Gitlab::Repository::Push.perform do |scenario|
|
||||
Factory::Repository::Push.fabricate! do |scenario|
|
||||
scenario.file_name = 'README.md'
|
||||
scenario.file_content = '# This is test project'
|
||||
scenario.commit_message = 'Add README.md'
|
||||
|
|
Loading…
Reference in a new issue