Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
72026950b2
commit
7de415dd5f
|
|
@ -58,6 +58,12 @@ db:migrate:multi-version-upgrade:
|
|||
- psql --output /dev/null -v "ON_ERROR_STOP=1" -h postgres -U postgres -d gitlabhq_test < gitlabhq_production
|
||||
- bundle exec rake gitlab:db:configure
|
||||
|
||||
# Validate minimum PG version supported by GitLab
|
||||
db:migrate:multi-version-upgrade-pg13:
|
||||
extends:
|
||||
- db:migrate:multi-version-upgrade
|
||||
- .use-pg13
|
||||
|
||||
db:migrate:reset:
|
||||
extends: .db-job-base
|
||||
script:
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import { getContentWrapperHeight } from '~/lib/utils/dom_utils';
|
|||
export default {
|
||||
components: {
|
||||
GlDrawer,
|
||||
ApprovalSummary: () =>
|
||||
import('ee_component/merge_requests/components/reviewers/approval_summary.vue'),
|
||||
},
|
||||
props: {
|
||||
open: {
|
||||
|
|
@ -33,5 +35,8 @@ export default {
|
|||
<template #title>
|
||||
<h4 class="gl-my-0">{{ __('Assign reviewers') }}</h4>
|
||||
</template>
|
||||
<template #header>
|
||||
<approval-summary />
|
||||
</template>
|
||||
</gl-drawer>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ export default {
|
|||
:title="$options.i18n.emptyStateTitle"
|
||||
:description="$options.i18n.emptyStateText"
|
||||
:svg-path="illustrationPath"
|
||||
:svg-height="null"
|
||||
:primary-button-link="newReleasePath"
|
||||
:primary-button-text="$options.i18n.newRelease"
|
||||
:secondary-button-link="documentationPath"
|
||||
|
|
|
|||
|
|
@ -59,18 +59,6 @@ export default {
|
|||
{{ reviewerTitle }}
|
||||
<gl-loading-icon v-if="loading" size="sm" inline class="align-bottom" />
|
||||
<template v-if="editable">
|
||||
<gl-button
|
||||
v-if="glFeatures.reviewerAssignDrawer"
|
||||
v-tooltip.hover
|
||||
:title="__('Add or edit reviewers')"
|
||||
category="tertiary"
|
||||
size="small"
|
||||
class="gl-float-right gl-ml-2"
|
||||
data-testid="drawer-toggle"
|
||||
@click="toggleDrawerOpen"
|
||||
>
|
||||
{{ __('Edit') }}
|
||||
</gl-button>
|
||||
<gl-button
|
||||
v-tooltip.hover
|
||||
:title="__('Quick assign')"
|
||||
|
|
@ -84,6 +72,18 @@ export default {
|
|||
:icon="glFeatures.reviewerAssignDrawer ? 'plus' : ''"
|
||||
><template v-if="!glFeatures.reviewerAssignDrawer">{{ __('Edit') }}</template></gl-button
|
||||
>
|
||||
<gl-button
|
||||
v-if="glFeatures.reviewerAssignDrawer"
|
||||
v-tooltip.hover
|
||||
:title="__('Add or edit reviewers')"
|
||||
category="tertiary"
|
||||
size="small"
|
||||
class="gl-float-right gl-ml-2"
|
||||
data-testid="drawer-toggle"
|
||||
@click="toggleDrawerOpen(!drawerOpen)"
|
||||
>
|
||||
{{ __('Edit') }}
|
||||
</gl-button>
|
||||
</template>
|
||||
<mounting-portal v-if="glFeatures.reviewerAssignDrawer" mount-to="#js-reviewer-drawer-portal">
|
||||
<reviewer-drawer :open="drawerOpen" @close="toggleDrawerOpen(false)" />
|
||||
|
|
|
|||
|
|
@ -187,12 +187,18 @@ function mountSidebarReviewers(mediator) {
|
|||
return;
|
||||
}
|
||||
|
||||
const { iid, fullPath } = getSidebarOptions();
|
||||
const { id, iid, fullPath, multipleApprovalRulesAvailable = false } = getSidebarOptions();
|
||||
// eslint-disable-next-line no-new
|
||||
new Vue({
|
||||
el,
|
||||
name: 'SidebarReviewersRoot',
|
||||
apolloProvider,
|
||||
provide: {
|
||||
issuableIid: String(iid),
|
||||
issuableId: String(id),
|
||||
projectPath: fullPath,
|
||||
multipleApprovalRulesAvailable: parseBoolean(multipleApprovalRulesAvailable),
|
||||
},
|
||||
render: (createElement) =>
|
||||
createElement(SidebarReviewers, {
|
||||
props: {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ module ProjectSearchArguments
|
|||
argument :topics, type: [GraphQL::Types::String],
|
||||
required: false,
|
||||
description: 'Filter projects by topics.'
|
||||
|
||||
argument :personal, GraphQL::Types::Boolean,
|
||||
required: false,
|
||||
description: 'Return only personal projects.'
|
||||
end
|
||||
|
||||
private
|
||||
|
|
@ -29,7 +33,8 @@ module ProjectSearchArguments
|
|||
search: params[:search],
|
||||
search_namespaces: params[:search_namespaces],
|
||||
sort: params[:sort],
|
||||
topic: params[:topics]
|
||||
topic: params[:topics],
|
||||
personal: params[:personal]
|
||||
}.compact
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ module MarkupHelper
|
|||
tags: tags,
|
||||
attributes: Rails::Html::WhiteListSanitizer.allowed_attributes +
|
||||
%w[
|
||||
style data-src data-name data-unicode-version data-html
|
||||
style data-src data-name data-unicode-version data-html data-fallback-src
|
||||
data-reference-type data-project-path data-iid data-mr-title
|
||||
data-user
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ReleasesHelper
|
||||
IMAGE_PATH = 'illustrations/releases.svg'
|
||||
IMAGE_PATH = 'illustrations/rocket-launch-md.svg'
|
||||
DOCUMENTATION_PATH = 'user/project/releases/index'
|
||||
|
||||
# This needs to be kept in sync with the constant in
|
||||
|
|
|
|||
|
|
@ -11,3 +11,5 @@ class MergeRequestSidebarBasicEntity < IssuableSidebarBasicEntity
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
MergeRequestSidebarBasicEntity.prepend_mod_with('MergeRequestSidebarBasicEntity')
|
||||
|
|
|
|||
|
|
@ -10,3 +10,6 @@ test:
|
|||
url: 'http://localhost:8123'
|
||||
username: clickhouse
|
||||
password: clickhouse
|
||||
variables:
|
||||
# execute mutations (updates, deletes) synchronously to avoid flaky tests
|
||||
mutations_sync: 1
|
||||
|
|
|
|||
|
|
@ -4,7 +4,17 @@ classes:
|
|||
- Board
|
||||
feature_categories:
|
||||
- team_planning
|
||||
description: Configuration information for issue boards, including default scope and visibility of open and closed lists
|
||||
description: Configuration information for issue boards, including default scope and
|
||||
visibility of open and closed lists
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/611dab2e522e5e59cf09cd459a31686e65616863
|
||||
milestone: '8.11'
|
||||
gitlab_schema: gitlab_main
|
||||
gitlab_schema: gitlab_main_cell
|
||||
allow_cross_joins:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_transactions:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_foreign_keys:
|
||||
- gitlab_main_clusterwide
|
||||
sharding_key:
|
||||
group_id: namespaces
|
||||
project_id: projects
|
||||
|
|
|
|||
|
|
@ -4,7 +4,17 @@ classes:
|
|||
- Milestone
|
||||
feature_categories:
|
||||
- team_planning
|
||||
description: Information related to milestones, used by team planning features to timebox work
|
||||
description: Information related to milestones, used by team planning features to
|
||||
timebox work
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/23d950855d6d2524d00b1f0618c008e2529f06a4
|
||||
milestone: "<6.0"
|
||||
gitlab_schema: gitlab_main
|
||||
gitlab_schema: gitlab_main_cell
|
||||
allow_cross_joins:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_transactions:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_foreign_keys:
|
||||
- gitlab_main_clusterwide
|
||||
sharding_key:
|
||||
project_id: projects
|
||||
group_id: namespaces
|
||||
|
|
|
|||
|
|
@ -4,7 +4,16 @@ classes:
|
|||
- Iteration
|
||||
feature_categories:
|
||||
- team_planning
|
||||
description: Also called iterations, timeboxes to which issues can be assigned. Used to plan and track work.
|
||||
description: Also called iterations, timeboxes to which issues can be assigned. Used
|
||||
to plan and track work.
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30125
|
||||
milestone: '13.0'
|
||||
gitlab_schema: gitlab_main
|
||||
gitlab_schema: gitlab_main_cell
|
||||
allow_cross_joins:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_transactions:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_foreign_keys:
|
||||
- gitlab_main_clusterwide
|
||||
sharding_key:
|
||||
group_id: namespaces
|
||||
|
|
|
|||
|
|
@ -4,7 +4,17 @@ classes:
|
|||
- Todo
|
||||
feature_categories:
|
||||
- team_planning
|
||||
description: An action required or notification of action taken for a user on a target object, generated by various actions within the GitLab application
|
||||
description: An action required or notification of action taken for a user on a target
|
||||
object, generated by various actions within the GitLab application
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/3d52e139b13ad077286f2f9f46b7e98f43ad9564
|
||||
milestone: '8.5'
|
||||
gitlab_schema: gitlab_main
|
||||
gitlab_schema: gitlab_main_cell
|
||||
allow_cross_joins:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_transactions:
|
||||
- gitlab_main_clusterwide
|
||||
allow_cross_foreign_keys:
|
||||
- gitlab_main_clusterwide
|
||||
sharding_key:
|
||||
project_id: projects
|
||||
group_id: namespaces
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ValidateCheckNullConstraintForVulnerabilityReadsTraversalIds < Gitlab::Database::Migration[2.2]
|
||||
milestone '16.11'
|
||||
|
||||
def up
|
||||
validate_not_null_constraint :vulnerability_reads, :traversal_ids
|
||||
end
|
||||
|
||||
def down
|
||||
# no-op
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
6224ead5a2eeafdd064a4de7e2946cefba86cbb03a099e4d047960f7361e5c2d
|
||||
|
|
@ -17595,7 +17595,8 @@ CREATE TABLE vulnerability_reads (
|
|||
archived boolean DEFAULT false NOT NULL,
|
||||
CONSTRAINT check_380451bdbe CHECK ((char_length(location_image) <= 2048)),
|
||||
CONSTRAINT check_4b1a1bf5ea CHECK ((has_merge_request IS NOT NULL)),
|
||||
CONSTRAINT check_a105eb825a CHECK ((char_length(cluster_agent_id) <= 10))
|
||||
CONSTRAINT check_a105eb825a CHECK ((char_length(cluster_agent_id) <= 10)),
|
||||
CONSTRAINT check_f5ba7c2496 CHECK ((traversal_ids IS NOT NULL))
|
||||
);
|
||||
|
||||
CREATE SEQUENCE vulnerability_reads_id_seq
|
||||
|
|
@ -20705,9 +20706,6 @@ ALTER TABLE sprints
|
|||
ALTER TABLE web_hook_logs
|
||||
ADD CONSTRAINT check_df72cb58f5 CHECK ((char_length(url_hash) <= 44)) NOT VALID;
|
||||
|
||||
ALTER TABLE vulnerability_reads
|
||||
ADD CONSTRAINT check_f5ba7c2496 CHECK ((traversal_ids IS NOT NULL)) NOT VALID;
|
||||
|
||||
ALTER TABLE projects
|
||||
ADD CONSTRAINT check_fa75869cb1 CHECK ((project_namespace_id IS NOT NULL)) NOT VALID;
|
||||
|
||||
|
|
|
|||
|
|
@ -769,6 +769,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="queryprojectsfullpaths"></a>`fullPaths` | [`[String!]`](#string) | Filter projects by full paths. You cannot provide more than 50 full paths. |
|
||||
| <a id="queryprojectsids"></a>`ids` | [`[ID!]`](#id) | Filter projects by IDs. |
|
||||
| <a id="queryprojectsmembership"></a>`membership` | [`Boolean`](#boolean) | Return only projects that the current user is a member of. |
|
||||
| <a id="queryprojectspersonal"></a>`personal` | [`Boolean`](#boolean) | Return only personal projects. |
|
||||
| <a id="queryprojectssearch"></a>`search` | [`String`](#string) | Search query, which can be for the project name, a path, or a description. |
|
||||
| <a id="queryprojectssearchnamespaces"></a>`searchNamespaces` | [`Boolean`](#boolean) | Include namespace in project search. |
|
||||
| <a id="queryprojectssort"></a>`sort` | [`String`](#string) | Sort order of results. Format: `<field_name>_<sort_direction>`, for example: `id_desc` or `name_asc`. |
|
||||
|
|
@ -16833,6 +16834,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="cirunnerprojectsmembership"></a>`membership` | [`Boolean`](#boolean) | Return only projects that the current user is a member of. |
|
||||
| <a id="cirunnerprojectspersonal"></a>`personal` | [`Boolean`](#boolean) | Return only personal projects. |
|
||||
| <a id="cirunnerprojectssearch"></a>`search` | [`String`](#string) | Search query, which can be for the project name, a path, or a description. |
|
||||
| <a id="cirunnerprojectssearchnamespaces"></a>`searchNamespaces` | [`Boolean`](#boolean) | Include namespace in project search. |
|
||||
| <a id="cirunnerprojectssort"></a>`sort` **{warning-solid}** | [`String`](#string) | **Deprecated** in GitLab 15.4. Default sort order will change in GitLab 17.0. Specify `"id_asc"` if you require the query results to be ordered by ascending IDs. |
|
||||
|
|
@ -24721,6 +24723,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="organizationprojectsfullpaths"></a>`fullPaths` | [`[String!]`](#string) | Filter projects by full paths. You cannot provide more than 50 full paths. |
|
||||
| <a id="organizationprojectsids"></a>`ids` | [`[ID!]`](#id) | Filter projects by IDs. |
|
||||
| <a id="organizationprojectsmembership"></a>`membership` | [`Boolean`](#boolean) | Return only projects that the current user is a member of. |
|
||||
| <a id="organizationprojectspersonal"></a>`personal` | [`Boolean`](#boolean) | Return only personal projects. |
|
||||
| <a id="organizationprojectssearch"></a>`search` | [`String`](#string) | Search query, which can be for the project name, a path, or a description. |
|
||||
| <a id="organizationprojectssearchnamespaces"></a>`searchNamespaces` | [`Boolean`](#boolean) | Include namespace in project search. |
|
||||
| <a id="organizationprojectssort"></a>`sort` | [`String`](#string) | Sort order of results. Format: `<field_name>_<sort_direction>`, for example: `id_desc` or `name_asc`. |
|
||||
|
|
|
|||
|
|
@ -405,7 +405,7 @@ You can use tags to run different jobs on different platforms. For
|
|||
example, if you have an OS X runner with tag `osx` and a Windows runner with tag
|
||||
`windows`, you can run a job on each platform.
|
||||
|
||||
Update the `tags` field in the `config.toml`:
|
||||
Update the `tags` field in the `.gitlab-ci.yml`:
|
||||
|
||||
```yaml
|
||||
windows job:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ you can let us know in the [feedback issue](https://gitlab.com/gitlab-org/gitlab
|
|||
|
||||
For the new runner registration workflow, you:
|
||||
|
||||
1. [Create a runner](runners_scope.md) directly in the GitLab UI.
|
||||
1. [Create a runner](runners_scope.md) directly in the GitLab UI or [programmatically](#creating-runners-programmatically).
|
||||
1. Receive a runner authentication token.
|
||||
1. Use the runner authentication token instead of the registration token when you register
|
||||
a runner with this configuration. Runner managers registered in multiple hosts appear
|
||||
|
|
|
|||
|
|
@ -387,7 +387,7 @@ We return fallback values in these cases:
|
|||
|
||||
## Monitoring
|
||||
|
||||
Service Ping reporting process state is monitored with [internal SiSense dashboard](https://app.periscopedata.com/app/gitlab/968489/Product-Intelligence---Service-Ping-Health).
|
||||
Service Ping reporting process state is monitored with [Tableau dashboard](https://10az.online.tableau.com/#/site/gitlab/workbooks/2327447/views).
|
||||
|
||||
## Related topics
|
||||
|
||||
|
|
|
|||
|
|
@ -126,15 +126,13 @@ GitLab has several features which can help you manage the number of users:
|
|||
option.
|
||||
- Enable `block_auto_created_users` for new sign-ups via [LDAP](../../administration/auth/ldap/index.md#basic-configuration-settings) or [OmniAuth](../../integration/omniauth.md#configure-common-settings).
|
||||
- Enable the [User cap](../../administration/settings/sign_up_restrictions.md#user-cap)
|
||||
option. **Available in GitLab 13.7 and later**.
|
||||
option.
|
||||
- [Disable new sign-ups](../../administration/settings/sign_up_restrictions.md), and instead manage new
|
||||
users manually.
|
||||
- View a breakdown of users by role in the [Users statistics](../../administration/admin_area.md#users-statistics) page.
|
||||
|
||||
## Subscription data synchronization
|
||||
|
||||
> - Introduced in GitLab 14.1.
|
||||
|
||||
Subscription data can be automatically synchronized between your self-managed instance and GitLab.
|
||||
To enable subscription data synchronization you must have:
|
||||
|
||||
|
|
@ -255,8 +253,6 @@ It also displays the following information:
|
|||
|
||||
## Export your license usage
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66826) in GitLab 14.2.
|
||||
|
||||
If you are an administrator, you can export your license usage into a CSV:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin Area**.
|
||||
|
|
|
|||
|
|
@ -10,6 +10,12 @@ let wrapper;
|
|||
function createComponent(propsData = {}) {
|
||||
wrapper = shallowMount(ReviewerDrawer, {
|
||||
propsData,
|
||||
provide: {
|
||||
projectPath: 'gitlab-org/gitlab',
|
||||
issuableId: '1',
|
||||
issuableIid: '1',
|
||||
multipleApprovalRulesAvailable: false,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@ describe('ReviewerTitle component', () => {
|
|||
...props,
|
||||
},
|
||||
provide: {
|
||||
projectPath: 'gitlab-org/gitlab',
|
||||
issuableId: '1',
|
||||
issuableIid: '1',
|
||||
multipleApprovalRulesAvailable: false,
|
||||
glFeatures: {
|
||||
reviewerAssignDrawer,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
describe '#resolve' do
|
||||
subject { resolve(described_class, obj: nil, args: filters, ctx: { current_user: current_user }).items }
|
||||
|
||||
let_it_be(:user) { create(:user, :with_namespace) }
|
||||
let_it_be(:group) { create(:group, name: 'public-group') }
|
||||
let_it_be(:private_group) { create(:group, name: 'private-group') }
|
||||
let_it_be(:project) { create(:project, :public, topic_list: %w[ruby javascript]) }
|
||||
|
|
@ -16,8 +17,7 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
let_it_be(:private_project) { create(:project, :private) }
|
||||
let_it_be(:other_private_project) { create(:project, :private) }
|
||||
let_it_be(:private_group_project) { create(:project, :private, group: private_group) }
|
||||
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:private_personal_project) { create(:project, :private, namespace: user.namespace) }
|
||||
|
||||
let(:filters) { {} }
|
||||
|
||||
|
|
@ -74,16 +74,26 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
is_expected.to contain_exactly(project)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when personal filter is provided' do
|
||||
let(:filters) { { personal: true } }
|
||||
|
||||
it 'returns all public projects' do
|
||||
is_expected.to contain_exactly(project, other_project, group_project)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user is logged in' do
|
||||
let(:current_user) { user }
|
||||
let(:visible_projecs) { [project, other_project, group_project, private_project, private_group_project] }
|
||||
let(:visible_projects) do
|
||||
[project, other_project, group_project, private_project, private_group_project, private_personal_project]
|
||||
end
|
||||
|
||||
context 'when no filters are applied' do
|
||||
it 'returns all visible projects for the user' do
|
||||
is_expected.to contain_exactly(project, other_project, group_project, private_project, private_group_project)
|
||||
is_expected.to match_array(visible_projects)
|
||||
end
|
||||
|
||||
context 'when search filter is provided' do
|
||||
|
|
@ -98,7 +108,7 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
let(:filters) { { membership: true } }
|
||||
|
||||
it 'returns projects that user is member of' do
|
||||
is_expected.to contain_exactly(project, private_project, private_group_project)
|
||||
is_expected.to contain_exactly(project, private_project, private_group_project, private_personal_project)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -142,7 +152,7 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
|
||||
context 'when no sort is provided' do
|
||||
it 'returns projects in descending order by id' do
|
||||
is_expected.to match_array((visible_projecs + named_projects).sort_by { |p| p[:id] }.reverse)
|
||||
is_expected.to match_array((visible_projects + named_projects).sort_by { |p| p[:id] }.reverse)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -154,6 +164,14 @@ RSpec.describe Resolvers::ProjectsResolver, feature_category: :source_code_manag
|
|||
is_expected.to contain_exactly(project)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when personal filter is provided' do
|
||||
let(:filters) { { personal: true } }
|
||||
|
||||
it 'returns matching project' do
|
||||
is_expected.to contain_exactly(private_personal_project)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -491,6 +491,19 @@ RSpec.describe MarkupHelper, feature_category: :team_planning do
|
|||
expect(text).not_to match('<a')
|
||||
end
|
||||
|
||||
context 'custom emoji' do
|
||||
it 'includes fallback-src data attribute' do
|
||||
group = create(:group)
|
||||
project = create(:project, :repository, group: group)
|
||||
custom_emoji = create(:custom_emoji, group: group)
|
||||
|
||||
object = create_object(":#{custom_emoji.name}:", project: project)
|
||||
expected = "<p><gl-emoji title=\"#{custom_emoji.name}\" data-name=\"#{custom_emoji.name}\" data-fallback-src=\"#{custom_emoji.url}\" data-unicode-version=\"custom\"></gl-emoji></p>"
|
||||
|
||||
expect(helper.first_line_in_markdown(object, attribute, 150, project: project)).to eq(expected)
|
||||
end
|
||||
end
|
||||
|
||||
context 'labels formatting' do
|
||||
let(:label_title) { 'this should be ~label_1' }
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ require 'spec_helper'
|
|||
RSpec.describe ReleasesHelper do
|
||||
describe '#illustration' do
|
||||
it 'returns the correct image path' do
|
||||
expect(helper.illustration).to match(%r{illustrations/releases-(\w+)\.svg})
|
||||
expect(helper.illustration).to match(%r{illustrations/rocket-launch-md-(\w+)\.svg})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -23,16 +23,18 @@ RSpec.describe 'new tables missing sharding_key', feature_category: :cell do
|
|||
let(:allowed_to_be_missing_not_null) do
|
||||
[
|
||||
*tables_with_alternative_not_null_constraint,
|
||||
'internal_ids.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/451900
|
||||
'internal_ids.namespace_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/451900
|
||||
'labels.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/434356
|
||||
'labels.group_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/434356
|
||||
*['boards.project_id', 'boards.group_id'],
|
||||
*['internal_ids.project_id', 'internal_ids.namespace_id'], # https://gitlab.com/gitlab-org/gitlab/-/issues/451900
|
||||
*['labels.project_id', 'labels.group_id'], # https://gitlab.com/gitlab-org/gitlab/-/issues/434356
|
||||
'member_roles.namespace_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/444161
|
||||
*['milestones.project_id', 'milestones.group_id'],
|
||||
'pages_domains.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/442178,
|
||||
'path_locks.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/444643
|
||||
'remote_mirrors.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/444643
|
||||
'sprints.group_id',
|
||||
'subscription_add_on_purchases.namespace_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/444338
|
||||
'temp_notes_backup.project_id' # https://gitlab.com/gitlab-org/gitlab/-/issues/443667'
|
||||
'temp_notes_backup.project_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/443667'
|
||||
*['todos.project_id', 'todos.group_id']
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue