diff options
Diffstat (limited to 'qa/qa/specs/features/browser_ui')
17 files changed, 397 insertions, 132 deletions
diff --git a/qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb index 6c2ff005f49..fe17b5c34e1 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb @@ -29,27 +29,11 @@ module QA end end - let(:subgroup) do - Resource::Group.fabricate_via_api! do |group| - group.api_client = api_client - group.sandbox = source_group - group.path = "subgroup-for-import-#{SecureRandom.hex(4)}" - end - end - let(:imported_group) do - Resource::Group.init do |group| + Resource::BulkImportGroup.init do |group| group.api_client = api_client group.sandbox = sandbox - group.path = source_group.path - end - end - - let(:imported_subgroup) do - Resource::Group.init do |group| - group.api_client = api_client - group.sandbox = imported_group - group.path = subgroup.path + group.source_group_path = source_group.path end end @@ -61,7 +45,6 @@ module QA # create groups explicitly before connecting gitlab instance source_group - subgroup Flow::Login.sign_in(as: user) Page::Main::Menu.perform(&:go_to_create_group) @@ -74,33 +57,15 @@ module QA # Non blocking issues: # https://gitlab.com/gitlab-org/gitlab/-/issues/331252 # https://gitlab.com/gitlab-org/gitlab/-/issues/333678 <- can cause 500 when creating user and group back to back - it( - 'imports group with subgroups and labels', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1785' - ) do - Resource::GroupLabel.fabricate_via_api! do |label| - label.api_client = api_client - label.group = source_group - label.title = "source-group-#{SecureRandom.hex(4)}" - end - Resource::GroupLabel.fabricate_via_api! do |label| - label.api_client = api_client - label.group = subgroup - label.title = "subgroup-#{SecureRandom.hex(4)}" - end - + it 'imports group from UI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1785' do Page::Group::BulkImport.perform do |import_page| - import_page.import_group(source_group.path, sandbox.path) - - expect(import_page).to have_imported_group(source_group.path, wait: 180) + import_page.import_group(imported_group.path, imported_group.sandbox.path) - aggregate_failures do - expect { imported_group.reload! }.to eventually_eq(source_group).within(duration: 10) - expect { imported_group.labels }.to eventually_include(*source_group.labels).within(duration: 10) + expect(import_page).to have_imported_group(imported_group.path, wait: 300) - # Do not validate subgroups until https://gitlab.com/gitlab-org/gitlab/-/issues/332818 is resolved - # expect { imported_subgroup.reload! }.to eventually_eq(subgroup).within(duration: 30) - # expect { imported_subgroup.labels }.to eventually_include(*subgroup.labels).within(duration: 30) + imported_group.reload!.visit! + Page::Group::Show.perform do |group| + expect(group).to have_content(imported_group.path) end end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb index 4fffc786c14..564b14a872f 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb @@ -2,24 +2,52 @@ module QA RSpec.describe 'Manage', :smoke do - describe 'Project creation' do - it 'user creates a new project', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1857' do + describe 'Project' do + shared_examples 'successful project creation' do + it 'creates a new project' do + Page::Project::Show.perform do |project| + expect(project).to have_content(project_name) + expect(project).to have_content( + /Project \S?#{project_name}\S+ was successfully created/ + ) + expect(project).to have_content('create awesome project test') + expect(project).to have_content('The repository for this project is empty') + end + end + end + + before do Flow::Login.sign_in + project + end - created_project = Resource::Project.fabricate_via_browser_ui! do |project| - project.name = 'awesome-project' - project.description = 'create awesome project test' + context 'in group', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1857' do + let(:project_name) { "project-in-group-#{SecureRandom.hex(8)}" } + let(:project) do + Resource::Project.fabricate_via_browser_ui! do |project| + project.name = project_name + project.description = 'create awesome project test' + end end - Page::Project::Show.perform do |project| - expect(project).to have_content(created_project.name) - expect(project).to have_content( - /Project \S?awesome-project\S+ was successfully created/ - ) - expect(project).to have_content('create awesome project test') - expect(project).to have_content('The repository for this project is empty') + it_behaves_like 'successful project creation' + end + + context 'in personal namespace', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1888' do + let(:project_name) { "project-in-personal-namespace-#{SecureRandom.hex(8)}" } + let(:project) do + Resource::Project.fabricate_via_browser_ui! do |project| + project.name = project_name + project.description = 'create awesome project test' + project.personal_namespace = true + end end + + it_behaves_like 'successful project creation' + end + + after do + project.remove_via_api! end end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb index 4f85fa257a2..c55ecb28361 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb @@ -3,9 +3,11 @@ module QA RSpec.describe 'Manage', :github, :requires_admin do describe 'Project import' do - let!(:api_client) { Runtime::API::Client.as_admin } - let!(:group) { Resource::Group.fabricate_via_api! { |resource| resource.api_client = api_client } } - let!(:user) do + let(:github_repo) { 'gitlab-qa-github/test-project' } + let(:imported_project_name) { 'imported-project' } + let(:api_client) { Runtime::API::Client.as_admin } + let(:group) { Resource::Group.fabricate_via_api! { |resource| resource.api_client = api_client } } + let(:user) do Resource::User.fabricate_via_api! do |resource| resource.api_client = api_client resource.hard_delete_on_api_removal = true @@ -13,16 +15,25 @@ module QA end let(:imported_project) do - Resource::ProjectImportedFromGithub.fabricate_via_browser_ui! do |project| - project.name = 'imported-project' + Resource::ProjectImportedFromGithub.init do |project| + project.import = true + project.add_name_uuid = false + project.name = imported_project_name project.group = group project.github_personal_access_token = Runtime::Env.github_access_token - project.github_repository_path = 'gitlab-qa-github/test-project' + project.github_repository_path = github_repo end end before do group.add_member(user, Resource::Members::AccessLevel::MAINTAINER) + + Flow::Login.sign_in(as: user) + Page::Main::Menu.perform(&:go_to_create_project) + Page::Project::New.perform do |project_page| + project_page.click_import_project + project_page.click_github_link + end end after do @@ -30,13 +41,24 @@ module QA end it 'imports a GitHub repo', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1762' do - Flow::Login.sign_in(as: user) + Page::Project::Import::Github.perform do |import_page| + import_page.add_personal_access_token(Runtime::Env.github_access_token) + import_page.import!(github_repo, group.full_path, imported_project_name) - imported_project # import the project + aggregate_failures do + expect(import_page).to have_imported_project(github_repo) + # validate button is present instead of navigating to avoid dealing with multiple tabs + # which makes the test more complicated + expect(import_page).to have_go_to_project_button(github_repo) + end + end + imported_project.reload!.visit! Page::Project::Show.perform do |project| - expect(project).to have_content(imported_project.name) - expect(project).to have_content('This test project is used for automated GitHub import by GitLab QA.') + aggregate_failures do + expect(project).to have_content(imported_project_name) + expect(project).to have_content('This test project is used for automated GitHub import by GitLab QA.') + end end end end diff --git a/qa/qa/specs/features/browser_ui/3_create/design_management/modify_design_content_spec.rb b/qa/qa/specs/features/browser_ui/3_create/design_management/modify_design_content_spec.rb index 59d34612ca7..dfdc9b7c9b4 100644 --- a/qa/qa/specs/features/browser_ui/3_create/design_management/modify_design_content_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/design_management/modify_design_content_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/331978', type: :bug } do + RSpec.describe 'Create' do context 'Design Management' do let(:design) do Resource::Design.fabricate! do |design| diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb index d11afde5648..37008e6d507 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb @@ -15,7 +15,7 @@ module QA merge_request.visit! end - it 'views the merge request email patches', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1689' do + it 'views the merge request email patches', :can_use_large_setup, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1689' do Page::MergeRequest::Show.perform(&:view_email_patches) expect(page.text).to start_with('From') @@ -23,10 +23,11 @@ module QA expect(page).to have_content("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}") end - it 'views the merge request plain diff', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/417' do + it 'views the merge request plain diff', :can_use_large_setup, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/417' do Page::MergeRequest::Show.perform(&:view_plain_diff) - expect(page.text).to start_with("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}") + expect(page.text).to start_with('diff') + expect(page).to have_content("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}") expect(page).to have_content('+File Added') end end diff --git a/qa/qa/specs/features/browser_ui/3_create/wiki/content_editor_spec.rb b/qa/qa/specs/features/browser_ui/3_create/wiki/content_editor_spec.rb new file mode 100644 index 00000000000..2a46604f8ac --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/wiki/content_editor_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + context 'Content Editor' do + let(:initial_wiki) { Resource::Wiki::ProjectPage.fabricate_via_api! } + let(:page_title) { 'Content Editor Page' } + let(:heading_text) { 'My New Heading' } + let(:image_file_name) { 'testfile.png' } + + before do + Flow::Login.sign_in + end + + after do + initial_wiki.project.remove_via_api! + end + + it 'creates a formatted Wiki page with an image uploaded', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1861' do + initial_wiki.visit! + + Page::Project::Wiki::Show.perform(&:click_new_page) + + Page::Project::Wiki::Edit.perform do |edit| + edit.set_title(page_title) + edit.use_new_editor + edit.add_heading('Heading 1', heading_text) + edit.upload_image(File.absolute_path(File.join('qa', 'fixtures', 'designs', image_file_name))) + end + + Page::Project::Wiki::Edit.perform(&:click_submit) + + Page::Project::Wiki::Show.perform do |wiki| + aggregate_failures 'page shows expected content' do + expect(wiki).to have_title(page_title) + expect(wiki).to have_heading('h1', heading_text) + expect(wiki).to have_image(image_file_name) + end + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb index 5083b7b0859..5b3949f9c3a 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb @@ -1,10 +1,8 @@ # frozen_string_literal: true module QA - RSpec.describe 'Verify', :requires_admin do + RSpec.describe 'Verify' do describe 'Include local config file paths with wildcard' do - let(:feature_flag) { :ci_wildcard_file_paths } - let(:project) do Resource::Project.fabricate_via_api! do |project| project.name = 'project-with-pipeline' @@ -12,7 +10,6 @@ module QA end before do - Runtime::Feature.enable(feature_flag) Flow::Login.sign_in add_files_to_project project.visit! @@ -20,7 +17,6 @@ module QA end after do - Runtime::Feature.disable(feature_flag) project.remove_via_api! end diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb index 01aada2d6dd..b43581289ef 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb @@ -73,7 +73,7 @@ module QA it 'can still merge MR successfully', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/971' do Page::MergeRequest::Show.perform do |show| # waiting for manual action status shows status badge 'blocked' on pipelines page - show.wait_until(reload: false) { show.has_pipeline_status?('waiting for manual action') } + show.has_pipeline_status?('waiting for manual action') show.merge! expect(show).to be_merged diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/mr_event_rule_pipeline_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/mr_event_rule_pipeline_spec.rb new file mode 100644 index 00000000000..47b36b55c8c --- /dev/null +++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/mr_event_rule_pipeline_spec.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +require 'faker' + +module QA + RSpec.describe 'Verify', :runner do + context 'When job is configured to only run on merge_request_events' do + let(:mr_only_job_name) { 'mr_only_job' } + let(:non_mr_only_job_name) { 'non_mr_only_job' } + let(:executor) { "qa-runner-#{Faker::Alphanumeric.alphanumeric(8)}" } + + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-only-job' + end + end + + let!(:runner) do + Resource::Runner.fabricate! do |runner| + runner.project = project + runner.name = executor + runner.tags = [executor] + end + end + + let!(:ci_file) do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files( + [ + { + file_path: '.gitlab-ci.yml', + content: <<~YAML + #{mr_only_job_name}: + script: echo 'OK' + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + #{non_mr_only_job_name}: + script: echo 'OK' + rules: + - if: '$CI_PIPELINE_SOURCE != "merge_request_event"' + YAML + } + ] + ) + end + end + + let(:merge_request) do + Resource::MergeRequest.fabricate_via_api! do |merge_request| + merge_request.project = project + merge_request.description = Faker::Lorem.sentence + merge_request.target_new_branch = false + merge_request.file_name = 'new.txt' + merge_request.file_content = Faker::Lorem.sentence + end + end + + before do + Flow::Login.sign_in + merge_request.visit! + Page::MergeRequest::Show.perform(&:click_pipeline_link) + end + + after do + runner.remove_via_api! + project.remove_via_api! + end + + it 'only runs the job configured to run on merge requests', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/170' do + Page::Project::Pipeline::Show.perform do |pipeline| + aggregate_failures do + expect(pipeline).to have_job(mr_only_job_name) + expect(pipeline).to have_no_job(non_mr_only_job_name) + end + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb index c1625f1e679..adacedb36ab 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb @@ -41,7 +41,7 @@ module QA after do runner.remove_via_api! - group.remove_via_api! + [upstream_project, downstream_project].each(&:remove_via_api!) end it 'runs the pipeline with composed config', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1086' do diff --git a/qa/qa/specs/features/browser_ui/4_verify/testing/view_code_coverage_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/testing/view_code_coverage_spec.rb index 07484feb686..7d3f8f2b1d4 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/testing/view_code_coverage_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/testing/view_code_coverage_spec.rb @@ -39,9 +39,7 @@ module QA merge_request.visit! Page::MergeRequest::Show.perform do |mr_widget| - Support::Retrier.retry_until(max_attempts: 5, sleep_interval: 5) do - mr_widget.has_pipeline_status?('passed') - end + mr_widget.has_pipeline_status?('passed') expect(mr_widget).to have_content('Test coverage 66.67%') end end diff --git a/qa/qa/specs/features/browser_ui/5_package/container_registry_omnibus_spec.rb b/qa/qa/specs/features/browser_ui/5_package/container_registry_omnibus_spec.rb index 4b7669810ec..375a371c2b1 100644 --- a/qa/qa/specs/features/browser_ui/5_package/container_registry_omnibus_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/container_registry_omnibus_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Package', :registry, :orchestrated do + RSpec.describe 'Package', :registry, :orchestrated, only: { pipeline: :main } do describe 'Self-managed Container Registry' do let(:project) do Resource::Project.fabricate_via_api! do |project| diff --git a/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb b/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb new file mode 100644 index 00000000000..be1d0dd8e81 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb @@ -0,0 +1,104 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Package', :orchestrated, :registry do + describe 'Dependency Proxy' do + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'dependency-proxy-project' + project.visibility = :private + end + end + + let!(:runner) do + Resource::Runner.fabricate! do |runner| + runner.name = "qa-runner-#{Time.now.to_i}" + runner.tags = ["runner-for-#{project.name}"] + runner.executor = :docker + runner.project = project + end + end + + let(:uri) { URI.parse(Runtime::Scenario.gitlab_address) } + let(:gitlab_host_with_port) { "#{uri.host}:#{uri.port}" } + let(:dependency_proxy_url) { "#{gitlab_host_with_port}/#{project.group.full_path}/dependency_proxy/containers" } + + before do + Flow::Login.sign_in + + project.group.visit! + + Page::Group::Menu.perform(&:go_to_dependency_proxy) + + Page::Group::DependencyProxy.perform do |index| + expect(index).to have_dependency_proxy_enabled + end + end + + after do + runner.remove_via_api! + end + + where(:docker_client_version) do + %w[docker:19.03.12 docker:20.10] + end + + with_them do + it "pulls an image using the dependency proxy", testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1862' do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files([{ + file_path: '.gitlab-ci.yml', + content: + <<~YAML + dependency-proxy-pull-test: + image: "#{docker_client_version}" + services: + - name: "#{docker_client_version}-dind" + command: + - /bin/sh + - -c + - | + apk add --no-cache openssl + true | openssl s_client -showcerts -connect gitlab.test:5050 > /usr/local/share/ca-certificates/gitlab.test.crt + update-ca-certificates + dockerd-entrypoint.sh || exit + before_script: + - apk add curl jq grep + - docker login -u "$CI_DEPENDENCY_PROXY_USER" -p "$CI_DEPENDENCY_PROXY_PASSWORD" "$CI_DEPENDENCY_PROXY_SERVER" + script: + - docker pull #{dependency_proxy_url}/alpine:latest + - TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq --raw-output .token) + - 'curl --head --header "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest" 2>&1' + - docker pull #{dependency_proxy_url}/alpine:latest + - 'curl --head --header "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest" 2>&1' + tags: + - "runner-for-#{project.name}" + YAML + }]) + end + + project.visit! + Flow::Pipeline.visit_latest_pipeline + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.click_job('dependency-proxy-pull-test') + end + + Page::Project::Job::Show.perform do |job| + expect(job).to be_successful(timeout: 800) + end + + project.group.visit! + + Page::Group::Menu.perform(&:go_to_dependency_proxy) + + Page::Group::DependencyProxy.perform do |index| + expect(index).to have_blob_count("Contains 2 blobs of images") + end + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/5_package/online_garbage_collection_spec.rb b/qa/qa/specs/features/browser_ui/5_package/online_garbage_collection_spec.rb index 65fc12545b7..8c686e65e33 100644 --- a/qa/qa/specs/features/browser_ui/5_package/online_garbage_collection_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/online_garbage_collection_spec.rb @@ -2,7 +2,7 @@ module QA RSpec.describe 'Package' do - describe 'Container Registry Online Garbage Collection', :registry_gc, only: { subdomain: %i[pre] } do + describe 'Container Registry Online Garbage Collection', :registry_gc, only: { subdomain: %i[pre] }, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/337791', type: :waiting_on } do let(:group) { Resource::Group.fabricate_via_api! } let(:imported_project) do diff --git a/qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb b/qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb index a9034174cab..7b924f1b52b 100644 --- a/qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb @@ -26,10 +26,10 @@ module QA end end - let(:gitlab_address_with_port) do - uri = URI.parse(Runtime::Scenario.gitlab_address) - "#{uri.scheme}://#{uri.host}:#{uri.port}" - end + let(:uri) { URI.parse(Runtime::Scenario.gitlab_address) } + let(:gitlab_address_with_port) { "#{uri.scheme}://#{uri.host}:#{uri.port}" } + let(:gitlab_host_with_port) { "#{uri.host}:#{uri.port}" } + let(:personal_access_token) { Runtime::Env.personal_access_token } before do Flow::Login.sign_in @@ -42,14 +42,25 @@ module QA content: <<~YAML image: python:latest + stages: + - run + - install run: + stage: run script: - pip install twine - python setup.py sdist bdist_wheel - "TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url #{gitlab_address_with_port}/api/v4/projects/${CI_PROJECT_ID}/packages/pypi dist/*" tags: - "runner-for-#{project.name}" + install: + stage: install + script: + - "pip install mypypipackage --no-deps --index-url #{uri.scheme}://#{personal_access_token}:#{personal_access_token}@#{gitlab_host_with_port}/api/v4/projects/${CI_PROJECT_ID}/packages/pypi/simple --trusted-host #{gitlab_host_with_port}" + tags: + - "runner-for-#{project.name}" + YAML }, { @@ -87,6 +98,16 @@ module QA Page::Project::Job::Show.perform do |job| expect(job).to be_successful(timeout: 800) end + + Flow::Pipeline.visit_latest_pipeline + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.click_job('install') + end + + Page::Project::Job::Show.perform do |job| + expect(job).to be_successful(timeout: 800) + end end after do @@ -95,20 +116,22 @@ module QA project&.remove_via_api! end - it 'publishes a pypi package and deletes it', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1087' do - Page::Project::Menu.perform(&:click_packages_link) + context 'when at the project level' do + it 'publishes and installs a pypi package and deletes it', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1087' do + Page::Project::Menu.perform(&:click_packages_link) - Page::Project::Packages::Index.perform do |index| - expect(index).to have_package(package.name) - index.click_package(package.name) - end + Page::Project::Packages::Index.perform do |index| + expect(index).to have_package(package.name) + index.click_package(package.name) + end - Page::Project::Packages::Show.perform(&:click_delete) + Page::Project::Packages::Show.perform(&:click_delete) - Page::Project::Packages::Index.perform do |index| - aggregate_failures do - expect(index).to have_content("Package deleted successfully") - expect(index).not_to have_package(package.name) + Page::Project::Packages::Index.perform do |index| + aggregate_failures do + expect(index).to have_content("Package deleted successfully") + expect(index).not_to have_package(package.name) + end end end 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 8e61ec4d2d7..f4a5c715684 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 @@ -5,27 +5,31 @@ require 'digest/sha1' module QA RSpec.describe 'Release', :runner do describe 'Git clone using a deploy key' do - before do - Flow::Login.sign_in - - @runner_name = "qa-runner-#{Time.now.to_i}" + let(:runner_name) { "qa-runner-#{SecureRandom.hex(4)}" } + let(:repository_location) { project.repository_ssh_location } - @project = Resource::Project.fabricate_via_api! do |project| + let(:project) do + Resource::Project.fabricate_via_api! do |project| project.name = 'deploy-key-clone-project' end + end - @repository_location = @project.repository_ssh_location - - @runner = Resource::Runner.fabricate_via_api! do |resource| - resource.project = @project - resource.name = @runner_name - resource.tags = %w[qa docker] + let!(:runner) do + Resource::Runner.fabricate_via_api! do |resource| + resource.project = project + resource.name = runner_name + resource.tags = [runner_name] resource.image = 'gitlab/gitlab-runner:alpine' end end + before do + Flow::Login.sign_in + end + after do - @runner.remove_via_api! + runner.remove_via_api! + project.remove_via_api! end keys = [ @@ -39,7 +43,7 @@ module QA key = key_class.new(*bits) Resource::DeployKey.fabricate_via_browser_ui! do |resource| - resource.project = @project + resource.project = project resource.title = "deploy key #{key.name}(#{key.bits})" resource.key = key.public_key end @@ -49,25 +53,23 @@ module QA make_ci_variable(deploy_key_name, key) gitlab_ci = <<~YAML - cat-config: - script: - - apk add --update --no-cache openssh-client - - mkdir -p ~/.ssh - - ssh-keyscan -p #{@repository_location.port} #{@repository_location.host} >> ~/.ssh/known_hosts - - eval $(ssh-agent -s) - - ssh-add -D - - echo "$#{deploy_key_name}" | ssh-add - - - git clone #{@repository_location.git_uri} - - cd #{@project.name} - - git checkout #{deploy_key_name} - - sha1sum .gitlab-ci.yml - tags: - - qa - - docker + cat-config: + script: + - which ssh-agent || ( apk --update add openssh-client ) + - mkdir -p ~/.ssh + - ssh-keyscan -p #{repository_location.port} #{repository_location.host} >> ~/.ssh/known_hosts + - eval $(ssh-agent -s) + - ssh-add -D + - echo "$#{deploy_key_name}" | ssh-add - + - git clone #{repository_location.git_uri} + - cd #{project.name} + - git checkout #{deploy_key_name} + - sha1sum .gitlab-ci.yml + tags: [#{runner_name}] YAML Resource::Repository::ProjectPush.fabricate! do |resource| - resource.project = @project + resource.project = project resource.file_name = '.gitlab-ci.yml' resource.commit_message = 'Add .gitlab-ci.yml' resource.file_content = gitlab_ci @@ -81,8 +83,10 @@ module QA Page::Project::Pipeline::Show.perform(&:click_on_first_job) Page::Project::Job::Show.perform do |job| - expect(job).to be_successful - expect(job.output).to include(sha1sum) + aggregate_failures 'job succeeds and has correct sha1sum' do + expect(job).to be_successful + expect(job.output).to include(sha1sum) + end end end @@ -90,7 +94,7 @@ module QA def make_ci_variable(key_name, key) Resource::CiVariable.fabricate_via_api! do |resource| - resource.project = @project + resource.project = project resource.key = key_name resource.value = key.private_key resource.masked = false diff --git a/qa/qa/specs/features/browser_ui/7_configure/kubernetes/kubernetes_integration_spec.rb b/qa/qa/specs/features/browser_ui/7_configure/kubernetes/kubernetes_integration_spec.rb index 1803b4b16de..3a59efe645a 100644 --- a/qa/qa/specs/features/browser_ui/7_configure/kubernetes/kubernetes_integration_spec.rb +++ b/qa/qa/specs/features/browser_ui/7_configure/kubernetes/kubernetes_integration_spec.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true module QA - RSpec.describe 'Configure' do - describe 'Kubernetes Cluster Integration', :orchestrated, :kubernetes, :requires_admin, :skip_live_env, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/225315', type: :flaky } do + RSpec.describe 'Configure', except: { job: 'review-qa-*' } do + describe 'Kubernetes Cluster Integration', :requires_admin, :skip_live_env, :smoke do context 'Project Clusters' do let!(:cluster) { Service::KubernetesCluster.new(provider_class: Service::ClusterProvider::K3s).create! } let(:project) do @@ -20,7 +20,7 @@ module QA cluster.remove! end - it 'can create and associate a project cluster', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/707' do + it 'can create and associate a project cluster', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/707' do Resource::KubernetesCluster::ProjectCluster.fabricate_via_browser_ui! do |k8s_cluster| k8s_cluster.project = project k8s_cluster.cluster = cluster |