summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/browser_ui
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
commit0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch)
tree7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /qa/qa/specs/features/browser_ui
parent72123183a20411a36d607d70b12d57c484394c8e (diff)
downloadgitlab-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')
-rw-r--r--qa/qa/specs/features/browser_ui/14_product_intelligence/performance_bar_spec.rb (renamed from qa/qa/specs/features/browser_ui/14_non_devops/performance_bar_spec.rb)7
-rw-r--r--qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_default_enabled_spec.rb (renamed from qa/qa/specs/features/browser_ui/14_non_devops/service_ping_default_enabled_spec.rb)7
-rw-r--r--qa/qa/specs/features/browser_ui/14_product_intelligence/service_ping_disabled_spec.rb (renamed from qa/qa/specs/features/browser_ui/14_non_devops/service_ping_disabled_spec.rb)7
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb8
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/project/personal_project_permissions_spec.rb22
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb5
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb109
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb9
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb6
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb78
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb18
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb6
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb24
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb6
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb4
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb21
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb26
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/pipeline/multi-project_pipelines_spec.rb113
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_dependent_relationship_spec.rb136
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb92
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb5
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb3
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb1
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb66
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|