diff options
Diffstat (limited to 'qa')
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 |
