Skip to content
Snippets Groups Projects
Commit 0a7e1640 authored by Andrejs Cunskis's avatar Andrejs Cunskis
Browse files

Remove group name caching in e2e tests

Promote test isolation by always using a unique group name

Update code that relied on Namespace class methods returning constant
values

Explicitly fabricate sandboxes and groups in specs

Adjust screenshot generation to not use group and fix rubocop issues in
browser.rb

Do not exceed npm package name length
parent 11b4d14e
No related branches found
No related tags found
No related merge requests found
Showing
with 167 additions and 220 deletions
Loading
@@ -16,7 +16,7 @@ class New < Page::Base
Loading
@@ -16,7 +16,7 @@ class New < Page::Base
element 'select-namespace-dropdown' element 'select-namespace-dropdown'
end end
   
def fork_project(namespace = Runtime::Namespace.path) def fork_project(namespace)
choose_namespace(namespace) choose_namespace(namespace)
click_element('fork-privacy-button', privacy_level: 'public') click_element('fork-privacy-button', privacy_level: 'public')
click_element('fork-project-button') click_element('fork-project-button')
Loading
Loading
Loading
@@ -13,10 +13,10 @@ class RepoByURL < Page::Base
Loading
@@ -13,10 +13,10 @@ class RepoByURL < Page::Base
element 'project-create-button' element 'project-create-button'
end end
   
def import!(gitlab_repo_path, name) def import!(gitlab_repo_path, name, namespace)
fill_git_repository_url_link(gitlab_repo_path) fill_git_repository_url_link(gitlab_repo_path)
fill_project_name(name) fill_project_name(name)
choose_test_namespace choose_namespace(namespace)
click_create_button click_create_button
   
wait_for_success wait_for_success
Loading
@@ -32,10 +32,6 @@ def fill_project_name(name)
Loading
@@ -32,10 +32,6 @@ def fill_project_name(name)
fill_in 'project_name', with: name fill_in 'project_name', with: name
end end
   
def choose_test_namespace
choose_namespace(Runtime::Namespace.path)
end
def choose_namespace(namespace) def choose_namespace(namespace)
retry_on_exception do retry_on_exception do
click_element 'select-namespace-dropdown' click_element 'select-namespace-dropdown'
Loading
Loading
Loading
@@ -43,10 +43,6 @@ def click_create_from_template_link
Loading
@@ -43,10 +43,6 @@ def click_create_from_template_link
click_element('panel-link', panel_name: 'create_from_template') click_element('panel-link', panel_name: 'create_from_template')
end end
   
def choose_test_namespace
choose_namespace(Runtime::Namespace.path)
end
def choose_namespace(namespace) def choose_namespace(namespace)
# The current group is the default, we use end_with? in case we want to select the top level group # The current group is the default, we use end_with? in case we want to select the top level group
return if find_element('select-namespace-dropdown').text.end_with?(namespace) return if find_element('select-namespace-dropdown').text.end_with?(namespace)
Loading
Loading
Loading
@@ -3,20 +3,12 @@
Loading
@@ -3,20 +3,12 @@
module QA module QA
module Resource module Resource
class Group < GroupBase class Group < GroupBase
attributes :require_two_factor_authentication, :description, :path attributes :require_two_factor_authentication, :description
   
attribute :full_path do attribute :full_path do
determine_full_path determine_full_path
end end
   
attribute :name do
@name || @path || Runtime::Namespace.name
end
attribute :path do
@path || @name || Runtime::Namespace.name
end
attribute :sandbox do attribute :sandbox do
if Runtime::Env.personal_access_tokens_disabled? if Runtime::Env.personal_access_tokens_disabled?
Resource::Sandbox.fabricate! do |sandbox| Resource::Sandbox.fabricate! do |sandbox|
Loading
@@ -29,8 +21,13 @@ class Group < GroupBase
Loading
@@ -29,8 +21,13 @@ class Group < GroupBase
end end
end end
   
attribute :name do
path
end
def initialize def initialize
@description = "QA test run at #{Runtime::Namespace.time}" @description = "QA test run at #{Runtime::Namespace.time}"
@path = Runtime::Namespace.group_name
@require_two_factor_authentication = false @require_two_factor_authentication = false
# Add visibility to enable create private group # Add visibility to enable create private group
@visibility = 'public' @visibility = 'public'
Loading
Loading
Loading
@@ -9,11 +9,12 @@ class GroupBase < Base
Loading
@@ -9,11 +9,12 @@ class GroupBase < Base
   
MAX_NAME_LENGTH = 255 MAX_NAME_LENGTH = 255
   
attr_accessor :path, :avatar attr_accessor :avatar
   
attributes :id, attributes :id,
:runners_token, :runners_token,
:name, :name,
:path,
:full_path, :full_path,
# Add visibility to enable create private group # Add visibility to enable create private group
:visibility :visibility
Loading
Loading
Loading
@@ -106,11 +106,7 @@ def fabricate!
Loading
@@ -106,11 +106,7 @@ def fabricate!
Page::Project::New.perform(&:click_blank_project_link) Page::Project::New.perform(&:click_blank_project_link)
   
Page::Project::New.perform do |new_page| Page::Project::New.perform do |new_page|
if @personal_namespace new_page.choose_namespace(@personal_namespace || group.path)
new_page.choose_namespace(@personal_namespace)
else
new_page.choose_test_namespace
end
   
new_page.choose_name(@name) new_page.choose_name(@name)
new_page.add_description(@description) if @description new_page.add_description(@description) if @description
Loading
Loading
Loading
@@ -17,7 +17,7 @@ def fabricate!
Loading
@@ -17,7 +17,7 @@ def fabricate!
end end
   
Page::Project::Import::RepoByURL.perform do |import_page| Page::Project::Import::RepoByURL.perform do |import_page|
import_page.import!(@gitlab_repository_path, @name) import_page.import!(@gitlab_repository_path, @name, group.full_path)
end end
end end
end end
Loading
Loading
Loading
@@ -21,26 +21,11 @@ def self.blank_page?
Loading
@@ -21,26 +21,11 @@ def self.blank_page?
true true
end end
   
## def self.visit(address, page_class, &)
# Visit a page that belongs to a GitLab instance under given address. new.visit(address, page_class, &)
#
# Example:
#
# visit(:gitlab, Page::Main::Login)
# visit('http://gitlab.example/users/sign_in')
#
# In case of an address that is a symbol we will try to guess address
# based on `Runtime::Scenario#something_address`.
#
def visit(address, page_class, &block)
Browser::Session.new(address, page_class).perform(&block)
end end
   
def self.visit(address, page_class, &block) def self.configure! # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity -- TODO: Break up this method
new.visit(address, page_class, &block)
end
def self.configure! # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
return if QA::Runtime::Env.dry_run return if QA::Runtime::Env.dry_run
return if @configured return if @configured
   
Loading
@@ -205,10 +190,7 @@ def self.configure! # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplex
Loading
@@ -205,10 +190,7 @@ def self.configure! # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplex
end end
   
Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example| Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example|
::File.join( ::File.join("failure_screenshots", example.full_description.downcase.parameterize(separator: "_")[0..79])
QA::Runtime::Namespace.name(reset_cache: false),
example.full_description.downcase.parameterize(separator: "_")[0..79]
)
end end
   
Capybara.configure do |config| Capybara.configure do |config|
Loading
@@ -236,11 +218,69 @@ def self.chrome_profile_location
Loading
@@ -236,11 +218,69 @@ def self.chrome_profile_location
::File.expand_path('../../tmp/qa-profile', __dir__) ::File.expand_path('../../tmp/qa-profile', __dir__)
end end
   
##
# Visit a page that belongs to a GitLab instance under given address.
#
# Example:
#
# visit(:gitlab, Page::Main::Login)
# visit('http://gitlab.example/users/sign_in')
#
# In case of an address that is a symbol we will try to guess address
# based on `Runtime::Scenario#something_address`.
#
def visit(address, page_class, &)
Browser::Session.new(address, page_class).perform(&)
end
class Session class Session
include Capybara::DSL include Capybara::DSL
   
attr_reader :page_class attr_reader :page_class
   
# To redirect the browser to a canary or non-canary web node
# after loading a subject test page
# @param [Boolean] Send to canary true or false
# @example:
# Runtime::Browser::Session.target_canary(true)
def self.target_canary(enable_canary)
if QA::Runtime::Env.qa_cookies.to_s.include?("gitlab_canary=true")
QA::Runtime::Logger.warn("WARNING: Setting cookie through QA_COOKIES var is incompatible with this method.")
return
end
browser = Capybara.current_session.driver.browser
if enable_canary
browser.manage.add_cookie name: "gitlab_canary", value: "true"
else
browser.manage.delete_cookie("gitlab_canary")
end
browser.navigate.refresh
end
def self.enable_interception
script = File.read("#{__dir__}/script_extensions/interceptor.js")
command = {
cmd: 'Page.addScriptToEvaluateOnNewDocument',
params: {
source: script
}
}
@interceptor_script_params = Capybara.current_session.driver.browser.send(:bridge).send_command(command)
end
def self.disable_interception
return unless @interceptor_script_params
command = {
cmd: 'Page.removeScriptToEvaluateOnNewDocument',
params: @interceptor_script_params
}
Capybara.current_session.driver.browser.send(:bridge).send_command(command)
end
def initialize(instance, page_class) def initialize(instance, page_class)
@session_address = Runtime::Address.new(instance, page_class) @session_address = Runtime::Address.new(instance, page_class)
@page_class = page_class @page_class = page_class
Loading
@@ -274,28 +314,6 @@ def perform(&block)
Loading
@@ -274,28 +314,6 @@ def perform(&block)
yield.tap { clear! } if block yield.tap { clear! } if block
end end
   
# To redirect the browser to a canary or non-canary web node
# after loading a subject test page
# @param [Boolean] Send to canary true or false
# @example:
# Runtime::Browser::Session.target_canary(true)
def self.target_canary(enable_canary)
if QA::Runtime::Env.qa_cookies.to_s.include?("gitlab_canary=true")
QA::Runtime::Logger.warn("WARNING: Setting cookie through QA_COOKIES var is incompatible with this method.")
return
end
browser = Capybara.current_session.driver.browser
if enable_canary
browser.manage.add_cookie name: "gitlab_canary", value: "true"
else
browser.manage.delete_cookie("gitlab_canary")
end
browser.navigate.refresh
end
## ##
# Selenium allows to reset session cookies for current domain only. # Selenium allows to reset session cookies for current domain only.
# #
Loading
@@ -307,27 +325,6 @@ def clear!
Loading
@@ -307,27 +325,6 @@ def clear!
@network_conditions_configured = false @network_conditions_configured = false
end end
   
def self.enable_interception
script = File.read("#{__dir__}/script_extensions/interceptor.js")
command = {
cmd: 'Page.addScriptToEvaluateOnNewDocument',
params: {
source: script
}
}
@interceptor_script_params = Capybara.current_session.driver.browser.send(:bridge).send_command(command)
end
def self.disable_interception
return unless @interceptor_script_params
command = {
cmd: 'Page.removeScriptToEvaluateOnNewDocument',
params: @interceptor_script_params
}
Capybara.current_session.driver.browser.send(:bridge).send_command(command)
end
private private
   
def simulate_slow_connection def simulate_slow_connection
Loading
Loading
Loading
@@ -410,10 +410,6 @@ def qa_hostname
Loading
@@ -410,10 +410,6 @@ def qa_hostname
ENV['QA_HOSTNAME'] ENV['QA_HOSTNAME']
end end
   
def cache_namespace_name?
enabled?(ENV['CACHE_NAMESPACE_NAME'], default: true)
end
def knapsack? def knapsack?
ENV['CI_NODE_TOTAL'].to_i > 1 && ENV['NO_KNAPSACK'] != "true" ENV['CI_NODE_TOTAL'].to_i > 1 && ENV['NO_KNAPSACK'] != "true"
end end
Loading
Loading
Loading
@@ -2,35 +2,33 @@
Loading
@@ -2,35 +2,33 @@
   
module QA module QA
module Runtime module Runtime
# Global helper methods for unique group name generation
#
# Avoid using directly, instead use through fabricated instances of Sandbox and Group resources
module Namespace module Namespace
extend self class << self
def time
@time ||= Time.now
end
   
def time # Random group name with specific pattern
@time ||= Time.now #
end # @return [String]
def group_name
def name(reset_cache: !Runtime::Env.cache_namespace_name?) Env.namespace_name || "qa-test-#{time.strftime('%Y-%m-%d-%H-%M-%S')}-#{SecureRandom.hex(8)}"
# If any changes are made to the name tag, following script has to be considered: end
# https://ops.gitlab.net/gitlab-com/gl-infra/traffic-generator/blob/master/bin/janitor.bash
reset_name_cache if reset_cache
@name ||= Runtime::Env.namespace_name || "qa-test-#{time.strftime('%Y-%m-%d-%H-%M-%S')}-#{SecureRandom.hex(8)}" # rubocop:disable Gitlab/ModuleWithInstanceVariables
end
def reset_name_cache
@name = nil # rubocop:disable Gitlab/ModuleWithInstanceVariables
end
def path
"#{sandbox_name}/#{name(reset_cache: false)}"
end
   
def sandbox_name # Predefined top level group name
@sandbox_name ||= Runtime::Env.sandbox_name || #
if !QA::Runtime::Env.running_on_dot_com? && QA::Runtime::Env.run_in_parallel? # @return [String]
"gitlab-qa-sandbox-group-#{SecureRandom.hex(4)}-#{Time.now.wday + 1}" def sandbox_name
else @sandbox_name ||= Runtime::Env.sandbox_name ||
"gitlab-qa-sandbox-group-#{Time.now.wday + 1}" if !QA::Runtime::Env.running_on_dot_com? && QA::Runtime::Env.run_in_parallel?
end "gitlab-qa-sandbox-group-#{SecureRandom.hex(4)}-#{Time.now.wday + 1}"
else
"gitlab-qa-sandbox-group-#{Time.now.wday + 1}"
end
end
end end
end end
end end
Loading
Loading
Loading
@@ -8,9 +8,18 @@ module QA
Loading
@@ -8,9 +8,18 @@ module QA
include Runtime::Fixtures include Runtime::Fixtures
include Support::Helpers::MaskToken include Support::Helpers::MaskToken
   
let!(:registry_scope) { Runtime::Namespace.sandbox_name } let!(:personal_access_token) { Resource::PersonalAccessToken.fabricate_via_api!.token }
let!(:personal_access_token) do
Resource::PersonalAccessToken.fabricate_via_api!.token let!(:group) { create(:group) }
let!(:registry_scope) { group.sandbox.name }
let!(:project) { create(:project, name: 'npm-group-publish', group: group) }
let!(:another_project) { create(:project, name: 'npm-group-install', group: group) }
let!(:runner) do
create(:group_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{group.name}"],
executor: :docker,
group: group)
end end
   
let(:project_deploy_token) do let(:project_deploy_token) do
Loading
@@ -26,19 +35,7 @@ module QA
Loading
@@ -26,19 +35,7 @@ module QA
   
let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) } let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) }
let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) } let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) }
let!(:project) { create(:project, name: 'npm-group-level-publish') } let(:package) { build(:package, name: "@#{registry_scope}/#{project.name}", project: project) }
let!(:another_project) { create(:project, name: 'npm-group-level-install', group: project.group) }
let!(:runner) do
create(:group_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{project.group.name}"],
executor: :docker,
group: project.group)
end
let(:package) do
build(:package, name: "@#{registry_scope}/#{project.name}-#{SecureRandom.hex(8)}", project: project)
end
   
before do before do
Flow::Login.sign_in Flow::Login.sign_in
Loading
Loading
Loading
@@ -8,9 +8,18 @@ module QA
Loading
@@ -8,9 +8,18 @@ module QA
include Runtime::Fixtures include Runtime::Fixtures
include Support::Helpers::MaskToken include Support::Helpers::MaskToken
   
let!(:registry_scope) { Runtime::Namespace.sandbox_name } let!(:personal_access_token) { Resource::PersonalAccessToken.fabricate_via_api!.token }
let!(:personal_access_token) do
Resource::PersonalAccessToken.fabricate_via_api!.token let!(:group) { create(:group) }
let!(:registry_scope) { group.sandbox.name }
let!(:project) { create(:project, name: 'npm-instance-publish', group: group) }
let!(:another_project) { create(:project, name: 'npm-instance-install', group: group) }
let!(:runner) do
create(:group_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{group.name}"],
executor: :docker,
group: group)
end end
   
let(:project_deploy_token) do let(:project_deploy_token) do
Loading
@@ -26,19 +35,7 @@ module QA
Loading
@@ -26,19 +35,7 @@ module QA
   
let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) } let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) }
let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) } let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) }
let!(:project) { create(:project, name: 'npm-instance-level-publish') } let(:package) { build(:package, name: "@#{registry_scope}/#{project.name}", project: project) }
let!(:another_project) { create(:project, name: 'npm-instance-level-install', group: project.group) }
let!(:runner) do
create(:group_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{project.group.name}"],
executor: :docker,
group: project.group)
end
let(:package) do
build(:package, name: "@#{registry_scope}/#{project.name}-#{SecureRandom.hex(8)}", project: project)
end
   
before do before do
Flow::Login.sign_in Flow::Login.sign_in
Loading
Loading
Loading
@@ -8,9 +8,16 @@ module QA
Loading
@@ -8,9 +8,16 @@ module QA
include Runtime::Fixtures include Runtime::Fixtures
include Support::Helpers::MaskToken include Support::Helpers::MaskToken
   
let!(:registry_scope) { Runtime::Namespace.sandbox_name } let!(:group) { create(:group) }
let!(:personal_access_token) do let!(:registry_scope) { group.sandbox.name }
Resource::PersonalAccessToken.fabricate_via_api!.token let!(:personal_access_token) { Resource::PersonalAccessToken.fabricate_via_api!.token }
let!(:project) { create(:project, :private, name: 'npm-project-level', group: group) }
let!(:runner) do
create(:project_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{project.name}"],
executor: :docker,
project: project)
end end
   
let(:project_deploy_token) do let(:project_deploy_token) do
Loading
@@ -26,15 +33,6 @@ module QA
Loading
@@ -26,15 +33,6 @@ module QA
   
let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) } let(:gitlab_address_without_port) { Support::GitlabAddress.address_with_port(with_default_port: false) }
let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) } let(:gitlab_host_without_port) { Support::GitlabAddress.host_with_port(with_default_port: false) }
let!(:project) { create(:project, :private, name: 'npm-project-level') }
let!(:runner) do
create(:project_runner,
name: "qa-runner-#{SecureRandom.hex(6)}",
tags: ["runner-for-#{project.name}"],
executor: :docker,
project: project)
end
let(:package) { build(:package, name: "@#{registry_scope}/mypackage-#{SecureRandom.hex(8)}", project: project) } let(:package) { build(:package, name: "@#{registry_scope}/mypackage-#{SecureRandom.hex(8)}", project: project) }
   
before do before do
Loading
Loading
Loading
@@ -3,6 +3,21 @@
Loading
@@ -3,6 +3,21 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Project templates', product_group: :source_code do describe 'Project templates', product_group: :source_code do
let!(:group) { create(:group) }
let(:sandbox) { group.sandbox }
let(:template_container_group_name) { "instance-template-container-group-#{SecureRandom.hex(8)}" }
let(:template_container_group) do
create(
:group,
path: template_container_group_name,
description: 'Instance template container group',
sandbox: sandbox
)
end
let(:template_project) { create(:project, name: 'template-project-1', group: template_container_group) }
let(:files) do let(:files) do
[ [
{ {
Loading
@@ -16,14 +31,6 @@ module QA
Loading
@@ -16,14 +31,6 @@ module QA
] ]
end end
   
let(:template_container_group_name) { "instance-template-container-group-#{SecureRandom.hex(8)}" }
let(:template_container_group) do
create(:group, path: template_container_group_name, description: 'Instance template container group')
end
let(:template_project) { create(:project, name: 'template-project-1', group: template_container_group) }
before do before do
Resource::Repository::ProjectPush.fabricate! do |push| Resource::Repository::ProjectPush.fabricate! do |push|
push.project = template_project push.project = template_project
Loading
@@ -41,7 +48,7 @@ module QA
Loading
@@ -41,7 +48,7 @@ module QA
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347932' do testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347932' do
built_in = 'Ruby on Rails' built_in = 'Ruby on Rails'
   
create(:group).visit! group.visit!
Page::Group::Show.perform(&:go_to_new_project) Page::Group::Show.perform(&:go_to_new_project)
   
QA::Flow::Project.go_to_create_project_from_template QA::Flow::Project.go_to_create_project_from_template
Loading
@@ -52,7 +59,7 @@ module QA
Loading
@@ -52,7 +59,7 @@ module QA
   
create_project_using_template( create_project_using_template(
project_name: 'Project using built-in project template', project_name: 'Project using built-in project template',
namespace: Runtime::Namespace.name(reset_cache: false), namespace: group.name,
template_name: built_in template_name: built_in
) )
   
Loading
@@ -86,7 +93,7 @@ module QA
Loading
@@ -86,7 +93,7 @@ module QA
end end
end end
   
create(:group).visit! group.visit!
   
Page::Group::Show.perform(&:go_to_new_project) Page::Group::Show.perform(&:go_to_new_project)
   
Loading
@@ -115,7 +122,7 @@ module QA
Loading
@@ -115,7 +122,7 @@ module QA
   
create_project_using_template( create_project_using_template(
project_name: 'Project using instance level project template', project_name: 'Project using instance level project template',
namespace: Runtime::Namespace.path, namespace: group.full_path,
template_name: template_project.name template_name: template_project.name
) )
   
Loading
@@ -134,7 +141,7 @@ module QA
Loading
@@ -134,7 +141,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
   
Page::Main::Menu.perform(&:go_to_groups) Page::Main::Menu.perform(&:go_to_groups)
Page::Dashboard::Groups.perform { |groups| groups.click_group(Runtime::Namespace.sandbox_name) } Page::Dashboard::Groups.perform { |groups| groups.click_group(sandbox.name) }
   
Page::Group::Menu.perform(&:go_to_general_settings) Page::Group::Menu.perform(&:go_to_general_settings)
   
Loading
@@ -148,7 +155,6 @@ module QA
Loading
@@ -148,7 +155,6 @@ module QA
end end
end end
   
group = create(:group)
group.visit! group.visit!
   
Page::Group::Show.perform(&:go_to_new_project) Page::Group::Show.perform(&:go_to_new_project)
Loading
@@ -172,7 +178,7 @@ module QA
Loading
@@ -172,7 +178,7 @@ module QA
   
create_project_using_template( create_project_using_template(
project_name: 'Project using group level project template', project_name: 'Project using group level project template',
namespace: Runtime::Namespace.sandbox_name, namespace: sandbox.name,
template_name: template_project.name template_name: template_project.name
) )
   
Loading
Loading
Loading
@@ -3,54 +3,26 @@
Loading
@@ -3,54 +3,26 @@
RSpec.describe QA::Runtime::Namespace do RSpec.describe QA::Runtime::Namespace do
include QA::Support::Helpers::StubEnv include QA::Support::Helpers::StubEnv
   
describe '.name' do let!(:time) { described_class.time }
context 'when CACHE_NAMESPACE_NAME is not defined' do
before do
stub_env('CACHE_NAMESPACE_NAME', nil)
end
   
it 'caches name by default' do before(:context) do
name = described_class.name described_class.instance_variable_set(:@time, nil)
expect(described_class.name).to eq(name) described_class.instance_variable_set(:@sandbox_name, nil)
end end
it 'does not cache name when reset_cache is true' do
name = described_class.name
expect(described_class.name(reset_cache: true)).not_to eq(name)
end
end
context 'when CACHE_NAMESPACE_NAME is defined' do
before do
stub_env('CACHE_NAMESPACE_NAME', 'true')
end
it 'caches name by default' do
name = described_class.name
expect(described_class.name).to eq(name)
end
it 'caches name when reset_cache is false' do
name = described_class.name
expect(described_class.name(reset_cache: false)).to eq(name)
end
   
it 'does not cache name when reset_cache is true' do describe '.group_name' do
name = described_class.name it "returns unique name with predefined pattern" do
expect(described_class.name(reset_cache: true)).not_to eq(name) expect(described_class.group_name).to match(/qa-test-#{time.strftime('%Y-%m-%d-%H-%M-%S')}-[a-f0-9]{16}/)
end
end end
end end
   
describe '.path' do describe '.sandbox_name' do
before do before do
allow(QA::Runtime::Scenario).to receive(:gitlab_address).and_return("http://gitlab.test") allow(QA::Runtime::Scenario).to receive(:gitlab_address).and_return("http://gitlab.test")
described_class.instance_variable_set(:@sandbox_name, nil)
end end
   
it 'is always cached' do it "returns day specific sandbox name" do
path = described_class.path expect(described_class.sandbox_name).to match(%r{gitlab-qa-sandbox-group-#{time.wday + 1}})
expect(described_class.path).to eq(path)
end end
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment