Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-08-31 12:10:39 +00:00
parent de0c73ffc5
commit 729eabcb41
128 changed files with 627 additions and 250 deletions

View File

@ -1,5 +1,6 @@
import { deprecatedCreateFlash as flash } from '~/flash'; import { deprecatedCreateFlash as flash } from '~/flash';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import { differenceInMilliseconds } from '~/lib/utils/datetime_utility';
// Renders math using KaTeX in any element with the // Renders math using KaTeX in any element with the
// `js-render-math` class // `js-render-math` class
@ -111,7 +112,7 @@ class SafeMathRenderer {
// Give the browser time to reflow the svg // Give the browser time to reflow the svg
waitForReflow(() => { waitForReflow(() => {
const deltaTime = Date.now() - this.startTime; const deltaTime = differenceInMilliseconds(this.startTime);
this.totalMS += deltaTime; this.totalMS += deltaTime;
this.renderElement(); this.renderElement();

View File

@ -216,8 +216,9 @@ export const timeFor = (time, expiredLabel) => {
return timeago.format(time, `${timeagoLanguageCode}-remaining`).trim(); return timeago.format(time, `${timeagoLanguageCode}-remaining`).trim();
}; };
export const millisecondsPerDay = 1000 * 60 * 60 * 24;
export const getDayDifference = (a, b) => { export const getDayDifference = (a, b) => {
const millisecondsPerDay = 1000 * 60 * 60 * 24;
const date1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); const date1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
const date2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); const date2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
@ -709,7 +710,7 @@ export const dateFromParams = (year, month, day) => {
* A utility function which computes the difference in seconds * A utility function which computes the difference in seconds
* between 2 dates. * between 2 dates.
* *
* @param {Date} startDate the start sate * @param {Date} startDate the start date
* @param {Date} endDate the end date * @param {Date} endDate the end date
* *
* @return {Int} the difference in seconds * @return {Int} the difference in seconds
@ -717,3 +718,18 @@ export const dateFromParams = (year, month, day) => {
export const differenceInSeconds = (startDate, endDate) => { export const differenceInSeconds = (startDate, endDate) => {
return (endDate.getTime() - startDate.getTime()) / 1000; return (endDate.getTime() - startDate.getTime()) / 1000;
}; };
/**
* A utility function which computes the difference in milliseconds
* between 2 dates.
*
* @param {Date|Int} startDate the start date. Can be either a date object or a unix timestamp.
* @param {Date|Int} endDate the end date. Can be either a date object or a unix timestamp. Defaults to now.
*
* @return {Int} the difference in milliseconds
*/
export const differenceInMilliseconds = (startDate, endDate = Date.now()) => {
const startDateInMS = startDate instanceof Date ? startDate.getTime() : startDate;
const endDateInMS = endDate instanceof Date ? endDate.getTime() : endDate;
return endDateInMS - startDateInMS;
};

View File

@ -1,10 +1,12 @@
import { differenceInMilliseconds } from '~/lib/utils/datetime_utility';
export default (fn, { interval = 2000, timeout = 60000 } = {}) => { export default (fn, { interval = 2000, timeout = 60000 } = {}) => {
const startTime = Date.now(); const startTime = Date.now();
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg)); const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg));
const next = () => { const next = () => {
if (timeout === 0 || Date.now() - startTime < timeout) { if (timeout === 0 || differenceInMilliseconds(startTime) < timeout) {
setTimeout(fn.bind(null, next, stop), interval); setTimeout(fn.bind(null, next, stop), interval);
} else { } else {
reject(new Error('SIMPLE_POLL_TIMEOUT')); reject(new Error('SIMPLE_POLL_TIMEOUT'));

View File

@ -1,7 +1,7 @@
<script> <script>
import { get } from 'lodash'; import { get } from 'lodash';
import { mapActions, mapState, mapGetters } from 'vuex'; import { mapActions, mapState, mapGetters } from 'vuex';
import { GlCard, GlDeprecatedButton, GlLoadingIcon } from '@gitlab/ui'; import { GlCard, GlButton, GlLoadingIcon } from '@gitlab/ui';
import Tracking from '~/tracking'; import Tracking from '~/tracking';
import { mapComputed } from '~/vuex_shared/bindings'; import { mapComputed } from '~/vuex_shared/bindings';
import { import {
@ -14,7 +14,7 @@ import { SET_CLEANUP_POLICY_BUTTON, CLEANUP_POLICY_CARD_HEADER } from '../consta
export default { export default {
components: { components: {
GlCard, GlCard,
GlDeprecatedButton, GlButton,
GlLoadingIcon, GlLoadingIcon,
ExpirationPolicyFields, ExpirationPolicyFields,
}, },
@ -104,24 +104,25 @@ export default {
</template> </template>
<template #footer> <template #footer>
<div class="gl-display-flex gl-justify-content-end"> <div class="gl-display-flex gl-justify-content-end">
<gl-deprecated-button <gl-button
ref="cancel-button" ref="cancel-button"
type="reset" type="reset"
class="gl-mr-3 gl-display-block" class="gl-mr-3 gl-display-block"
:disabled="isCancelButtonDisabled" :disabled="isCancelButtonDisabled"
> >
{{ __('Cancel') }} {{ __('Cancel') }}
</gl-deprecated-button> </gl-button>
<gl-deprecated-button <gl-button
ref="save-button" ref="save-button"
type="submit" type="submit"
:disabled="isSubmitButtonDisabled" :disabled="isSubmitButtonDisabled"
variant="success" variant="success"
category="primary"
class="gl-display-flex gl-justify-content-center gl-align-items-center js-no-auto-disable" class="gl-display-flex gl-justify-content-center gl-align-items-center js-no-auto-disable"
> >
{{ $options.i18n.SET_CLEANUP_POLICY_BUTTON }} {{ $options.i18n.SET_CLEANUP_POLICY_BUTTON }}
<gl-loading-icon v-if="isLoading" class="gl-ml-3" /> <gl-loading-icon v-if="isLoading" class="gl-ml-3" />
</gl-deprecated-button> </gl-button>
</div> </div>
</template> </template>
</gl-card> </gl-card>

View File

@ -2,18 +2,20 @@
module Mutations module Mutations
module Ci module Ci
class PipelineCancel < BaseMutation class PipelineCancel < Base
graphql_name 'PipelineCancel' graphql_name 'PipelineCancel'
authorize :update_pipeline authorize :update_pipeline
def resolve def resolve(id:)
result = ::Ci::CancelUserPipelinesService.new.execute(current_user) pipeline = authorized_find!(id: id)
{ if pipeline.cancelable?
success: result.success?, pipeline.cancel_running
errors: [result&.message] { success: true, errors: [] }
} else
{ success: false, errors: ['Pipeline is not cancelable'] }
end
end end
end end
end end

View File

@ -11,7 +11,7 @@
= s_('AdminSettings|Try using the latest version of Integrations instead.') = s_('AdminSettings|Try using the latest version of Integrations instead.')
.gl-alert-actions .gl-alert-actions
= link_to _('Go to Integrations'), integrations_admin_application_settings_path, class: 'btn btn-info gl-alert-action gl-button' = link_to _('Go to Integrations'), integrations_admin_application_settings_path, class: 'btn btn-info gl-alert-action gl-button'
= link_to _('Learn more'), help_page_path('user/admin_area/settings/project_integration_management'), class: 'btn gl-alert-action btn-secondary gl-button', target: '_blank', rel: 'noopener noreferrer' = link_to _('Learn more'), help_page_path('user/admin_area/settings/project_integration_management'), class: 'btn btn-default gl-alert-action btn-secondary gl-button', target: '_blank', rel: 'noopener noreferrer'
%h3.page-title Service templates %h3.page-title Service templates
%p.light= s_('AdminSettings|Service template allows you to set default values for integrations') %p.light= s_('AdminSettings|Service template allows you to set default values for integrations')

View File

@ -135,10 +135,12 @@
%img.modal-profile-crop-image{ alt: s_("Profiles|Avatar cropper") } %img.modal-profile-crop-image{ alt: s_("Profiles|Avatar cropper") }
.crop-controls .crop-controls
.btn-group .btn-group
%button.btn.btn-primary{ data: { method: 'zoom', option: '0.1' } }
%span.fa.fa-search-plus
%button.btn.btn-primary{ data: { method: 'zoom', option: '-0.1' } } %button.btn.btn-primary{ data: { method: 'zoom', option: '-0.1' } }
%span.fa.fa-search-minus %span
= sprite_icon('search-minus')
%button.btn.btn-primary{ data: { method: 'zoom', option: '0.1' } }
%span
= sprite_icon('search-plus')
.modal-footer .modal-footer
%button.btn.btn-primary.js-upload-user-avatar{ type: 'button' } %button.btn.btn-primary.js-upload-user-avatar{ type: 'button' }
= s_("Profiles|Set new profile picture") = s_("Profiles|Set new profile picture")

View File

@ -0,0 +1,5 @@
---
title: Replace fa-search-* icons with GitLab SVG icons
merge_request: 40580
author:
type: changed

View File

@ -0,0 +1,5 @@
---
title: Stricter default timeouts for outgoing HTTP requests
merge_request: 39188
author:
type: other

View File

@ -0,0 +1,5 @@
---
title: Create IssueLink for Vulnerabilities that do not have them
merge_request: 40726
author:
type: fixed

View File

@ -0,0 +1,5 @@
---
title: Add Conan lock file support to Dependency Scanning
merge_request: 39811
author:
type: added

View File

@ -0,0 +1,5 @@
---
title: Add issue importers usage pings (FogBugz, Phabricator, Jira)
merge_request: 40382
author:
type: added

View File

@ -0,0 +1,5 @@
---
title: 'GraphQL: Updates PipelineCancel mutation'
merge_request: 40764
author:
type: changed

View File

@ -0,0 +1,5 @@
---
title: Migrating setup policy button in registry settings
merge_request: 40668
author:
type: changed

View File

@ -0,0 +1,5 @@
---
title: Add warning to stop Puma and Sidekiq when restoring from backup
merge_request: 40791
author:
type: other

View File

@ -0,0 +1,48 @@
# frozen_string_literal: true
class CreateMissingVulnerabilitiesIssueLinks < ActiveRecord::Migration[6.0]
class VulnerabilitiesFeedback < ActiveRecord::Base
include EachBatch
self.table_name = 'vulnerability_feedback'
end
class VulnerabilitiesIssueLink < ActiveRecord::Base
self.table_name = 'vulnerability_issue_links'
LINK_TYPE_CREATED = 2
end
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
VulnerabilitiesFeedback.where('issue_id IS NOT NULL').each_batch do |relation|
timestamp = Time.now
issue_links = relation
.joins("JOIN vulnerability_occurrences vo ON vo.project_id = vulnerability_feedback.project_id AND vo.report_type = vulnerability_feedback.category AND encode(vo.project_fingerprint, 'hex') = vulnerability_feedback.project_fingerprint")
.where('vo.vulnerability_id IS NOT NULL')
.pluck(:vulnerability_id, :issue_id)
.map do |v_id, i_id|
{
vulnerability_id: v_id,
issue_id: i_id,
link_type: VulnerabilitiesIssueLink::LINK_TYPE_CREATED,
created_at: timestamp,
updated_at: timestamp
}
end
next if issue_links.empty?
VulnerabilitiesIssueLink.insert_all(
issue_links,
returning: false
)
end
end
def down
end
end

View File

@ -0,0 +1,30 @@
# frozen_string_literal: true
class UpdateLocationFingerprintForCsFindings < ActiveRecord::Migration[6.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
BATCH_SIZE = 1_000
INTERVAL = 2.minutes
# 815_565 records
def up
return unless Gitlab.ee?
migration = Gitlab::BackgroundMigration::UpdateLocationFingerprintForCsFindings
migration_name = migration.to_s.demodulize
relation = migration::Finding.container_scanning
queue_background_migration_jobs_by_range_at_intervals(relation,
migration_name,
INTERVAL,
batch_size: BATCH_SIZE)
end
def down
# no-op
# intentionally blank
end
end

View File

@ -0,0 +1 @@
e8fc0809b5bd3248dc625602deeaaef16e2db6b33d8eaf51fdcc1c67dee49e17

View File

@ -0,0 +1 @@
e24f8495b7458ce57e148017ef6cae901e7f3997fca247afeff524a43e739431

View File

@ -10656,6 +10656,11 @@ input PipelineCancelInput {
A unique identifier for the client performing the mutation. A unique identifier for the client performing the mutation.
""" """
clientMutationId: String clientMutationId: String
"""
The id of the pipeline to mutate
"""
id: CiPipelineID!
} }
""" """

View File

@ -31967,6 +31967,20 @@
"description": "Autogenerated input type of PipelineCancel", "description": "Autogenerated input type of PipelineCancel",
"fields": null, "fields": null,
"inputFields": [ "inputFields": [
{
"name": "id",
"description": "The id of the pipeline to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
"name": "CiPipelineID",
"ofType": null
}
},
"defaultValue": null
},
{ {
"name": "clientMutationId", "name": "clientMutationId",
"description": "A unique identifier for the client performing the mutation.", "description": "A unique identifier for the client performing the mutation.",

View File

@ -152,17 +152,20 @@ The CI/CD YAML configuration example above works for testing against static envi
but it can be extended to work with [review apps](../../../ci/review_apps) or but it can be extended to work with [review apps](../../../ci/review_apps) or
[dynamic environments](../../../ci/environments) with a few extra steps. [dynamic environments](../../../ci/environments) with a few extra steps.
The best approach is to capture the dynamic URL into a custom environment variable that The best approach is to capture the dynamic URL in a [`.env` file](https://docs.docker.com/compose/env-file/)
is then [inherited](../../../ci/variables/README.md#inherit-environment-variables) as a job artifact to be shared, then use a custom environment variable we've provided named `K6_DOCKER_OPTIONS`
by the `load_performance` job. The k6 test script to be run should then be configured to to configure the k6 Docker container to use the file. With this, k6 can then use any
use that environment URL, such as: ``http.get(`${__ENV.ENVIRONMENT_URL`})``. environment variables from the `.env` file in scripts using standard JavaScript,
such as: ``http.get(`${__ENV.ENVIRONMENT_URL`})``.
For example: For example:
1. In the `review` job: 1. In the `review` job:
1. Capture the dynamic URL and save it into a `.env` file, e.g. `echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env`. 1. Capture the dynamic URL and save it into a `.env` file, e.g. `echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env`.
1. Set the `.env` file to be an [`artifacts:reports:dotenv` report](../../../ci/variables/README.md#inherit-environment-variables). 1. Set the `.env` file to be a [job artifact](../../../ci/pipelines/job_artifacts.md#job-artifacts).
1. Set the `load_performance` job to depend on the review job, so it inherits the environment variable. 1. In the `load_performance` job:
1. Set it to depend on the review job, so it inherits the env file.
1. Set the `K6_DOCKER_OPTIONS` variable with the [Docker cli option for env files](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file), for example `--env-file review.env`.
1. Configure the k6 test script to use the environment variable in it's steps. 1. Configure the k6 test script to use the environment variable in it's steps.
Your `.gitlab-ci.yml` file might be similar to: Your `.gitlab-ci.yml` file might be similar to:
@ -184,15 +187,16 @@ review:
- run_deploy_script - run_deploy_script
- echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env - echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env
artifacts: artifacts:
reports: paths:
dotenv: - review.env
review.env
rules: rules:
- if: '$CI_COMMIT_BRANCH' # Modify to match your pipeline rules, or use `only/except` if needed. - if: '$CI_COMMIT_BRANCH' # Modify to match your pipeline rules, or use `only/except` if needed.
load_performance: load_performance:
dependencies: dependencies:
- review - review
variables:
K6_DOCKER_OPTIONS: '--env-file review.env'
rules: rules:
- if: '$CI_COMMIT_BRANCH' # Modify to match your pipeline rules, or use `only/except` if needed. - if: '$CI_COMMIT_BRANCH' # Modify to match your pipeline rules, or use `only/except` if needed.
``` ```

View File

@ -0,0 +1,13 @@
# frozen_string_literal: true
# rubocop:disable Style/Documentation
module Gitlab
module BackgroundMigration
class UpdateLocationFingerprintForCsFindings
def perform(start_id, stop_id)
end
end
end
end
Gitlab::BackgroundMigration::UpdateLocationFingerprintForCsFindings.prepend_if_ee('EE::Gitlab::BackgroundMigration::UpdateLocationFingerprintForCsFindings')

View File

@ -8,6 +8,7 @@ load_performance:
K6_VERSION: 0.27.0 K6_VERSION: 0.27.0
K6_TEST_FILE: github.com/loadimpact/k6/samples/http_get.js K6_TEST_FILE: github.com/loadimpact/k6/samples/http_get.js
K6_OPTIONS: '' K6_OPTIONS: ''
K6_DOCKER_OPTIONS: ''
services: services:
- docker:19.03.11-dind - docker:19.03.11-dind
script: script:
@ -17,7 +18,7 @@ load_performance:
export DOCKER_HOST='tcp://localhost:2375' export DOCKER_HOST='tcp://localhost:2375'
fi fi
fi fi
- docker run --rm -v "$(pwd)":/k6 -w /k6 $K6_IMAGE:$K6_VERSION run $K6_TEST_FILE --summary-export=load-performance.json $K6_OPTIONS - docker run --rm -v "$(pwd)":/k6 -w /k6 $K6_DOCKER_OPTIONS $K6_IMAGE:$K6_VERSION run $K6_TEST_FILE --summary-export=load-performance.json $K6_OPTIONS
artifacts: artifacts:
reports: reports:
load_performance: load-performance.json load_performance: load-performance.json

View File

@ -114,6 +114,7 @@ gemnasium-dependency_scanning:
- '{package-lock.json,*/package-lock.json,*/*/package-lock.json}' - '{package-lock.json,*/package-lock.json,*/*/package-lock.json}'
- '{yarn.lock,*/yarn.lock,*/*/yarn.lock}' - '{yarn.lock,*/yarn.lock,*/*/yarn.lock}'
- '{packages.lock.json,*/packages.lock.json,*/*/packages.lock.json}' - '{packages.lock.json,*/packages.lock.json,*/*/packages.lock.json}'
- '{conan.lock,*/conan.lock,*/*/conan.lock}'
gemnasium-maven-dependency_scanning: gemnasium-maven-dependency_scanning:
extends: .ds-analyzer extends: .ds-analyzer

View File

@ -14,10 +14,11 @@ load_performance:
K6_VERSION: 0.27.0 K6_VERSION: 0.27.0
K6_TEST_FILE: github.com/loadimpact/k6/samples/http_get.js K6_TEST_FILE: github.com/loadimpact/k6/samples/http_get.js
K6_OPTIONS: '' K6_OPTIONS: ''
K6_DOCKER_OPTIONS: ''
services: services:
- docker:stable-dind - docker:stable-dind
script: script:
- docker run --rm -v "$(pwd)":/k6 -w /k6 $K6_IMAGE:$K6_VERSION run $K6_TEST_FILE --summary-export=load-performance.json $K6_OPTIONS - docker run --rm -v "$(pwd)":/k6 -w /k6 $K6_DOCKER_OPTIONS $K6_IMAGE:$K6_VERSION run $K6_TEST_FILE --summary-export=load-performance.json $K6_OPTIONS
artifacts: artifacts:
reports: reports:
load_performance: load-performance.json load_performance: load-performance.json

View File

@ -35,7 +35,7 @@ module Gitlab
def self.perform_request(http_method, path, options, &block) def self.perform_request(http_method, path, options, &block)
log_info = options.delete(:extra_log_info) log_info = options.delete(:extra_log_info)
options_with_timeouts = options_with_timeouts =
if !options.has_key?(:timeout) && Feature.enabled?(:http_default_timeouts) if !options.has_key?(:timeout)
options.with_defaults(DEFAULT_TIMEOUT_OPTIONS) options.with_defaults(DEFAULT_TIMEOUT_OPTIONS)
else else
options options

View File

@ -524,6 +524,11 @@ module Gitlab
gitea: projects_imported_count('gitea', time_period), gitea: projects_imported_count('gitea', time_period),
git: projects_imported_count('git', time_period), git: projects_imported_count('git', time_period),
manifest: projects_imported_count('manifest', time_period) manifest: projects_imported_count('manifest', time_period)
},
issues_imported: {
jira: distinct_count(::JiraImportState.where(time_period), :user_id),
fogbugz: projects_imported_count('fogbugz', time_period),
phabricator: projects_imported_count('phabricator', time_period)
} }
} }
end end

View File

@ -16,6 +16,11 @@
category: compliance category: compliance
redis_slot: compliance redis_slot: compliance
aggregation: weekly aggregation: weekly
- name: i_compliance_audit_events_api
category: compliance
redis_slot: compliance
expiry: 42
aggregation: weekly
# Analytics category # Analytics category
- name: g_analytics_contribution - name: g_analytics_contribution
category: analytics category: analytics

View File

@ -47,6 +47,11 @@ namespace :gitlab do
begin begin
unless ENV['force'] == 'yes' unless ENV['force'] == 'yes'
warning = <<-MSG.strip_heredoc warning = <<-MSG.strip_heredoc
Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installations
Before restoring the database, we will remove all existing Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be custom tables in the GitLab database these tables and all data will be

View File

@ -18,7 +18,7 @@ module QA
attr_reader :api_resource, :api_response attr_reader :api_resource, :api_response
attr_writer :api_client attr_writer :api_client
attr_accessor :user attr_accessor :api_user
def api_support? def api_support?
respond_to?(:api_get_path) && respond_to?(:api_get_path) &&
@ -120,7 +120,7 @@ module QA
def api_client def api_client
@api_client ||= begin @api_client ||= begin
Runtime::API::Client.new(:gitlab, is_new_session: !current_url.start_with?('http'), user: user) Runtime::API::Client.new(:gitlab, is_new_session: !current_url.start_with?('http'), user: api_user)
end end
end end

View File

@ -73,7 +73,7 @@ module QA
def api_post_body def api_post_body
{ {
namespace: user.username, namespace_path: user.username,
name: name, name: name,
path: name path: name
} }

View File

@ -9,7 +9,6 @@ module QA
attribute :sandbox do attribute :sandbox do
Sandbox.fabricate_via_api! do |sandbox| Sandbox.fabricate_via_api! do |sandbox|
sandbox.user = user
sandbox.api_client = api_client sandbox.api_client = api_client
end end
end end

View File

@ -148,7 +148,7 @@ module QA
end end
def fetching_own_data? def fetching_own_data?
user&.username == username || Runtime::User.username == username api_user&.username == username || Runtime::User.username == username
end end
end end
end end

View File

@ -8,7 +8,7 @@ module QA
let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) } let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) }
let(:request) { Runtime::API::Request.new(api_client, '/users') } let(:request) { Runtime::API::Request.new(api_client, '/users') }
it 'GET /users', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/441' do it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/441' do
5.times do 5.times do
get request.url get request.url
expect_status(200) expect_status(200)

View File

@ -8,13 +8,13 @@ module QA
let(:api_client) { Runtime::API::Client.new(:gitlab) } let(:api_client) { Runtime::API::Client.new(:gitlab) }
let(:request) { Runtime::API::Request.new(api_client, '/users') } let(:request) { Runtime::API::Request.new(api_client, '/users') }
it 'GET /users', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/460' do it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/460' do
get request.url get request.url
expect_status(200) expect_status(200)
end end
it 'GET /users/:username with a valid username', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/480' do it 'GET /users/:username with a valid username', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/480' do
get request.url, { params: { username: Runtime::User.username } } get request.url, { params: { username: Runtime::User.username } }
expect_status(200) expect_status(200)
@ -23,7 +23,7 @@ module QA
) )
end end
it 'GET /users/:username with an invalid username', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/462' do it 'GET /users/:username with an invalid username', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/462' do
get request.url, { params: { username: SecureRandom.hex(10) } } get request.url, { params: { username: SecureRandom.hex(10) } }
expect_status(200) expect_status(200)

View File

@ -22,7 +22,7 @@ module QA
push_commit('Initial commit') push_commit('Initial commit')
end end
it 'closes via pushing a commit', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/423' do it 'closes via pushing a commit', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/423' do
push_commit("Closes ##{issue_id}", false) push_commit("Closes ##{issue_id}", false)
Support::Retrier.retry_until(max_duration: 10, sleep_interval: 1) do Support::Retrier.retry_until(max_duration: 10, sleep_interval: 1) do

View File

@ -28,7 +28,7 @@ module QA
praefect_manager.reset_primary_to_original praefect_manager.reset_primary_to_original
end end
it 'automatically fails over', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/976' do it 'automatically fails over', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/976' do
# Create a new project with a commit and wait for it to replicate # Create a new project with a commit and wait for it to replicate
Resource::Repository::ProjectPush.fabricate! do |push| Resource::Repository::ProjectPush.fabricate! do |push|
push.project = project push.project = project
@ -66,7 +66,7 @@ module QA
end end
context 'when recovering from dataloss after failover' do context 'when recovering from dataloss after failover' do
it 'allows reconciliation', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238187', type: :stale }, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/977' do it 'allows reconciliation', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238187', type: :stale }, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/977' do
# Start the old primary node again # Start the old primary node again
praefect_manager.start_primary_node praefect_manager.start_primary_node
praefect_manager.wait_for_health_check_current_primary_node praefect_manager.wait_for_health_check_current_primary_node

View File

@ -22,7 +22,7 @@ module QA
praefect_manager.reset_primary_to_original praefect_manager.reset_primary_to_original
end end
it 'recovers from dataloss', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238186', type: :investigating }, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/978' do it 'recovers from dataloss', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238186', type: :investigating }, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/978' do
# Create a new project with a commit and wait for it to replicate # Create a new project with a commit and wait for it to replicate
praefect_manager.wait_for_replication(project.id) praefect_manager.wait_for_replication(project.id)

View File

@ -25,7 +25,7 @@ module QA
end end
end end
context 'when moving from one Gitaly storage to another', :orchestrated, :repository_storage, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/973' do context 'when moving from one Gitaly storage to another', :orchestrated, :repository_storage, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/973' do
let(:source_storage) { { type: :gitaly, name: 'default' } } let(:source_storage) { { type: :gitaly, name: 'default' } }
let(:destination_storage) { { type: :gitaly, name: QA::Runtime::Env.additional_repository_storage } } let(:destination_storage) { { type: :gitaly, name: QA::Runtime::Env.additional_repository_storage } }
@ -43,7 +43,7 @@ module QA
# Note: This test doesn't have the :orchestrated tag because it runs in the Test::Integration::Praefect # Note: This test doesn't have the :orchestrated tag because it runs in the Test::Integration::Praefect
# scenario with other tests that aren't considered orchestrated. # scenario with other tests that aren't considered orchestrated.
# It also runs on staging using nfs-file07 as non-cluster storage and nfs-file22 as cluster/praefect storage # It also runs on staging using nfs-file07 as non-cluster storage and nfs-file22 as cluster/praefect storage
context 'when moving from Gitaly to Gitaly Cluster', :requires_praefect, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/974' do context 'when moving from Gitaly to Gitaly Cluster', :requires_praefect, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/974' do
let(:source_storage) { { type: :gitaly, name: QA::Runtime::Env.non_cluster_repository_storage } } let(:source_storage) { { type: :gitaly, name: QA::Runtime::Env.non_cluster_repository_storage } }
let(:destination_storage) { { type: :praefect, name: QA::Runtime::Env.praefect_repository_storage } } let(:destination_storage) { { type: :praefect, name: QA::Runtime::Env.praefect_repository_storage } }

View File

@ -25,7 +25,7 @@ module QA
Runtime::Feature.disable_and_verify('gitaly_distributed_reads') Runtime::Feature.disable_and_verify('gitaly_distributed_reads')
end end
it 'reads from each node', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/979' do it 'reads from each node', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/979' do
pre_read_data = praefect_manager.query_read_distribution pre_read_data = praefect_manager.query_read_distribution
wait_for_reads_to_increase(project, number_of_reads_per_loop, pre_read_data) wait_for_reads_to_increase(project, number_of_reads_per_loop, pre_read_data)
@ -53,7 +53,7 @@ module QA
praefect_manager.wait_for_reliable_connection praefect_manager.wait_for_reliable_connection
end end
it 'does not read from the unhealthy node', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/980' do it 'does not read from the unhealthy node', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/980' do
pre_read_data = praefect_manager.query_read_distribution pre_read_data = praefect_manager.query_read_distribution
read_from_project(project, number_of_reads_per_loop * 10) read_from_project(project, number_of_reads_per_loop * 10)

View File

@ -19,7 +19,7 @@ module QA
praefect_manager.clear_replication_queue praefect_manager.clear_replication_queue
end end
it 'allows replication of different repository after interruption', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/975' do it 'allows replication of different repository after interruption', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/975' do
# We want to fill the replication queue with 10 `in_progress` jobs, # We want to fill the replication queue with 10 `in_progress` jobs,
# while a lock has been acquired, which is when the problem occurred # while a lock has been acquired, which is when the problem occurred
# as reported in https://gitlab.com/gitlab-org/gitaly/-/issues/2801 # as reported in https://gitlab.com/gitlab-org/gitaly/-/issues/2801

View File

@ -12,7 +12,7 @@ module QA
let(:project_name) { "api-basics-#{SecureRandom.hex(8)}" } let(:project_name) { "api-basics-#{SecureRandom.hex(8)}" }
let(:sanitized_project_path) { CGI.escape("#{Runtime::User.username}/#{project_name}") } let(:sanitized_project_path) { CGI.escape("#{Runtime::User.username}/#{project_name}") }
it 'user creates a project with a file and deletes them afterwards', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/420' do it 'user creates a project with a file and deletes them afterwards', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/420' do
create_project_request = Runtime::API::Request.new(@api_client, '/projects') create_project_request = Runtime::API::Request.new(@api_client, '/projects')
post create_project_request.url, path: project_name, name: project_name post create_project_request.url, path: project_name, name: project_name
@ -76,7 +76,7 @@ module QA
SVG SVG
end end
it 'sets no-cache headers as expected', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/421' do it 'sets no-cache headers as expected', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/421' do
create_project_request = Runtime::API::Request.new(@api_client, '/projects') create_project_request = Runtime::API::Request.new(@api_client, '/projects')
post create_project_request.url, path: project_name, name: project_name post create_project_request.url, path: project_name, name: project_name

View File

@ -28,7 +28,7 @@ module QA
end end
end end
it 'download archives of each user project then check they are different', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/427' do it 'download archives of each user project then check they are different', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/427' do
archive_checksums = {} archive_checksums = {}
users.each do |user_key, user_info| users.each do |user_key, user_info|
@ -51,7 +51,6 @@ module QA
project.add_name_uuid = false project.add_name_uuid = false
project.name = project_name project.name = project_name
project.path_with_namespace = "#{user.username}/#{project_name}" project.path_with_namespace = "#{user.username}/#{project_name}"
project.user = user
project.api_client = api_client project.api_client = api_client
end end

View File

@ -59,7 +59,7 @@ module QA
end end
context 'when deleted via API' do context 'when deleted via API' do
it 'is not found', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/931' do it 'is not found', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/931' do
delete(pipeline_data_request.url) delete(pipeline_data_request.url)
expect(JSON.parse(get(pipeline_data_request.url))['message'].downcase).to have_content('404 not found') expect(JSON.parse(get(pipeline_data_request.url))['message'].downcase).to have_content('404 not found')
end end

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Configure', :orchestrated, :mattermost do RSpec.describe 'Configure', :orchestrated, :mattermost do
describe 'Mattermost support' do describe 'Mattermost support' do
it 'user creates a group with a mattermost team', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/665' do it 'user creates a group with a mattermost team', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/665' do
Flow::Login.sign_in Flow::Login.sign_in
Page::Main::Menu.perform(&:go_to_groups) Page::Main::Menu.perform(&:go_to_groups)

View File

@ -43,7 +43,7 @@ module QA
end end
end end
it 'user transfers a project between groups', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/406' do it 'user transfers a project between groups', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/406' do
Page::File::Show.perform(&:go_to_general_settings) Page::File::Show.perform(&:go_to_general_settings)
Page::Project::Settings::Main.perform(&:expand_advanced_settings) Page::Project::Settings::Main.perform(&:expand_advanced_settings)

View File

@ -32,7 +32,7 @@ module QA
group.add_member(developer_user, Resource::Members::AccessLevel::DEVELOPER) group.add_member(developer_user, Resource::Members::AccessLevel::DEVELOPER)
end end
it 'allows using 2FA recovery code once only', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/972' do it 'allows using 2FA recovery code once only', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/972' do
recovery_code = enable_2fa_for_user_and_fetch_recovery_code(developer_user) recovery_code = enable_2fa_for_user_and_fetch_recovery_code(developer_user)
Flow::Login.sign_in(as: developer_user, skip_page_validation: true) Flow::Login.sign_in(as: developer_user, skip_page_validation: true)

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage', :smoke do RSpec.describe 'Manage', :smoke do
describe 'basic user login' do describe 'basic user login' do
it 'user logs in using basic credentials and logs out', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/424' do it 'user logs in using basic credentials and logs out', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/424' do
Flow::Login.sign_in Flow::Login.sign_in
Page::Main::Menu.perform do |menu| Page::Main::Menu.perform do |menu|

View File

@ -34,7 +34,7 @@ module QA
group.add_member(developer_user, Resource::Members::AccessLevel::DEVELOPER) group.add_member(developer_user, Resource::Members::AccessLevel::DEVELOPER)
end end
it 'allows enforcing 2FA via UI and logging in with 2FA', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/898' do it 'allows enforcing 2FA via UI and logging in with 2FA', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/898' do
enforce_two_factor_authentication_on_group(group) enforce_two_factor_authentication_on_group(group)
enable_two_factor_authentication_for_user(developer_user) enable_two_factor_authentication_for_user(developer_user)

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage', :orchestrated, :ldap_no_tls, :ldap_tls do RSpec.describe 'Manage', :orchestrated, :ldap_no_tls, :ldap_tls do
describe 'LDAP login' do describe 'LDAP login' do
it 'user logs into GitLab using LDAP credentials', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/668' do it 'user logs into GitLab using LDAP credentials', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/668' do
Flow::Login.sign_in Flow::Login.sign_in
Page::Main::Menu.perform do |menu| Page::Main::Menu.perform do |menu|

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage', :orchestrated, :mattermost do RSpec.describe 'Manage', :orchestrated, :mattermost do
describe 'Mattermost login' do describe 'Mattermost login' do
it 'user logs into Mattermost using GitLab OAuth', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/666' do it 'user logs into Mattermost using GitLab OAuth', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/666' do
Flow::Login.sign_in Flow::Login.sign_in
Support::Retrier.retry_on_exception do Support::Retrier.retry_on_exception do

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage', :orchestrated, :instance_saml do RSpec.describe 'Manage', :orchestrated, :instance_saml do
describe 'Instance wide SAML SSO' do describe 'Instance wide SAML SSO' do
it 'User logs in to gitlab with SAML SSO', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/671' do it 'User logs in to gitlab with SAML SSO', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/671' do
Runtime::Browser.visit(:gitlab, Page::Main::Login) Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_with_saml) Page::Main::Login.perform(&:sign_in_with_saml)

View File

@ -14,7 +14,7 @@ module QA
end end
RSpec.describe 'Manage', :skip_signup_disabled do RSpec.describe 'Manage', :skip_signup_disabled do
describe 'standard', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/936' do describe 'standard', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/936' do
it_behaves_like 'registration and login' it_behaves_like 'registration and login'
context 'when user account is deleted', :requires_admin do context 'when user account is deleted', :requires_admin do
@ -36,7 +36,7 @@ module QA
end end
end end
it 'allows recreating with same credentials', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/937' do it 'allows recreating with same credentials', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/937' do
expect(Page::Main::Menu.perform(&:signed_in?)).to be_falsy expect(Page::Main::Menu.perform(&:signed_in?)).to be_falsy
Flow::Login.sign_in(as: user, skip_page_validation: true) Flow::Login.sign_in(as: user, skip_page_validation: true)
@ -64,7 +64,7 @@ module QA
end end
RSpec.describe 'Manage', :orchestrated, :ldap_no_tls, :skip_signup_disabled do RSpec.describe 'Manage', :orchestrated, :ldap_no_tls, :skip_signup_disabled do
describe 'while LDAP is enabled', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/935' do describe 'while LDAP is enabled', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/935' do
it_behaves_like 'registration and login' it_behaves_like 'registration and login'
end end
end end

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage' do RSpec.describe 'Manage' do
describe 'Add project member' do describe 'Add project member' do
it 'user adds project member', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/482' do it 'user adds project member', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/482' do
Flow::Login.sign_in Flow::Login.sign_in
user = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) user = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1)

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage', :smoke do RSpec.describe 'Manage', :smoke do
describe 'Project creation' do describe 'Project creation' do
it 'user creates a new project', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/429' do it 'user creates a new project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/429' do
Flow::Login.sign_in Flow::Login.sign_in
created_project = Resource::Project.fabricate_via_browser_ui! do |project| created_project = Resource::Project.fabricate_via_browser_ui! do |project|

View File

@ -41,13 +41,13 @@ module QA
end end
end end
context 'when logged in as a new user', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/465' do context 'when logged in as a new user', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/465' do
it_behaves_like 'loads all images' do it_behaves_like 'loads all images' do
let(:new_user) { @new_user } let(:new_user) { @new_user }
end end
end end
context 'when logged in as a new admin', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/463' do context 'when logged in as a new admin', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/463' do
it_behaves_like 'loads all images' do it_behaves_like 'loads all images' do
let(:new_user) { @new_admin } let(:new_user) { @new_admin }
end end

View File

@ -23,7 +23,7 @@ module QA
Page::Main::Menu.perform(&:sign_out_if_signed_in) Page::Main::Menu.perform(&:sign_out_if_signed_in)
end end
it 'user imports a GitHub repo', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/385' do it 'user imports a GitHub repo', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/385' do
Flow::Login.sign_in Flow::Login.sign_in
imported_project # import the project imported_project # import the project

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Manage' do RSpec.describe 'Manage' do
describe 'Project activity' do describe 'Project activity' do
it 'user creates an event in the activity page upon Git push', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/407' do it 'user creates an event in the activity page upon Git push', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/407' do
Flow::Login.sign_in Flow::Login.sign_in
Resource::Repository::ProjectPush.fabricate! do |push| Resource::Repository::ProjectPush.fabricate! do |push|

View File

@ -19,7 +19,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'is received by a user for project invitation', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/676' do it 'is received by a user for project invitation', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/676' do
Flow::Project.add_member(project: project, username: user.username) Flow::Project.add_member(project: project, username: user.username)
expect(page).to have_content(/@#{user.username}(\n| )?Given access/) expect(page).to have_content(/@#{user.username}(\n| )?Given access/)

View File

@ -27,7 +27,7 @@ module QA
end.visit! end.visit!
end end
it 'mentions a user in a comment', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/452' do it 'mentions a user in a comment', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/452' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
show.select_all_activities_filter show.select_all_activities_filter
show.comment("cc-ing you here @#{user.username}") show.comment("cc-ing you here @#{user.username}")

View File

@ -17,7 +17,7 @@ module QA
end end
end end
it 'collapses and expands reply for comments in an issue', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/434' do it 'collapses and expands reply for comments in an issue', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/434' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
one_reply = "1 reply" one_reply = "1 reply"

View File

@ -9,7 +9,7 @@ module QA
Resource::Issue.fabricate_via_api!.visit! Resource::Issue.fabricate_via_api!.visit!
end end
it 'comments on an issue and edits the comment', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/450' do it 'comments on an issue and edits the comment', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/450' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
first_version_of_comment = 'First version of the comment' first_version_of_comment = 'First version of the comment'
second_version_of_comment = 'Second version of the comment' second_version_of_comment = 'Second version of the comment'

View File

@ -9,7 +9,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'creates an issue', :reliable, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/432' do it 'creates an issue', :reliable, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/432' do
issue = Resource::Issue.fabricate_via_browser_ui! issue = Resource::Issue.fabricate_via_browser_ui!
Page::Project::Menu.perform(&:click_issues) Page::Project::Menu.perform(&:click_issues)
@ -19,7 +19,7 @@ module QA
end end
end end
it 'closes an issue', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/225303', type: :bug }, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/852' do it 'closes an issue', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/225303', type: :bug }, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/852' do
closed_issue.visit! closed_issue.visit!
Page::Project::Issue::Show.perform do |issue_page| Page::Project::Issue::Show.perform do |issue_page|
@ -48,7 +48,7 @@ module QA
Resource::Issue.fabricate_via_api!.visit! Resource::Issue.fabricate_via_api!.visit!
end end
it 'comments on an issue with an attachment', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/393' do it 'comments on an issue with an attachment', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/393' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
show.comment('See attached banana for scale', attachment: file_to_attach) show.comment('See attached banana for scale', attachment: file_to_attach)

View File

@ -24,7 +24,7 @@ module QA
Page::Project::Menu.perform(&:click_issues) Page::Project::Menu.perform(&:click_issues)
end end
it 'successfully exports issues list as CSV', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/764' do it 'successfully exports issues list as CSV', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/764' do
Page::Project::Issue::Index.perform do |index| Page::Project::Issue::Index.perform do |index|
index.click_export_as_csv_button index.click_export_as_csv_button

View File

@ -9,7 +9,7 @@ module QA
Resource::Issue.fabricate_via_api!.visit! Resource::Issue.fabricate_via_api!.visit!
end end
it 'filters comments and activities in an issue', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/425' do it 'filters comments and activities in an issue', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/425' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
my_own_comment = "My own comment" my_own_comment = "My own comment"
made_the_issue_confidential = "made the issue confidential" made_the_issue_confidential = "made the issue confidential"

View File

@ -13,7 +13,7 @@ module QA
end.project.visit! end.project.visit!
end end
it 'shows issue suggestions when creating a new issue', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/412' do it 'shows issue suggestions when creating a new issue', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/412' do
Page::Project::Show.perform(&:go_to_new_issue) Page::Project::Show.perform(&:go_to_new_issue)
Page::Project::Issue::New.perform do |new_page| Page::Project::Issue::New.perform do |new_page|
new_page.fill_title("issue") new_page.fill_title("issue")

View File

@ -14,7 +14,7 @@ module QA
end end
end end
it 'imports issues from Jira', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/896' do it 'imports issues from Jira', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/896' do
set_up_jira_integration set_up_jira_integration
import_jira_issues import_jira_issues

View File

@ -21,7 +21,7 @@ module QA
end.visit! end.visit!
end end
it 'mentions another user in an issue', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/446' do it 'mentions another user in an issue', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/446' do
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|
at_username = "@#{user.username}" at_username = "@#{user.username}"

View File

@ -13,7 +13,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'focuses on issue board', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/820' do it 'focuses on issue board', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/820' do
project.visit! project.visit!
Page::Project::Menu.perform(&:go_to_boards) Page::Project::Menu.perform(&:go_to_boards)

View File

@ -14,7 +14,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'creates a group milestone', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/922' do it 'creates a group milestone', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/922' do
group_milestone = Resource::GroupMilestone.fabricate_via_browser_ui! do |milestone| group_milestone = Resource::GroupMilestone.fabricate_via_browser_ui! do |milestone|
milestone.title = title milestone.title = title
milestone.description = description milestone.description = description

View File

@ -14,7 +14,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'creates a project milestone', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/901' do it 'creates a project milestone', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/901' do
project_milestone = Resource::ProjectMilestone.fabricate_via_browser_ui! do |milestone| project_milestone = Resource::ProjectMilestone.fabricate_via_browser_ui! do |milestone|
milestone.title = title milestone.title = title
milestone.description = description milestone.description = description

View File

@ -25,7 +25,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'relates and unrelates one issue to/from another', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/541' do it 'relates and unrelates one issue to/from another', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/541' do
issue_1.visit! issue_1.visit!
Page::Project::Issue::Show.perform do |show| Page::Project::Issue::Show.perform do |show|

View File

@ -12,7 +12,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'user adds a design and annotates it', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/955' do it 'user adds a design and annotates it', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/955' do
issue.visit! issue.visit!
Page::Project::Issue::Show.perform do |issue| Page::Project::Issue::Show.perform do |issue|

View File

@ -41,7 +41,7 @@ module QA
end end
end end
it 'closes an issue via pushing a commit', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/827' do it 'closes an issue via pushing a commit', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/827' do
issue_key = Vendor::Jira::JiraAPI.perform do |jira_api| issue_key = Vendor::Jira::JiraAPI.perform do |jira_api|
jira_api.create_issue(jira_project_key) jira_api.create_issue(jira_project_key)
end end
@ -51,7 +51,7 @@ module QA
expect_issue_done(issue_key) expect_issue_done(issue_key)
end end
it 'closes an issue via a merge request', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/828' do it 'closes an issue via a merge request', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/828' do
issue_key = Vendor::Jira::JiraAPI.perform do |jira_api| issue_key = Vendor::Jira::JiraAPI.perform do |jira_api|
jira_api.create_issue(jira_project_key) jira_api.create_issue(jira_project_key)
end end

View File

@ -16,7 +16,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'creates a basic merge request', :smoke, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/409' do it 'creates a basic merge request', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/409' do
Resource::MergeRequest.fabricate_via_browser_ui! do |merge_request| Resource::MergeRequest.fabricate_via_browser_ui! do |merge_request|
merge_request.project = project merge_request.project = project
merge_request.title = merge_request_title merge_request.title = merge_request_title
@ -29,7 +29,7 @@ module QA
end end
end end
it 'creates a merge request with a milestone and label', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/514' do it 'creates a merge request with a milestone and label', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/514' do
gitlab_account_username = "@#{Runtime::User.username}" gitlab_account_username = "@#{Runtime::User.username}"
milestone = Resource::ProjectMilestone.fabricate_via_api! do |milestone| milestone = Resource::ProjectMilestone.fabricate_via_api! do |milestone|

View File

@ -9,7 +9,7 @@ module QA
end end
end end
it 'can merge feature branch fork to mainline', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/928' do it 'can merge feature branch fork to mainline', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/928' do
Flow::Login.sign_in Flow::Login.sign_in
merge_request.visit! merge_request.visit!

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/30226', type: :bug } do RSpec.describe 'Create', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/30226', type: :bug } do
describe 'Merge request rebasing' do describe 'Merge request rebasing' do
it 'user rebases source branch of merge request', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/398' do it 'user rebases source branch of merge request', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/398' do
Flow::Login.sign_in Flow::Login.sign_in
project = Resource::Project.fabricate_via_api! do |project| project = Resource::Project.fabricate_via_api! do |project|

View File

@ -31,7 +31,7 @@ module QA
merge_request.visit! merge_request.visit!
end end
it 'user squashes commits while merging', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/418' do it 'user squashes commits while merging', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/418' do
Page::MergeRequest::Show.perform do |merge_request_page| Page::MergeRequest::Show.perform do |merge_request_page|
merge_request_page.retry_on_exception(reload: true) do merge_request_page.retry_on_exception(reload: true) do
expect(merge_request_page).to have_text('to be squashed') expect(merge_request_page).to have_text('to be squashed')

View File

@ -15,7 +15,7 @@ module QA
merge_request.visit! merge_request.visit!
end end
it 'views the merge request email patches', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/416' do it 'views the merge request email patches', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/416' do
Page::MergeRequest::Show.perform(&:view_email_patches) Page::MergeRequest::Show.perform(&:view_email_patches)
expect(page.text).to start_with('From') expect(page.text).to start_with('From')
@ -23,7 +23,7 @@ module QA
expect(page).to have_content("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}") expect(page).to have_content("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}")
end end
it 'views the merge request plain diff', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/417' do it 'views the merge request plain diff', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/417' do
Page::MergeRequest::Show.perform(&:view_plain_diff) Page::MergeRequest::Show.perform(&:view_plain_diff)
expect(page.text).to start_with("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}") expect(page.text).to start_with("diff --git a/#{merge_request.file_name} b/#{merge_request.file_name}")

View File

@ -55,7 +55,7 @@ module QA
project.visit! project.visit!
end end
it 'lists branches correctly after CRUD operations', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/413' do it 'lists branches correctly after CRUD operations', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/413' do
Page::Project::Menu.perform(&:go_to_repository_branches) Page::Project::Menu.perform(&:go_to_repository_branches)
expect(page).to have_content(master_branch) expect(page).to have_content(master_branch)

View File

@ -26,7 +26,7 @@ module QA
project.wait_for_push_new_branch project.wait_for_push_new_branch
end end
it 'user performs a deep clone', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/475' do it 'user performs a deep clone', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/475' do
Git::Repository.perform do |repository| Git::Repository.perform do |repository|
repository.uri = project.repository_http_location.uri repository.uri = project.repository_http_location.uri
repository.use_default_credentials repository.use_default_credentials
@ -37,7 +37,7 @@ module QA
end end
end end
it 'user performs a shallow clone', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/411' do it 'user performs a shallow clone', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/411' do
Git::Repository.perform do |repository| Git::Repository.perform do |repository|
repository.uri = project.repository_http_location.uri repository.uri = project.repository_http_location.uri
repository.use_default_credentials repository.use_default_credentials

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Files management' do describe 'Files management' do
it 'user creates, edits and deletes a file via the Web', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/451' do it 'user creates, edits and deletes a file via the Web', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/451' do
Runtime::Browser.visit(:gitlab, Page::Main::Login) Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_using_credentials) Page::Main::Login.perform(&:sign_in_using_credentials)

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
module QA module QA
RSpec.describe 'Create', :orchestrated, :repository_storage, :requires_admin, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/217002', type: :investigating } do RSpec.describe 'Create', :orchestrated, :repository_storage, :requires_admin do
describe 'Gitaly repository storage' do describe 'Gitaly repository storage' do
let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) } let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) }
let(:parent_project) do let(:parent_project) do
@ -22,7 +22,7 @@ module QA
parent_project.add_member(user) parent_project.add_member(user)
end end
it 'creates a 2nd fork after moving the parent project', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/713' do it 'creates a 2nd fork after moving the parent project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/713' do
Flow::Login.sign_in(as: user) Flow::Login.sign_in(as: user)
fork_project.visit! fork_project.visit!
@ -30,7 +30,7 @@ module QA
parent_project.change_repository_storage(QA::Runtime::Env.additional_repository_storage) parent_project.change_repository_storage(QA::Runtime::Env.additional_repository_storage)
second_fork_project = Resource::Fork.fabricate_via_api! do |fork| second_fork_project = Resource::Fork.fabricate_via_api! do |fork|
fork.name = "second-fork" fork.name = "second-fork-of-#{parent_project.name}"
fork.user = user fork.user = user
fork.upstream = parent_project fork.upstream = parent_project
end.project end.project

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Push over HTTP using Git protocol version 2', :requires_git_protocol_v2 do describe 'Push over HTTP using Git protocol version 2', :requires_git_protocol_v2 do
it 'user pushes to the repository', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/469' do it 'user pushes to the repository', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/469' do
Flow::Login.sign_in Flow::Login.sign_in
# Create a project to push to # Create a project to push to

View File

@ -27,7 +27,7 @@ module QA
Page::Main::Menu.perform(&:sign_out_if_signed_in) Page::Main::Menu.perform(&:sign_out_if_signed_in)
end end
it 'user pushes to the repository', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/386' do it 'user pushes to the repository', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/386' do
project = Resource::Project.fabricate_via_api! do |project| project = Resource::Project.fabricate_via_api! do |project|
project.name = 'git-protocol-project' project.name = 'git-protocol-project'
end end

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Git push over HTTP', :ldap_no_tls, :smoke do describe 'Git push over HTTP', :ldap_no_tls, :smoke do
it 'user using a personal access token pushes code to the repository', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/430' do it 'user using a personal access token pushes code to the repository', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/430' do
Flow::Login.sign_in Flow::Login.sign_in
access_token = Resource::PersonalAccessToken.fabricate!.access_token access_token = Resource::PersonalAccessToken.fabricate!.access_token

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Push mirror a repository over HTTP' do describe 'Push mirror a repository over HTTP' do
it 'configures and syncs a (push) mirrored repository', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/414' do it 'configures and syncs a (push) mirrored repository', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/414' do
Runtime::Browser.visit(:gitlab, Page::Main::Login) Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_using_credentials) Page::Main::Login.perform(&:sign_in_using_credentials)

View File

@ -26,7 +26,7 @@ module QA
set_file_size_limit(nil) set_file_size_limit(nil)
end end
it 'push successful when the file size is under the limit', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/456' do it 'push successful when the file size is under the limit', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/456' do
set_file_size_limit(5) set_file_size_limit(5)
retry_on_fail do retry_on_fail do
@ -36,7 +36,7 @@ module QA
end end
end end
it 'push fails when the file size is above the limit', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/458' do it 'push fails when the file size is above the limit', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/458' do
set_file_size_limit(2) set_file_size_limit(2)
retry_on_fail do retry_on_fail do

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do RSpec.describe 'Create' do
describe 'Git push over HTTP', :ldap_no_tls do describe 'Git push over HTTP', :ldap_no_tls do
it 'user pushes code to the repository', :smoke, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/426' do it 'user pushes code to the repository', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/426' do
Flow::Login.sign_in Flow::Login.sign_in
Resource::Repository::ProjectPush.fabricate! do |push| Resource::Repository::ProjectPush.fabricate! do |push|
@ -18,7 +18,7 @@ module QA
end end
end end
it 'pushes to a project using a specific Praefect repository storage', :smoke, :requires_admin, :requires_praefect, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/742' do it 'pushes to a project using a specific Praefect repository storage', :smoke, :requires_admin, :requires_praefect, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/742' do
Flow::Login.sign_in_as_admin Flow::Login.sign_in_as_admin
project = Resource::Project.fabricate_via_api! do |storage_project| project = Resource::Project.fabricate_via_api! do |storage_project|

View File

@ -26,7 +26,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'pushes code to the repository via SSH', :smoke, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/969' do it 'pushes code to the repository via SSH', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/969' do
Resource::Repository::ProjectPush.fabricate! do |push| Resource::Repository::ProjectPush.fabricate! do |push|
push.project = project push.project = project
push.ssh_key = @key push.ssh_key = @key
@ -41,7 +41,7 @@ module QA
end end
end end
it 'pushes multiple branches and tags together', :smoke, status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/970' do it 'pushes multiple branches and tags together', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/970' do
branches = [] branches = []
tags = [] tags = []
Git::Repository.perform do |repository| Git::Repository.perform do |repository|

View File

@ -18,7 +18,7 @@ module QA
end end
context 'when developers and maintainers are allowed to push to a protected branch' do context 'when developers and maintainers are allowed to push to a protected branch' do
it 'user with push rights successfully pushes to the protected branch', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/447' do it 'user with push rights successfully pushes to the protected branch', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/447' do
create_protected_branch(allowed_to_push: { create_protected_branch(allowed_to_push: {
roles: Resource::ProtectedBranch::Roles::DEVS_AND_MAINTAINERS roles: Resource::ProtectedBranch::Roles::DEVS_AND_MAINTAINERS
}) })
@ -30,7 +30,7 @@ module QA
end end
context 'when developers and maintainers are not allowed to push to a protected branch' do context 'when developers and maintainers are not allowed to push to a protected branch' do
it 'user without push rights fails to push to the protected branch', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/449' do it 'user without push rights fails to push to the protected branch', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/449' do
create_protected_branch(allowed_to_push: { create_protected_branch(allowed_to_push: {
roles: Resource::ProtectedBranch::Roles::NO_ONE roles: Resource::ProtectedBranch::Roles::NO_ONE
}) })

View File

@ -9,7 +9,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'user can add an SSH key', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/929' do it 'user can add an SSH key', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/929' do
key = Resource::SSHKey.fabricate_via_browser_ui! do |resource| key = Resource::SSHKey.fabricate_via_browser_ui! do |resource|
resource.title = key_title resource.title = key_title
end end
@ -20,7 +20,7 @@ module QA
# Note this context ensures that the example it contains is executed after the example above. Be aware of the order of execution if you add new examples in either context. # Note this context ensures that the example it contains is executed after the example above. Be aware of the order of execution if you add new examples in either context.
context 'after adding an ssh key' do context 'after adding an ssh key' do
it 'can delete an ssh key', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/930' do it 'can delete an ssh key', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/930' do
Page::Main::Menu.perform(&:click_settings_link) Page::Main::Menu.perform(&:click_settings_link)
Page::Profile::Menu.perform(&:click_ssh_keys) Page::Profile::Menu.perform(&:click_ssh_keys)
Page::Profile::SSHKeys.perform do |ssh_keys| Page::Profile::SSHKeys.perform do |ssh_keys|

View File

@ -43,7 +43,7 @@ module QA
find('pre').text find('pre').text
end end
it 'user views raw email patch', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/442' do it 'user views raw email patch', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/442' do
view_commit view_commit
Page::Project::Commit::Show.perform(&:select_email_patches) Page::Project::Commit::Show.perform(&:select_email_patches)
@ -53,7 +53,7 @@ module QA
expect(page).to have_content('diff --git a/second b/second') expect(page).to have_content('diff --git a/second b/second')
end end
it 'user views raw commit diff', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/439' do it 'user views raw commit diff', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/439' do
view_commit view_commit
Page::Project::Commit::Show.perform(&:select_plain_diff) Page::Project::Commit::Show.perform(&:select_plain_diff)

View File

@ -36,7 +36,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'clones, pushes, and pulls a snippet over HTTP, edits via UI', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/826' do it 'clones, pushes, and pulls a snippet over HTTP, edits via UI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/826' do
Resource::Repository::Push.fabricate! do |push| Resource::Repository::Push.fabricate! do |push|
push.repository_http_uri = repository_uri_http push.repository_http_uri = repository_uri_http
push.file_name = new_file push.file_name = new_file
@ -65,7 +65,7 @@ module QA
end end
end end
it 'clones, pushes, and pulls a snippet over SSH, deletes via UI', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/825' do it 'clones, pushes, and pulls a snippet over SSH, deletes via UI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/825' do
Resource::Repository::Push.fabricate! do |push| Resource::Repository::Push.fabricate! do |push|
push.repository_ssh_uri = repository_uri_ssh push.repository_ssh_uri = repository_uri_ssh
push.ssh_key = ssh_key push.ssh_key = ssh_key

View File

@ -36,7 +36,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it 'clones, pushes, and pulls a project snippet over HTTP, edits via UI', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/833' do it 'clones, pushes, and pulls a project snippet over HTTP, edits via UI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/833' do
Resource::Repository::Push.fabricate! do |push| Resource::Repository::Push.fabricate! do |push|
push.repository_http_uri = repository_uri_http push.repository_http_uri = repository_uri_http
push.file_name = new_file push.file_name = new_file
@ -65,7 +65,7 @@ module QA
end end
end end
it 'clones, pushes, and pulls a project snippet over SSH, deletes via UI', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/832' do it 'clones, pushes, and pulls a project snippet over SSH, deletes via UI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/832' do
Resource::Repository::Push.fabricate! do |push| Resource::Repository::Push.fabricate! do |push|
push.repository_ssh_uri = repository_uri_ssh push.repository_ssh_uri = repository_uri_ssh
push.ssh_key = ssh_key push.ssh_key = ssh_key

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create', :smoke do RSpec.describe 'Create', :smoke do
describe 'Personal snippet creation' do describe 'Personal snippet creation' do
it 'User creates a personal snippet', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/840' do it 'User creates a personal snippet', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/840' do
Flow::Login.sign_in Flow::Login.sign_in
Page::Main::Menu.perform do |menu| Page::Main::Menu.perform do |menu|

View File

@ -3,7 +3,7 @@
module QA module QA
RSpec.describe 'Create' do # to be converted to a smoke test once proved to be stable RSpec.describe 'Create' do # to be converted to a smoke test once proved to be stable
describe 'Project snippet creation' do describe 'Project snippet creation' do
it 'User creates a project snippet', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/839' do it 'User creates a project snippet', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/839' do
Flow::Login.sign_in Flow::Login.sign_in
Resource::ProjectSnippet.fabricate_via_browser_ui! do |snippet| Resource::ProjectSnippet.fabricate_via_browser_ui! do |snippet|

View File

@ -17,7 +17,7 @@ module QA
Flow::Login.sign_in Flow::Login.sign_in
end end
it "creates the first file in an empty project via Web IDE", status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/847' do it "creates the first file in an empty project via Web IDE", testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/847' do
# In the first iteration, the test opens Web IDE by modifying the URL to address past regressions. # In the first iteration, the test opens Web IDE by modifying the URL to address past regressions.
# Once the Web IDE button is introduced for empty projects, the test will be modified to go through UI. # Once the Web IDE button is introduced for empty projects, the test will be modified to go through UI.
# See https://gitlab.com/gitlab-org/gitlab/-/issues/27915 and https://gitlab.com/gitlab-org/gitlab/-/issues/27535. # See https://gitlab.com/gitlab-org/gitlab/-/issues/27915 and https://gitlab.com/gitlab-org/gitlab/-/issues/27535.

View File

@ -14,7 +14,7 @@ module QA
let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) } let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) }
context 'when no fork is present' do context 'when no fork is present' do
it 'suggests to create a fork when a user clicks Web IDE in the main project', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/959' do it 'suggests to create a fork when a user clicks Web IDE in the main project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/959' do
Flow::Login.sign_in(as: user) Flow::Login.sign_in(as: user)
parent_project.visit! parent_project.visit!
@ -34,7 +34,7 @@ module QA
end end
end end
it 'opens the fork when a user clicks Web IDE in the main project', status_issue: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/960' do it 'opens the fork when a user clicks Web IDE in the main project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/960' do
Flow::Login.sign_in(as: user) Flow::Login.sign_in(as: user)
fork_project.upstream.visit! fork_project.upstream.visit!
Page::Project::Show.perform do |project_page| Page::Project::Show.perform do |project_page|

Some files were not shown because too many files have changed in this diff Show More