diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 11:10:13 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 11:10:13 +0000 |
commit | 0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch) | |
tree | 7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /qa/qa/specs/features/browser_ui | |
parent | 72123183a20411a36d607d70b12d57c484394c8e (diff) | |
download | gitlab-ce-0ea3fcec397b69815975647f5e2aa5fe944a8486.tar.gz |
Add latest changes from gitlab-org/gitlab@15-1-stable-eev15.1.0-rc42
Diffstat (limited to 'qa/qa/specs/features/browser_ui')
32 files changed, 350 insertions, 445 deletions
diff --git a/qa/qa/specs/features/browser_ui/14_non_devops/performance_bar_spec.rb b/qa/qa/specs/features/browser_ui/14_product_intelligence/performance_bar_spec.rb index 829d52b8e93..10076a329bc 100644 --- a/qa/qa/specs/features/browser_ui/14_non_devops/performance_bar_spec.rb +++ b/qa/qa/specs/features/browser_ui/14_product_intelligence/performance_bar_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Non-devops' do + RSpec.describe 'Product Intelligence' do describe 'Performance bar display', :requires_admin, :skip_live_env do context 'when logged in as an admin user' do # performance metrics: pg, gitaly, redis, rugged (feature flagged), total (not always provided) @@ -20,7 +20,10 @@ module QA end end - it 'shows results for the original request and AJAX requests', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348030' do + it( + 'shows results for the original request and AJAX requests', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348030' + ) do # Issue pages always make AJAX requests Resource::Issue.fabricate_via_browser_ui! do |issue| issue.title = 'Performance bar test' diff --git a/qa/qa/specs/features/browser_ui/14_non_devops/service_ping_default_enabled_spec.rb b/qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_default_enabled_spec.rb index 72090306fd9..cc2888063ca 100644 --- a/qa/qa/specs/features/browser_ui/14_non_devops/service_ping_default_enabled_spec.rb +++ b/qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_default_enabled_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Non-devops' do + RSpec.describe 'Product Intelligence' do describe 'Service ping default enabled' do context 'when using default enabled from gitlab.yml config', :requires_admin, except: { job: 'review-qa-*' } do before do @@ -11,7 +11,10 @@ module QA Page::Admin::Menu.perform(&:go_to_metrics_and_profiling_settings) end - it 'has service ping toggle enabled', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348335' do + it( + 'has service ping toggle enabled', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348335' + ) do Page::Admin::Settings::MetricsAndProfiling.perform do |setting| setting.expand_usage_statistics do |page| expect(page).not_to have_disabled_usage_data_checkbox diff --git a/qa/qa/specs/features/browser_ui/14_non_devops/service_ping_disabled_spec.rb b/qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_disabled_spec.rb index 791bd688cea..f762adf52a1 100644 --- a/qa/qa/specs/features/browser_ui/14_non_devops/service_ping_disabled_spec.rb +++ b/qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_disabled_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Non-devops' do + RSpec.describe 'Product Intelligence' do describe 'Service ping disabled', :orchestrated, :service_ping_disabled, :requires_admin do context 'when disabled from gitlab.yml config' do before do @@ -11,7 +11,10 @@ module QA Page::Admin::Menu.perform(&:go_to_metrics_and_profiling_settings) end - it 'has service ping toggle is disabled', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348340' do + it( + 'has service ping toggle is disabled', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348340' + ) do Page::Admin::Settings::MetricsAndProfiling.perform do |settings| settings.expand_usage_statistics do |usage_statistics| expect(usage_statistics).to have_disabled_usage_data_checkbox diff --git a/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb index 7b60adae836..db02d1e8390 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb @@ -5,7 +5,7 @@ module QA describe 'Project transfer between groups', :reliable do let(:source_group) do Resource::Group.fabricate_via_api! do |group| - group.path = 'source-group' + group.path = "source-group-#{SecureRandom.hex(8)}" end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb index 2f9ceeb98eb..44cae31f5d8 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb @@ -1,14 +1,10 @@ # frozen_string_literal: true module QA - RSpec.describe 'Manage', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/212145', type: :stale } do + RSpec.describe 'Manage' do describe 'Check for broken images', :requires_admin do before(:context) do - admin = QA::Resource::User.init do |user| - user.username = QA::Runtime::User.admin_username - user.password = QA::Runtime::User.admin_password - end - @api_client = Runtime::API::Client.new(:gitlab, user: admin) + @api_client = Runtime::API::Client.as_admin @new_user = Resource::User.fabricate_via_api! do |user| user.api_client = @api_client end diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/personal_project_permissions_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/personal_project_permissions_spec.rb index 5d0befea1ce..fb486ab1532 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/personal_project_permissions_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/personal_project_permissions_spec.rb @@ -73,25 +73,21 @@ module QA private def expect_owner_permissions_allow_delete_issue - expect do - issue.visit! + issue.visit! - Page::Project::Issue::Show.perform(&:delete_issue) + Page::Project::Issue::Show.perform(&:delete_issue) - Page::Project::Issue::Index.perform do |index| - expect(index).not_to have_issue(issue) - end - end.not_to raise_error + Page::Project::Issue::Index.perform do |index| + expect(index).not_to have_issue(issue) + end end def expect_maintainer_permissions_do_not_allow_delete_issue - expect do - issue.visit! + issue.visit! - Page::Project::Issue::Show.perform do |issue| - expect(issue).not_to have_delete_issue_button - end - end.not_to raise_error + Page::Project::Issue::Show.perform do |issue| + expect(issue).not_to have_delete_issue_button + end end end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb index 381a25a14d0..63ae90aed9c 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb @@ -5,7 +5,10 @@ module QA describe 'Project access tokens', :reliable do let(:project_access_token) { QA::Resource::ProjectAccessToken.fabricate_via_browser_ui! } - it 'can be created and revoked via the UI', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347688' do + it( + 'can be created and revoked via the UI', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347688' + ) do expect(project_access_token.token).not_to be_nil project_access_token.revoke_via_ui! diff --git a/qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb new file mode 100644 index 00000000000..8de9d7c2049 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb @@ -0,0 +1,109 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Manage' do + describe 'User', :requires_admin do + let(:admin_api_client) { Runtime::API::Client.as_admin } + + let!(:sub_group) do + QA::Resource::Group.fabricate_via_api! do |group| + group.path = "sub-group-to-test-user-access-#{SecureRandom.hex(8)}" + end + end + + context 'when added to parent group' do + let!(:parent_group_user) do + Resource::User.fabricate_via_api! do |user| + user.api_client = admin_api_client + end + end + + let!(:parent_group_user_api_client) do + Runtime::API::Client.new(:gitlab, user: parent_group_user) + end + + let!(:sub_group_project) do + Resource::Project.fabricate_via_api! do |project| + project.group = sub_group + project.name = "sub-group-project-to-test-user-access" + project.initialize_with_readme = true + end + end + + before do + sub_group.sandbox.add_member(parent_group_user) + end + + it( + 'is allowed to edit the sub-group project files', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/363467' + ) do + Flow::Login.sign_in(as: parent_group_user) + sub_group_project.visit! + + Page::Project::Show.perform do |project| + project.click_file('README.md') + end + + Page::File::Show.perform(&:click_edit) + + Page::File::Form.perform do |file_form| + expect(file_form).to have_element(:commit_button) + end + end + + after do + parent_group_user.remove_via_api! + sub_group_project.remove_via_api! + sub_group.remove_via_api! + end + end + + context 'when added to sub-group' do + let!(:parent_group_project) do + Resource::Project.fabricate_via_api! do |project| + project.group = sub_group.sandbox + project.name = "sub-group-project-to-test-user-access" + project.initialize_with_readme = true + end + end + + let!(:sub_group_user) do + Resource::User.fabricate_via_api! do |user| + user.api_client = admin_api_client + end + end + + let!(:sub_group_user_api_client) do + Runtime::API::Client.new(:gitlab, user: sub_group_user) + end + + before do + sub_group.add_member(sub_group_user) + end + + it( + 'is not allowed to edit the parent group project files', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/363466' + ) do + Flow::Login.sign_in(as: sub_group_user) + parent_group_project.visit! + + Page::Project::Show.perform do |project| + project.click_file('README.md') + end + + Page::File::Show.perform(&:click_edit) + + expect(page).to have_text("You can’t edit files directly in this project.") + end + + after do + sub_group_user.remove_via_api! + parent_group_project.remove_via_api! + sub_group.remove_via_api! + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb index 0d706aef6ab..f41e5985622 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Plan', :orchestrated, :smtp do + RSpec.describe 'Plan', :orchestrated, :smtp, :reliable do describe 'Email Notification' do include Support::API 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 84e1332cc8a..b8f1824126d 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 @@ -4,7 +4,6 @@ module QA RSpec.describe( 'Plan', :smoke, - feature_flag: { name: 'vue_issues_list', scope: :group }, quarantine: { issue: 'https://gitlab.com/gitlab-com/gl-infra/production/-/issues/7099', type: :investigating, only: { subdomain: 'pre' } } ) do describe 'Issue creation' do @@ -12,8 +11,6 @@ module QA let(:closed_issue) { Resource::Issue.fabricate_via_api! { |issue| issue.project = project } } before do - Runtime::Feature.enable(:vue_issues_list, group: project.group) - Flow::Login.sign_in end @@ -26,9 +23,6 @@ module QA Page::Project::Menu.perform(&:click_issues) - # TODO: Remove this method when the `Runtime::Feature.enable` method call is removed - Page::Project::Issue::Index.perform(&:wait_for_vue_issues_list_ff) - Page::Project::Issue::Index.perform do |index| expect(index).to have_issue(issue) end @@ -49,9 +43,6 @@ module QA Page::Project::Menu.perform(&:click_issues) - # TODO: Remove this method when the `Runtime::Feature.enable` method call is removed - Page::Project::Issue::Index.perform(&:wait_for_vue_issues_list_ff) - Page::Project::Issue::Index.perform do |index| expect(index).not_to have_issue(closed_issue) diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb index 044cc118085..36b7378ee2a 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Plan' do + RSpec.describe 'Plan', :reliable do describe 'Custom issue templates' do let(:template_name) { 'custom_issue_template'} let(:template_content) { 'This is a custom issue template test' } diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb index c9536699cc5..d8fa7480f01 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Plan' do + RSpec.describe 'Plan', :reliable do describe 'filter issue comments activities' do before do Flow::Login.sign_in diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb index b7fa57a3270..d8435407296 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Plan' do + RSpec.describe 'Plan', :reliable do describe 'Jira issue import', :jira, :orchestrated, :requires_admin do let(:jira_project_key) { "JITD" } let(:jira_issue_title) { "[#{jira_project_key}-1] Jira to GitLab Test Issue" } diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb index ac0f16b50cc..9c90cf6ae3d 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Plan', :requires_admin, :actioncable, :orchestrated, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/293699', type: :bug } do + RSpec.describe 'Plan', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/293699', type: :bug } do describe 'Assignees' do let(:user1) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) } let(:user2) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_2, Runtime::Env.gitlab_qa_password_2) } diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb index b544c9aa211..d198d79c5fe 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb @@ -2,11 +2,7 @@ module QA RSpec.describe 'Create' do - describe 'Merge request creation from fork', quarantine: { - only: :production, - issue: "https://gitlab.com/gitlab-org/gitlab/-/issues/343801", - type: :investigating - } do + describe 'Merge request creation from fork' do let(:merge_request) do Resource::MergeRequestFromFork.fabricate_via_browser_ui! do |merge_request| merge_request.fork_branch = 'feature-branch' diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb index 85270791f0f..ac53357a86f 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb @@ -4,6 +4,8 @@ module QA RSpec.describe 'Create', :runner do describe 'Merge requests' do shared_examples 'merge when pipeline succeeds' do |repeat: 1| + let(:runner_name) { "qa-runner-#{Faker::Alphanumeric.alphanumeric(number: 8)}" } + let(:project) do Resource::Project.fabricate_via_api! do |project| project.name = 'merge-when-pipeline-succeeds' @@ -14,24 +16,12 @@ module QA let!(:runner) do Resource::Runner.fabricate! do |runner| runner.project = project - runner.name = "runner-for-#{project.name}" - runner.tags = ["runner-for-#{project.name}"] + runner.name = runner_name + runner.tags = [runner_name] end end - before do - Flow::Login.sign_in - end - - after do - runner&.remove_via_api! - project&.remove_via_api! - end - - it 'merges after pipeline succeeds' do - transient_test = repeat > 1 - - # Push a new pipeline config file + let!(:ci_file) do Resource::Repository::Commit.fabricate_via_api! do |commit| commit.project = project commit.commit_message = 'Add .gitlab-ci.yml' @@ -39,60 +29,46 @@ module QA [ { file_path: '.gitlab-ci.yml', - content: <<~EOF + content: <<~YAML test: - tags: ["runner-for-#{project.name}"] - script: sleep 30 + tags: ["#{runner_name}"] + script: sleep 15 only: - merge_requests - EOF + YAML } ] ) end + end - repeat.times do |i| - QA::Runtime::Logger.info("Transient bug test - Trial #{i}") if transient_test + before do + Flow::Login.sign_in + end - branch_name = "mr-test-#{SecureRandom.hex(6)}-#{i}" + after do + runner&.remove_via_api! + end - # Create a branch that will be merged into the default branch - Resource::Repository::ProjectPush.fabricate! do |project_push| - project_push.project = project - project_push.new_branch = true - project_push.branch_name = branch_name - project_push.file_name = "#{branch_name}.txt" - end + it 'merges after pipeline succeeds' do + transient_test = repeat > 1 + + repeat.times do |i| + QA::Runtime::Logger.info("Transient bug test - Trial #{i + 1}") if transient_test - # Create a merge request to merge the branch we just created + # Create a merge request to trigger pipeline merge_request = Resource::MergeRequest.fabricate_via_api! do |merge_request| merge_request.project = project - merge_request.source_branch = branch_name - merge_request.no_preparation = true + merge_request.description = Faker::Lorem.sentence + merge_request.target_new_branch = false + merge_request.source_branch = "mr-test-#{SecureRandom.hex(6)}-#{i + 1}" end # Load the page so that the browser is as prepared as possible to display the pipeline in progress when we # start it. merge_request.visit! - # Push a new file to trigger a new pipeline - Resource::Repository::Commit.fabricate_via_api! do |commit| - commit.project = project - commit.commit_message = 'Add new file' - commit.branch = branch_name - commit.add_files( - [ - { - file_path: "#{branch_name}-file.md", - content: "file content" - } - ] - ) - end - Page::MergeRequest::Show.perform do |mr| - mr.refresh - # Part of the challenge with this test is that the MR widget has many components that could be displayed # and many errors states that those components could encounter. Most of the time few of those # possible components will be relevant, so it would be inefficient for this test to check for each of @@ -102,8 +78,6 @@ module QA mr.wait_until_ready_to_merge(transient_test: transient_test) mr.retry_until(reload: true, message: 'Wait until ready to click MWPS') do - merge_request.reload! - # Click the MWPS button if we can break mr.merge_when_pipeline_succeeds! if mr.has_element?(:merge_button, text: 'Merge when pipeline succeeds') @@ -115,7 +89,7 @@ module QA end aggregate_failures do - expect { mr.merged? }.to eventually_be_truthy.within(max_duration: 60), "Expected content 'The changes were merged' but it did not appear." + expect { mr.merged? }.to eventually_be_truthy.within(max_duration: 120), "Expected content 'The changes were merged' but it did not appear." expect(merge_request.reload!.merge_when_pipeline_succeeds).to be_truthy expect(merge_request.state).to eq('merged') expect(project.pipelines.last[:status]).to eq('success') diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb index 536abfa5303..2280cc971a7 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb @@ -28,15 +28,19 @@ module QA merge_request.visit! - Page::MergeRequest::Show.perform do |merge_request| - expect(merge_request).to have_content('Merge blocked: the source branch must be rebased onto the target branch.') - expect(merge_request).to be_fast_forward_not_possible - expect(merge_request).not_to have_merge_button + Page::MergeRequest::Show.perform do |mr_page| + expect(mr_page).to have_content('Merge blocked: the source branch must be rebased onto the target branch.') + expect(mr_page).to be_fast_forward_not_possible + expect(mr_page).not_to have_merge_button + expect(merge_request.project.commits.size).to eq(2) - merge_request.rebase! + mr_page.rebase! - expect(merge_request).to have_merge_button - expect(merge_request).to be_fast_forward_possible + expect { mr_page.has_merge_button? }.to eventually_be_truthy.within(max_duration: 60, reload_page: mr_page) + + mr_page.merge! + + expect(merge_request.project.commits.size).to eq(3) end end end diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb index 6caa8e64d56..eb6449181b5 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb @@ -21,7 +21,7 @@ module QA file.project = project file.commit_message = 'Add new file' file.name = "test-folder/#{file_name}" - file.content = "### Heading\n\n[Gitlab link](https://gitlab.com/)" + file.content = "### Heading\n\n[Example link](https://example.com/)" end project.visit! @@ -35,9 +35,9 @@ module QA aggregate_failures 'markdown file contents' do expect(show).to have_content('Heading') - expect(show).to have_content('Gitlab link') + expect(show).to have_content('Example link') expect(show).not_to have_content('###') - expect(show).not_to have_content('https://gitlab.com/') + expect(show).not_to have_content('https://example.com/') end end end diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb index a50b995e483..e4204776c46 100644 --- a/qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb @@ -35,18 +35,18 @@ module QA let(:files) do [ - { - number: 1, - content: first_file_content - }, - { - number: 2, - content: second_file_content - }, - { - number: 3, - content: third_file_content - } + { + number: 1, + content: first_file_content + }, + { + number: 2, + content: second_file_content + }, + { + number: 3, + content: third_file_content + } ] end diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb index b93bc1545d1..0f01a965e7b 100644 --- a/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb @@ -9,7 +9,7 @@ module QA snippet.description = ' ' snippet.visibility = 'Private' snippet.file_name = 'markdown_file.md' - snippet.file_content = "### Snippet heading\n\n[Gitlab link](https://gitlab.com/)" + snippet.file_content = "### Snippet heading\n\n[Example link](https://example.com/)" end end @@ -30,9 +30,9 @@ module QA expect(snippet).to have_visibility_type(/private/i) expect(snippet).to have_file_name('markdown_file.md') expect(snippet).to have_file_content('Snippet heading') - expect(snippet).to have_file_content('Gitlab link') + expect(snippet).to have_file_content('Example link') expect(snippet).not_to have_file_content('###') - expect(snippet).not_to have_file_content('https://gitlab.com/') + expect(snippet).not_to have_file_content('https://example.com/') end end end diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb index e9871a70560..046327f780b 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb @@ -3,9 +3,7 @@ module QA RSpec.describe 'Create' do describe 'Open a fork in Web IDE', - # TODO: remove limitation to only run on main when the test is fixed - only: { pipeline: :main }, - quarantine: { + skip: { issue: "https://gitlab.com/gitlab-org/gitlab/-/issues/351696", type: :flaky } do diff --git a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb index bd200e57ff9..7782c0240e9 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb @@ -1,13 +1,7 @@ # frozen_string_literal: true module QA - # TODO: - # Remove FF :ci_trigger_forward_variables - # when https://gitlab.com/gitlab-org/gitlab/-/issues/355572 is closed - RSpec.describe 'Verify', :runner, feature_flag: { - name: 'ci_trigger_forward_variables', - scope: :global - } do + RSpec.describe 'Verify', :runner do describe 'UI defined variable' do include_context 'variable inheritance test prep' @@ -16,16 +10,13 @@ module QA add_ci_file(upstream_project, [upstream_ci_file, upstream_child1_ci_file]) start_pipeline_with_variable - Page::Project::Pipeline::Show.perform do |show| - Support::Waiter.wait_until { show.passed? } - end + wait_for_pipelines end it( 'is inheritable when forward:pipeline_variables is true', :aggregate_failures, - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358197', - quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/361338', type: :investigating } + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358197' ) do visit_job_page('child1', 'child1_job') verify_job_log_shows_variable_value @@ -40,19 +31,13 @@ module QA { file_path: '.gitlab-ci.yml', content: <<~YAML - stages: - - test - - deploy - child1_trigger: - stage: test trigger: include: .child1-ci.yml forward: pipeline_variables: true downstream1_trigger: - stage: deploy trigger: project: #{downstream1_project.full_path} forward: diff --git a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb index 2bd0be542fe..69a99483b38 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb @@ -1,13 +1,7 @@ # frozen_string_literal: true module QA - # TODO: - # Remove FF :ci_trigger_forward_variables - # when https://gitlab.com/gitlab-org/gitlab/-/issues/355572 is closed - RSpec.describe 'Verify', :runner, feature_flag: { - name: 'ci_trigger_forward_variables', - scope: :global - } do + RSpec.describe 'Verify', :runner do describe 'UI defined variable' do include_context 'variable inheritance test prep' @@ -17,16 +11,13 @@ module QA add_ci_file(upstream_project, [upstream_ci_file, upstream_child1_ci_file, upstream_child2_ci_file]) start_pipeline_with_variable - Page::Project::Pipeline::Show.perform do |show| - Support::Waiter.wait_until { show.passed? } - end + wait_for_pipelines end it( 'is not inheritable when forward:pipeline_variables is false', :aggregate_failures, - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358199', - quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/361339', type: :investigating } + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358199' ) do visit_job_page('child1', 'child1_job') verify_job_log_does_not_show_variable_value @@ -40,8 +31,7 @@ module QA it( 'is not inheritable by default', :aggregate_failures, - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358200', - quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/361339', type: :investigating } + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358200' ) do visit_job_page('child2', 'child2_job') verify_job_log_does_not_show_variable_value @@ -56,12 +46,7 @@ module QA { file_path: '.gitlab-ci.yml', content: <<~YAML - stages: - - test - - deploy - child1_trigger: - stage: test trigger: include: .child1-ci.yml forward: @@ -69,12 +54,10 @@ module QA # default behavior child2_trigger: - stage: test trigger: include: .child2-ci.yml downstream1_trigger: - stage: deploy trigger: project: #{downstream1_project.full_path} forward: @@ -82,7 +65,6 @@ module QA # default behavior downstream2_trigger: - stage: deploy trigger: project: #{downstream2_project.full_path} YAML diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/multi-project_pipelines_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/multi-project_pipelines_spec.rb deleted file mode 100644 index c5408f30d16..00000000000 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/multi-project_pipelines_spec.rb +++ /dev/null @@ -1,113 +0,0 @@ -# frozen_string_literal: true - -module QA - RSpec.describe 'Verify' do - describe 'Multi-project pipelines' do - let(:downstream_job_name) { 'downstream_job' } - let(:executor) { "qa-runner-#{SecureRandom.hex(4)}" } - let!(:group) { Resource::Group.fabricate_via_api! } - - let(:upstream_project) do - Resource::Project.fabricate_via_api! do |project| - project.group = group - project.name = 'upstream-project' - end - end - - let(:downstream_project) do - Resource::Project.fabricate_via_api! do |project| - project.group = group - project.name = 'downstream-project' - end - end - - let!(:runner) do - Resource::Runner.fabricate_via_api! do |runner| - runner.token = group.reload!.runners_token - runner.name = executor - runner.tags = [executor] - end - end - - before do - add_ci_file(downstream_project, downstream_ci_file) - add_ci_file(upstream_project, upstream_ci_file) - - Flow::Login.sign_in - upstream_project.visit! - Flow::Pipeline.visit_latest_pipeline(status: 'passed') - end - - after do - runner.remove_via_api! - [upstream_project, downstream_project].each(&:remove_via_api!) - end - - it( - 'creates a multi-project pipeline with artifact download', - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358064' - ) do - Page::Project::Pipeline::Show.perform do |show| - expect(show).to have_passed - expect(show).not_to have_job(downstream_job_name) - - show.expand_linked_pipeline - - expect(show).to have_job(downstream_job_name) - end - end - - private - - def add_ci_file(project, file) - Resource::Repository::Commit.fabricate_via_api! do |commit| - commit.project = project - commit.commit_message = 'Add CI config file' - commit.add_files([file]) - end - end - - def upstream_ci_file - { - file_path: '.gitlab-ci.yml', - content: <<~YAML - stages: - - test - - deploy - - job1: - stage: test - tags: ["#{executor}"] - script: echo 'done' > output.txt - artifacts: - paths: - - output.txt - - staging: - stage: deploy - trigger: - project: #{downstream_project.path_with_namespace} - strategy: depend - YAML - } - end - - def downstream_ci_file - { - file_path: '.gitlab-ci.yml', - content: <<~YAML - "#{downstream_job_name}": - stage: test - tags: ["#{executor}"] - needs: - - project: #{upstream_project.path_with_namespace} - job: job1 - ref: main - artifacts: true - script: cat output.txt - YAML - } - end - end - end -end diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_dependent_relationship_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_dependent_relationship_spec.rb deleted file mode 100644 index f2278c7bf6d..00000000000 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_dependent_relationship_spec.rb +++ /dev/null @@ -1,136 +0,0 @@ -# frozen_string_literal: true - -module QA - RSpec.describe 'Verify', :runner, :reliable do - describe 'Parent-child pipelines dependent relationship' do - let!(:project) do - Resource::Project.fabricate_via_api! do |project| - project.name = 'pipelines-dependent-relationship' - end - end - - let!(:runner) do - Resource::Runner.fabricate_via_api! do |runner| - runner.project = project - runner.name = project.name - runner.tags = ["#{project.name}"] - end - end - - before do - Flow::Login.sign_in - end - - after do - runner.remove_via_api! - end - - it( - 'parent pipelines passes if child passes', - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358062' - ) do - add_ci_files(success_child_ci_file) - Flow::Pipeline.visit_latest_pipeline - - Page::Project::Pipeline::Show.perform do |parent_pipeline| - expect(parent_pipeline).to have_child_pipeline - expect { parent_pipeline.has_passed? }.to eventually_be_truthy - end - end - - it( - 'parent pipeline fails if child fails', - testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/358063' - ) do - add_ci_files(fail_child_ci_file) - Flow::Pipeline.visit_latest_pipeline - - Page::Project::Pipeline::Show.perform do |parent_pipeline| - expect(parent_pipeline).to have_child_pipeline - expect { parent_pipeline.has_failed? }.to eventually_be_truthy - end - end - - private - - def success_child_ci_file - { - file_path: '.child-ci.yml', - content: <<~YAML - child_job: - stage: test - tags: ["#{project.name}"] - needs: - - project: #{project.path_with_namespace} - job: job1 - ref: main - artifacts: true - script: - - cat output.txt - - echo "Child job done!" - - YAML - } - end - - def fail_child_ci_file - { - file_path: '.child-ci.yml', - content: <<~YAML - child_job: - stage: test - tags: ["#{project.name}"] - script: exit 1 - - YAML - } - end - - def parent_ci_file - { - file_path: '.gitlab-ci.yml', - content: <<~YAML - stages: - - build - - test - - deploy - - default: - tags: ["#{project.name}"] - - job1: - stage: build - script: echo "build success" > output.txt - artifacts: - paths: - - output.txt - - job2: - stage: test - trigger: - include: ".child-ci.yml" - strategy: depend - - job3: - stage: deploy - script: echo "parent deploy done" - - YAML - } - end - - def add_ci_files(child_ci_file) - Resource::Repository::Commit.fabricate_via_api! do |commit| - commit.project = project - commit.commit_message = 'Add parent and child pipelines CI files.' - commit.add_files( - [ - child_ci_file, - parent_ci_file - ] - ) - end.project.visit! - end - end - end -end diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb index d03ebd5aba3..205b4d1168a 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb @@ -31,7 +31,7 @@ module QA project.remove_via_api! end - it 'creates 2 trigger jobs and passes corresponding matrix variables', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348000', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/361346', type: :investigating } do + it 'creates 2 trigger jobs and passes corresponding matrix variables', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348000' do Page::Project::Pipeline::Show.perform do |parent_pipeline| trigger_title1 = 'deploy: [ovh, monitoring]' trigger_title2 = 'deploy: [ovh, app]' diff --git a/qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb new file mode 100644 index 00000000000..adcf91a550c --- /dev/null +++ b/qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb @@ -0,0 +1,92 @@ +# frozen_string_literal: true + +module QA + # Spark various endpoints (git, web, api, sidekiq) to ensure + # GitLab-QA covers these various endpoints. The `api_json.log` can then be consumed after test run. + # + # User sets a CI variable via UI (Web write) -> + # Git push (Git read/write) -> + # pipeline created (Sidekiq read/write) -> + # runner picks up pipeline (API read/write) -> + # User views pipeline succeeds (Web read) + RSpec.describe 'Verify', :runner do + context 'Endpoint Coverage' do + let!(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'endpoint-coverage' + end + end + + let!(:runner) do + Resource::Runner.fabricate_via_api! do |runner| + runner.project = project + runner.name = project.name + runner.tags = [project.name] + end + end + + before do + Flow::Login.sign_in + project.visit! + end + + after do + project.remove_via_api! + runner.remove_via_api! + end + + it( + 'spans r/w postgres web sidekiq git api', + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/360837' + ) do + # create a CI variable via UI + Page::Project::Show.perform(&:go_to_ci_cd_settings) + + Page::Project::Settings::CiCd.perform do |ci_cd| + ci_cd.expand_ci_variables do |vars| + vars.click_add_variable + vars.fill_variable('CI_VARIABLE', 'secret-value') + end + end + + # push a .gitlab-ci.yml file that exposes artifacts + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.file_name = '.gitlab-ci.yml' + push.file_content = <<~YAML + test: + tags: + - #{project.name} + script: + - mkdir out; echo $CI_VARIABLE > out/file.out + artifacts: + paths: + - out/ + expire_in: 1h + YAML + push.commit_message = 'Commit .gitlab-ci.yml' + end + + # observe pipeline creation + project.visit! + Flow::Pipeline.visit_latest_pipeline + + Page::Project::Pipeline::Show.perform do |show| + show.click_job('test') + end + + Page::Project::Job::Show.perform do |show| + # user views job succeeding + expect { show.passed? }.to eventually_be_truthy.within(max_duration: 60, sleep_interval: 1) + + show.click_browse_button + end + + Page::Project::Artifact::Show.perform do |show| + show.go_to_directory('out') + expect(show).to have_content('file.out') + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb b/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb index f570ad335fe..dacfc6c801b 100644 --- a/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb @@ -233,10 +233,13 @@ module QA expect(registry).to have_registry_repository(project.path_with_namespace) registry.click_on_image(project.path_with_namespace) + expect(registry).to have_tag('master') registry.click_delete - expect(registry).not_to have_tag('master') + + expect { registry.has_no_tag?('master') } + .to eventually_be_truthy.within(max_duration: 60, reload_page: page) end end end diff --git a/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb b/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb index 1df68cc729d..27b11d697cc 100644 --- a/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb @@ -83,7 +83,8 @@ module QA expect(registry).to have_tag('master') registry.click_delete - expect(registry).not_to have_tag('master') + expect { registry.has_no_tag?('master') } + .to eventually_be_truthy.within(max_duration: 60, reload_page: page) end end end diff --git a/qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb b/qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb index e37102c17f7..677b8970a75 100644 --- a/qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Package', :orchestrated, :packages, :object_storage do + RSpec.describe 'Package', :orchestrated, :packages, :object_storage, :reliable do describe 'Generic Repository' do include Runtime::Fixtures diff --git a/qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb b/qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb index 61a92daf129..124e7743728 100644 --- a/qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb @@ -40,7 +40,6 @@ module QA let!(:another_project) do Resource::Project.fabricate_via_api! do |another_project| another_project.name = 'npm-instance-level-install' - another_project.template_name = 'express' another_project.group = project.group end end diff --git a/qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb b/qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb index ab6896ca26f..e70b95db1a5 100644 --- a/qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb @@ -1,10 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Package', :orchestrated, :packages, :object_storage, :reliable, quarantine: { - type: :flaky, - issue: "https://gitlab.com/gitlab-org/gitlab/-/issues/361704" - } do + RSpec.describe 'Package', :orchestrated, :packages, :object_storage do describe 'NuGet project level endpoint' do include Support::Helpers::MaskToken @@ -16,13 +13,7 @@ module QA end end - let(:personal_access_token) do - unless Page::Main::Menu.perform(&:signed_in?) - Flow::Login.sign_in - end - - Resource::PersonalAccessToken.fabricate! - end + let(:personal_access_token) { Resource::PersonalAccessToken.fabricate! } let(:project_deploy_token) do Resource::ProjectDeployToken.fabricate_via_api! do |deploy_token| @@ -113,19 +104,34 @@ module QA { file_path: '.gitlab-ci.yml', content: <<~YAML - deploy-and-install: - image: mcr.microsoft.com/dotnet/sdk:5.0 - script: - - dotnet restore -p:Configuration=Release - - dotnet build -c Release - - dotnet pack -c Release -p:PackageID=#{package.name} - - dotnet nuget add source "$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/nuget/index.json" --name gitlab --username #{auth_token_username} --password #{auth_token_password} --store-password-in-clear-text - - dotnet nuget push "bin/Release/*.nupkg" --source gitlab - - "dotnet add dotnetcore.csproj package #{package.name} --version 1.0.0" - rules: - - if: '$CI_COMMIT_BRANCH == "#{project.default_branch}"' - tags: - - "runner-for-#{project.name}" + stages: + - deploy + - install + + deploy: + stage: deploy + image: mcr.microsoft.com/dotnet/sdk:5.0 + script: + - dotnet restore -p:Configuration=Release + - dotnet build -c Release + - dotnet pack -c Release -p:PackageID=#{package.name} + - dotnet nuget add source "$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/nuget/index.json" --name gitlab --username #{auth_token_username} --password #{auth_token_password} --store-password-in-clear-text + - dotnet nuget push "bin/Release/*.nupkg" --source gitlab + rules: + - if: '$CI_COMMIT_BRANCH == "#{project.default_branch}"' + tags: + - "runner-for-#{project.name}" + + install: + stage: install + image: mcr.microsoft.com/dotnet/sdk:5.0 + script: + - dotnet nuget add source "$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/nuget/index.json" --name gitlab --username #{auth_token_username} --password #{auth_token_password} --store-password-in-clear-text + - "dotnet add dotnetcore.csproj package #{package.name} --version 1.0.0" + rules: + - if: '$CI_COMMIT_BRANCH == "#{project.default_branch}"' + tags: + - "runner-for-#{project.name}" YAML }, { @@ -150,7 +156,17 @@ module QA Flow::Pipeline.visit_latest_pipeline Page::Project::Pipeline::Show.perform do |pipeline| - pipeline.click_job('deploy-and-install') + pipeline.click_job('deploy') + end + + Page::Project::Job::Show.perform do |job| + expect(job).to be_successful(timeout: 800) + end + + page.go_back + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.click_job('install') end Page::Project::Job::Show.perform do |job| |