summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
Diffstat (limited to 'qa')
-rw-r--r--qa/Gemfile2
-rw-r--r--qa/Gemfile.lock12
-rw-r--r--qa/qa/flow/sign_up.rb4
-rw-r--r--qa/qa/page/admin/overview/users/index.rb4
-rw-r--r--qa/qa/page/component/delete_modal.rb35
-rw-r--r--qa/qa/page/component/groups_filter.rb23
-rw-r--r--qa/qa/page/group/new.rb2
-rw-r--r--qa/qa/page/project/new.rb2
-rw-r--r--qa/qa/page/project/settings/advanced.rb12
-rw-r--r--qa/qa/resource/base.rb16
-rw-r--r--qa/qa/resource/group.rb10
-rw-r--r--qa/qa/resource/members.rb7
-rw-r--r--qa/qa/resource/project.rb10
-rw-r--r--qa/qa/resource/sandbox.rb4
-rw-r--r--qa/qa/resource/user.rb15
-rw-r--r--qa/qa/runtime/key/ed25519.rb4
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb15
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb36
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb5
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb6
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb6
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb9
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb2
-rw-r--r--qa/qa/support/fips.rb2
-rw-r--r--qa/spec/resource/base_spec.rb36
-rw-r--r--qa/spec/resource/user_spec.rb27
28 files changed, 266 insertions, 44 deletions
diff --git a/qa/Gemfile b/qa/Gemfile
index 1761f0b4eda..dd03dd57ae4 100644
--- a/qa/Gemfile
+++ b/qa/Gemfile
@@ -4,7 +4,7 @@ source 'https://rubygems.org'
gem 'gitlab-qa', '~> 8', '>= 8.10.1', require: 'gitlab/qa'
gem 'activesupport', '~> 6.1.4.7' # This should stay in sync with the root's Gemfile
-gem 'allure-rspec', '~> 2.18.0'
+gem 'allure-rspec', '~> 2.19.0'
gem 'capybara', '~> 3.38.0'
gem 'capybara-screenshot', '~> 1.0.26'
gem 'rake', '~> 13', '>= 13.0.6'
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock
index c99a955da97..d7df75b341b 100644
--- a/qa/Gemfile.lock
+++ b/qa/Gemfile.lock
@@ -15,10 +15,10 @@ GEM
rack-test (>= 1.1.0, < 2.0)
rest-client (>= 2.0.2, < 3.0)
rspec (~> 3.8)
- allure-rspec (2.18.0)
- allure-ruby-commons (= 2.18.0)
+ allure-rspec (2.19.0)
+ allure-ruby-commons (= 2.19.0)
rspec-core (>= 3.8, < 4)
- allure-ruby-commons (2.18.0)
+ allure-ruby-commons (2.19.0)
mime-types (>= 3.3, < 4)
oj (>= 3.10, < 4)
require_all (>= 2, < 4)
@@ -184,7 +184,7 @@ GEM
octokit (6.0.0)
faraday (>= 1, < 3)
sawyer (~> 0.9)
- oj (3.13.21)
+ oj (3.13.23)
os (1.1.4)
parallel (1.22.1)
parallel_tests (4.0.0)
@@ -301,7 +301,7 @@ PLATFORMS
DEPENDENCIES
activesupport (~> 6.1.4.7)
airborne (~> 0.3.7)
- allure-rspec (~> 2.18.0)
+ allure-rspec (~> 2.19.0)
capybara (~> 3.38.0)
capybara-screenshot (~> 1.0.26)
chemlab (~> 0.10)
@@ -338,4 +338,4 @@ DEPENDENCIES
zeitwerk (~> 2.4)
BUNDLED WITH
- 2.3.24
+ 2.3.25
diff --git a/qa/qa/flow/sign_up.rb b/qa/qa/flow/sign_up.rb
index 52c92293bad..abaab064a73 100644
--- a/qa/qa/flow/sign_up.rb
+++ b/qa/qa/flow/sign_up.rb
@@ -37,7 +37,9 @@ module QA
Page::Main::Menu.perform(&:not_signed_in?)
end
- raise "Failed user registration attempt. Registration was expected to #{user.expect_fabrication_success ? 'succeed' : 'fail'} but #{success ? 'succeeded' : 'failed'}." unless success
+ return if success
+
+ raise "Failed user registration attempt. Registration was expected to #{user.expect_fabrication_success ? 'succeed' : 'fail'} but #{success ? 'succeeded' : 'failed'}."
end
def disable_sign_ups
diff --git a/qa/qa/page/admin/overview/users/index.rb b/qa/qa/page/admin/overview/users/index.rb
index 2ad45e4a0fa..f46ae30498c 100644
--- a/qa/qa/page/admin/overview/users/index.rb
+++ b/qa/qa/page/admin/overview/users/index.rb
@@ -28,6 +28,10 @@ module QA
click_link(username)
end
end
+
+ def has_username?(username)
+ has_element?(:user_row_content, text: username, wait: 1)
+ end
end
end
end
diff --git a/qa/qa/page/component/delete_modal.rb b/qa/qa/page/component/delete_modal.rb
new file mode 100644
index 00000000000..18bb2b1bb1b
--- /dev/null
+++ b/qa/qa/page/component/delete_modal.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module DeleteModal
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/projects/components/shared/delete_button.vue' do
+ element :confirm_name_field
+ element :confirm_delete_button
+ end
+ end
+
+ def fill_confirmation_path(text)
+ fill_element(:confirm_name_field, text)
+ end
+
+ def wait_for_delete_button_enabled
+ wait_until(reload: false) do
+ !find_element(:confirm_delete_button).disabled?
+ end
+ end
+
+ def confirm_delete
+ wait_for_delete_button_enabled
+ click_element(:confirm_delete_button)
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/groups_filter.rb b/qa/qa/page/component/groups_filter.rb
index 28b8ece918d..ec59d010718 100644
--- a/qa/qa/page/component/groups_filter.rb
+++ b/qa/qa/page/component/groups_filter.rb
@@ -16,6 +16,10 @@ module QA
base.view 'app/assets/javascripts/groups/components/groups.vue' do
element :groups_list_tree_container
end
+
+ base.view 'app/views/dashboard/_groups_head.html.haml' do
+ element :public_groups_tab
+ end
end
private
@@ -28,9 +32,24 @@ module QA
# groups_list_tree_container means we have the complete filtered list
# of groups
has_element?(:groups_list_tree_container, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME)
-
# If there are no groups we'll know immediately because we filtered the list
- return false if page.has_text?('No groups or projects matched your search', wait: 0)
+ if page.has_text?('No groups or projects matched your search',
+wait: 0) || page.has_text?('No groups matched your search', wait: 0)
+ return false unless has_element?(:public_groups_tab)
+
+ # Try for public groups
+ click_element(:public_groups_tab)
+ # Filter and submit to reload the page and only retrieve the filtered results
+ find_element(:groups_filter_field).set(name).send_keys(:return)
+
+ # Since we submitted after filtering, the presence of
+ # groups_list_tree_container means we have the complete filtered list
+ # of groups
+ has_element?(:groups_list_tree_container, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME)
+
+ return false if page.has_text?('No groups or projects matched your search',
+wait: 0) || page.has_text?('No groups matched your search', wait: 0)
+ end
# The name will be present as filter input so we check for a link, not text
page.has_link?(name, wait: 0)
diff --git a/qa/qa/page/group/new.rb b/qa/qa/page/group/new.rb
index 1f17b470ada..47fda787085 100644
--- a/qa/qa/page/group/new.rb
+++ b/qa/qa/page/group/new.rb
@@ -31,7 +31,7 @@ module QA
end
def create
- click_button 'Create group'
+ click_element(:create_group_button)
end
def create_subgroup
diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb
index fd650d8ca20..f7434656be3 100644
--- a/qa/qa/page/project/new.rb
+++ b/qa/qa/page/project/new.rb
@@ -64,6 +64,8 @@ module QA
end
def add_description(description)
+ return unless has_element?(:project_description, wait: 1)
+
fill_in 'project_description', with: description
end
diff --git a/qa/qa/page/project/settings/advanced.rb b/qa/qa/page/project/settings/advanced.rb
index 2c6c4db215a..9ca409ef65e 100644
--- a/qa/qa/page/project/settings/advanced.rb
+++ b/qa/qa/page/project/settings/advanced.rb
@@ -6,8 +6,13 @@ module QA
module Settings
class Advanced < Page::Base
include QA::Page::Component::ConfirmModal
+ include QA::Page::Component::DeleteModal
include Component::NamespaceSelect
+ view 'app/assets/javascripts/projects/components/shared/delete_button.vue' do
+ element :delete_button
+ end
+
view 'app/views/projects/edit.html.haml' do
element :project_path_field
element :change_path_button
@@ -88,6 +93,13 @@ module QA
click_confirmation_ok_button
end
+ def delete_project!(project_name)
+ click_element :delete_button
+ fill_confirmation_path(project_name)
+ wait_for_delete_button_enabled
+ confirm_delete
+ end
+
private
def wait_for_transfer_project_content
diff --git a/qa/qa/resource/base.rb b/qa/qa/resource/base.rb
index 6025dd6ec40..4a1a60f4da1 100644
--- a/qa/qa/resource/base.rb
+++ b/qa/qa/resource/base.rb
@@ -22,8 +22,20 @@ module QA
new.tap(&prepare_block)
end
+ def fabricate_via_api_unless_fips!
+ if QA::Support::FIPS.enabled?
+ fabricate!
+ else
+ fabricate_via_api!
+ end
+ end
+
def fabricate!(*args, &prepare_block)
- fabricate_via_api!(*args, &prepare_block)
+ if QA::Support::FIPS.enabled?
+ fabricate_via_browser_ui!(*args, &prepare_block)
+ else
+ fabricate_via_api!(*args, &prepare_block)
+ end
rescue NotImplementedError
fabricate_via_browser_ui!(*args, &prepare_block)
end
@@ -95,7 +107,7 @@ module QA
Support::FabricationTracker.save_fabrication(:"#{fabrication_method}_fabrication", fabrication_time)
- unless resource.retrieved_from_cache
+ unless resource.retrieved_from_cache || QA::Support::FIPS.enabled?
Tools::TestResourceDataProcessor.collect(
resource: resource,
info: resource.identifier,
diff --git a/qa/qa/resource/group.rb b/qa/qa/resource/group.rb
index 84416c0600d..9d1a6868562 100644
--- a/qa/qa/resource/group.rb
+++ b/qa/qa/resource/group.rb
@@ -18,8 +18,14 @@ module QA
end
attribute :sandbox do
- Sandbox.fabricate_via_api! do |sandbox|
- sandbox.api_client = api_client
+ if QA::Support::FIPS.enabled?
+ Resource::Sandbox.fabricate! do |sandbox|
+ sandbox.path = Runtime::Namespace.sandbox_name
+ end
+ else
+ Sandbox.fabricate_via_api! do |sandbox|
+ sandbox.api_client = api_client
+ end
end
end
diff --git a/qa/qa/resource/members.rb b/qa/qa/resource/members.rb
index d9300f80f5d..4bf9c2bed6b 100644
--- a/qa/qa/resource/members.rb
+++ b/qa/qa/resource/members.rb
@@ -10,8 +10,8 @@ module QA
def add_member(user, access_level = AccessLevel::DEVELOPER)
Support::Retrier.retry_until do
QA::Runtime::Logger.info(%(Adding user #{user.username} to #{full_path} #{self.class.name}))
-
- response = post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level }
+ response = post Runtime::API::Request.new(api_client, api_members_path).url,
+{ user_id: user.id, access_level: access_level }
break true if response.code == QA::Support::API::HTTP_STATUS_CREATED
break true if response.body.include?('Member already exists')
end
@@ -31,7 +31,8 @@ module QA
Support::Retrier.retry_until do
QA::Runtime::Logger.info(%(Sharing #{self.class.name} with #{group.name}))
- response = post Runtime::API::Request.new(api_client, api_share_path).url, { group_id: group.id, group_access: access_level }
+ response = post Runtime::API::Request.new(api_client, api_share_path).url,
+{ group_id: group.id, group_access: access_level }
response.code == QA::Support::API::HTTP_STATUS_CREATED
end
end
diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb
index e5df95f1fa5..873a0e16117 100644
--- a/qa/qa/resource/project.rb
+++ b/qa/qa/resource/project.rb
@@ -479,6 +479,16 @@ module QA
end
end
+ def remove_via_browser_ui!
+ Page::Project::Menu.perform(&:go_to_general_settings)
+
+ Page::Project::Settings::Main.perform(&:expand_advanced_settings)
+
+ Page::Project::Settings::Advanced.perform do |advanced|
+ advanced.delete_project!(full_path)
+ end
+ end
+
# Calls the API endpoint that triggers the backend service that performs repository housekeeping (garbage
# collection and similar tasks).
def perform_housekeeping
diff --git a/qa/qa/resource/sandbox.rb b/qa/qa/resource/sandbox.rb
index 2080e279e99..18526448b00 100644
--- a/qa/qa/resource/sandbox.rb
+++ b/qa/qa/resource/sandbox.rb
@@ -10,7 +10,9 @@ module QA
class << self
# Force top level group creation via UI if test is executed on dot_com environment
def fabricate!(*args, &prepare_block)
- return fabricate_via_browser_ui!(*args, &prepare_block) if Specs::Helpers::ContextSelector.dot_com?
+ if Specs::Helpers::ContextSelector.dot_com? || QA::Support::FIPS.enabled?
+ return fabricate_via_browser_ui!(*args, &prepare_block)
+ end
fabricate_via_api!(*args, &prepare_block)
rescue NotImplementedError
diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb
index 71a5e1c8930..c8babbc0b16 100644
--- a/qa/qa/resource/user.rb
+++ b/qa/qa/resource/user.rb
@@ -79,11 +79,22 @@ module QA
defined?(@username) && defined?(@password)
end
+ def has_user?(user)
+ Flow::Login.while_signed_in_as_admin do
+ Page::Main::Menu.perform(&:go_to_admin_area)
+ Page::Admin::Menu.perform(&:go_to_users_overview)
+ Page::Admin::Overview::Users::Index.perform do |index|
+ index.search_user(user.username)
+ index.has_username?(user.username)
+ end
+ end
+ end
+
def fabricate!
# Don't try to log-out if we're not logged-in
Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform { |p| p.has_personal_area?(wait: 0) }
- if credentials_given?
+ if credentials_given? || has_user?(self)
Page::Main::Login.perform do |login|
login.sign_in_using_credentials(user: self)
end
@@ -144,7 +155,7 @@ module QA
end
def self.fabricate_or_use(username = nil, password = nil)
- if Runtime::Env.signup_disabled?
+ if Runtime::Env.signup_disabled? || !QA::Support::FIPS.enabled?
fabricate_via_api! do |user|
user.username = username
user.password = password
diff --git a/qa/qa/runtime/key/ed25519.rb b/qa/qa/runtime/key/ed25519.rb
index 3a3567d55da..f59d7b3688d 100644
--- a/qa/qa/runtime/key/ed25519.rb
+++ b/qa/qa/runtime/key/ed25519.rb
@@ -4,8 +4,8 @@ module QA
module Runtime
module Key
class ED25519 < Base
- def initialize
- super('ed25519', 256)
+ def initialize(bits = 256)
+ super('ed25519', bits)
end
end
end
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb
index 34f59f8a890..45c3c264837 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb
@@ -3,8 +3,17 @@
module QA
RSpec.describe 'Plan', :smoke, product_group: :project_management do
describe 'Issue creation' do
- let(:project) { Resource::Project.fabricate_via_api! }
- let(:closed_issue) { Resource::Issue.fabricate_via_api! { |issue| issue.project = project } }
+ let(:project) do
+ Resource::Project.fabricate_via_api_unless_fips! do |project|
+ project.name = "project-create-issue-#{SecureRandom.hex(8)}"
+ project.personal_namespace = Runtime::User.username
+ project.description = nil
+ end
+ end
+
+ let(:closed_issue) do
+ Resource::Issue.fabricate_via_api_unless_fips! { |issue| issue.project = project }
+ end
before do
Flow::Login.sign_in
@@ -55,7 +64,7 @@ module QA
end
before do
- Resource::Issue.fabricate_via_api! { |issue| issue.project = project }.visit!
+ Resource::Issue.fabricate_via_api_unless_fips! { |issue| issue.project = project }.visit!
end
# The following example is excluded from running in `review-qa-smoke` job
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
index db4c7d1056c..36cfb9dfb6e 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
@@ -3,9 +3,12 @@
module QA
RSpec.describe 'Plan', :smoke, product_group: :project_management do
describe 'mention' do
- let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) }
+ let(:user) do
+ Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1)
+ end
+
let(:project) do
- Resource::Project.fabricate_via_api! do |project|
+ Resource::Project.fabricate_via_api_unless_fips! do |project|
project.name = 'project-to-test-mention'
project.visibility = 'private'
end
@@ -14,14 +17,33 @@ module QA
before do
Flow::Login.sign_in
- project.add_member(user)
+ if QA::Support::FIPS.enabled?
+ # Ensure user exists
+ user
+ Flow::Login.sign_in_as_admin
+ project.visit!
+ Page::Project::Menu.perform(&:click_members)
+ Page::Project::Members.perform do |members|
+ members.add_member(user.username)
+ end
+ else
+ project.visit!
+ project.add_member(user)
+ end
- Resource::Issue.fabricate_via_api! do |issue|
- issue.project = project
- end.visit!
+ if QA::Support::FIPS.enabled?
+ Resource::Issue.fabricate_via_browser_ui! do |issue|
+ issue.project = project
+ end.visit!
+ else
+ Resource::Issue.fabricate_via_api! do |issue|
+ issue.project = project
+ end.visit!
+ end
end
- it 'mentions another user in an issue', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347988' do
+ it 'mentions another user in an issue',
+testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347988' do
Page::Project::Issue::Show.perform do |show|
at_username = "@#{user.username}"
diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb
index 630be7763f3..1e08fc49066 100644
--- a/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb
@@ -18,7 +18,7 @@ module QA
it(
'creates a basic merge request',
- :smoke,
+ :smoke, :skip_fips_env,
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347738'
) do
Resource::MergeRequest.fabricate_via_browser_ui! do |merge_request|
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb
index a785e4ae764..0ec231ed66e 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb
@@ -2,8 +2,9 @@
module QA
RSpec.describe 'Create' do
- describe 'Git push over HTTP', :smoke, product_group: :source_code do
- it 'user using a personal access token pushes code to the repository', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347749' do
+ describe 'Git push over HTTP', :smoke, :skip_fips_env, product_group: :source_code do
+ it 'user using a personal access token pushes code to the repository',
+testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347749' do
Flow::Login.sign_in
access_token = Resource::PersonalAccessToken.fabricate!.token
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb
index e8f7cb252a0..efa1f9fe2c9 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb
@@ -3,7 +3,8 @@
module QA
RSpec.describe 'Create' do
describe 'Git push over HTTP', product_group: :source_code do
- it 'user pushes code to the repository', :smoke, testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347747' do
+ it 'user pushes code to the repository', :smoke, :skip_fips_env,
+ testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347747' do
Flow::Login.sign_in
Resource::Repository::ProjectPush.fabricate! do |push|
@@ -18,7 +19,8 @@ module QA
end
end
- it 'pushes to a project using a specific Praefect repository storage', :smoke, :requires_admin, :requires_praefect, testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347789' do
+ it 'pushes to a project using a specific Praefect repository storage', :smoke, :skip_fips_env, :requires_admin,
+ :requires_praefect, testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347789' do
Flow::Login.sign_in_as_admin
project = Resource::Project.fabricate_via_api! do |storage_project|
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb
index 4fb52f1e54d..f281f441e8a 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb
@@ -26,7 +26,8 @@ module QA
Flow::Login.sign_in
end
- it 'pushes code to the repository via SSH', :smoke, testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347825' do
+ it 'pushes code to the repository via SSH', :smoke, :skip_fips_env,
+ testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347825' do
Resource::Repository::ProjectPush.fabricate! do |push|
push.project = project
push.ssh_key = @key
@@ -41,7 +42,8 @@ module QA
end
end
- it 'pushes multiple branches and tags together', :smoke, testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347826' do
+ it 'pushes multiple branches and tags together', :smoke, :skip_fips_env,
+ testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347826' do
branches = []
tags = []
Git::Repository.perform do |repository|
diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb
index 9693e7148ad..0e5fcea438d 100644
--- a/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb
@@ -17,6 +17,15 @@ module QA
Flow::Login.sign_in
end
+ after do
+ if QA::Support::FIPS.enabled?
+ snippet.visit!
+ Page::Dashboard::Snippet::Show.perform(&:click_delete_button)
+ else
+ snippet.remove_via_api!
+ end
+ end
+
it 'user creates a personal snippet', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347799' do
snippet
diff --git a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb
index d985868b96a..aec0da99a5c 100644
--- a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb
+++ b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb
@@ -4,7 +4,7 @@ module QA
RSpec.describe 'Verify' do
describe 'Add or Remove CI variable via UI', :smoke, product_group: :pipeline_authoring do
let(:project) do
- Resource::Project.fabricate_via_api! do |project|
+ Resource::Project.fabricate_via_api_unless_fips! do |project|
project.name = 'project-with-ci-variables'
project.description = 'project with CI variables'
end
diff --git a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
index 55a59473edf..3f91d120fdd 100644
--- a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
+++ b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
@@ -35,7 +35,7 @@ module QA
keys = [
['https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348022', Runtime::Key::RSA, 8192, true],
['https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348021', Runtime::Key::ECDSA, 521, true],
- ['https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348020', Runtime::Key::ED25519, false]
+ ['https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348020', Runtime::Key::ED25519, 256, false]
]
supported_keys =
diff --git a/qa/qa/support/fips.rb b/qa/qa/support/fips.rb
index f5ebce4fa9c..0fed39e8109 100644
--- a/qa/qa/support/fips.rb
+++ b/qa/qa/support/fips.rb
@@ -5,7 +5,7 @@ module QA
module Support
class FIPS
def self.enabled?
- %(1 true yes).include?(ENV['FIPS'].to_s)
+ %w[1 true yes].include?(ENV['FIPS'].to_s)
end
end
end
diff --git a/qa/spec/resource/base_spec.rb b/qa/spec/resource/base_spec.rb
index 195e497f290..0ec27da7277 100644
--- a/qa/spec/resource/base_spec.rb
+++ b/qa/spec/resource/base_spec.rb
@@ -87,12 +87,46 @@ RSpec.describe QA::Resource::Base do
end
context 'when resource supports fabrication via the API' do
- it 'calls .fabricate_via_browser_ui!' do
+ it 'calls .fabricate_via_api!!' do
expect(described_class).to receive(:fabricate_via_api!)
described_class.fabricate!
end
end
+
+ context 'when FIPS mode is enabled' do
+ before do
+ stub_env('FIPS', '1')
+ end
+
+ it 'calls .fabricate_via_browser_ui!' do
+ expect(described_class).to receive(:fabricate_via_browser_ui!)
+
+ described_class.fabricate!
+ end
+ end
+ end
+
+ describe '.fabricate_via_api_unless_fips!' do
+ context 'when FIPS mode is not enabled' do
+ it 'calls .fabricate_via_api!!' do
+ expect(described_class).to receive(:fabricate_via_api!)
+
+ described_class.fabricate_via_api_unless_fips!
+ end
+ end
+
+ context 'when FIPS mode is enabled' do
+ before do
+ stub_env('FIPS', '1')
+ end
+
+ it 'calls .fabricate_via_browser_ui!' do
+ expect(described_class).to receive(:fabricate_via_browser_ui!)
+
+ described_class.fabricate_via_api_unless_fips!
+ end
+ end
end
describe '.fabricate_via_api!' do
diff --git a/qa/spec/resource/user_spec.rb b/qa/spec/resource/user_spec.rb
index d82dcc3b21e..d1fc02ff033 100644
--- a/qa/spec/resource/user_spec.rb
+++ b/qa/spec/resource/user_spec.rb
@@ -116,4 +116,31 @@ RSpec.describe QA::Resource::User do
expect(subject).to be_credentials_given
end
end
+
+ describe '#has_user?' do
+ let(:index_mock) do
+ instance_double(QA::Page::Admin::Overview::Users::Index)
+ end
+
+ users = [
+ ['foo', true],
+ ['bar', false]
+ ]
+
+ users.each do |(username, found)|
+ it "returns #{found} when has_username returns #{found}" do
+ subject.username = username
+
+ allow(QA::Flow::Login).to receive(:while_signed_in_as_admin).and_yield
+ allow(QA::Page::Main::Menu).to receive(:perform)
+ allow(QA::Page::Admin::Menu).to receive(:perform)
+ allow(QA::Page::Admin::Overview::Users::Index).to receive(:perform).and_yield(index_mock)
+
+ expect(index_mock).to receive(:search_user).with(username)
+ expect(index_mock).to receive(:has_username?).with(username).and_return(found)
+
+ expect(subject.has_user?(subject)).to eq(found)
+ end
+ end
+ end
end