Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
4e31f79b57
commit
d246f33754
|
|
@ -738,7 +738,7 @@ lib/gitlab/checks/**
|
|||
/doc/ci/test_cases/ @msedlakjakubowski
|
||||
/doc/ci/testing/code_quality.md @rdickenson
|
||||
/doc/development/advanced_search.md @ashrafkhamis
|
||||
/doc/development/ai_features.md @sselhorn
|
||||
/doc/development/ai_features/ @sselhorn
|
||||
/doc/development/application_limits.md @axil
|
||||
/doc/development/audit_event_guide/ @eread
|
||||
/doc/development/auto_devops.md @phillipwells
|
||||
|
|
@ -935,6 +935,7 @@ lib/gitlab/checks/**
|
|||
/doc/user/profile/index.md @jglassman1
|
||||
/doc/user/profile/notifications.md @msedlakjakubowski
|
||||
/doc/user/profile/personal_access_tokens.md @jglassman1
|
||||
/doc/user/profile/service_accounts.md @jglassman1
|
||||
/doc/user/profile/user_passwords.md @jglassman1
|
||||
/doc/user/project/autocomplete_characters.md @aqualls
|
||||
/doc/user/project/badges.md @lciutacu
|
||||
|
|
@ -973,7 +974,7 @@ lib/gitlab/checks/**
|
|||
/doc/user/project/releases/release_evidence.md @eread
|
||||
/doc/user/project/remote_development/ @ashrafkhamis
|
||||
/doc/user/project/repository/ @aqualls
|
||||
/doc/user/project/repository/code_suggestions.md @sselhorn
|
||||
/doc/user/project/repository/code_suggestions/ @sselhorn
|
||||
/doc/user/project/repository/file_finder.md @ashrafkhamis
|
||||
/doc/user/project/repository/managing_large_repositories.md @axil
|
||||
/doc/user/project/repository/web_editor.md @ashrafkhamis
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ import ReportHeader from './report_header.vue';
|
|||
import UserDetails from './user_details.vue';
|
||||
import ReportDetails from './report_details.vue';
|
||||
import ReportedContent from './reported_content.vue';
|
||||
import HistoryItems from './history_items.vue';
|
||||
import ActivityEventsList from './activity_events_list.vue';
|
||||
import ActivityHistoryItem from './activity_history_item.vue';
|
||||
|
||||
const alertDefaults = {
|
||||
visible: false,
|
||||
|
|
@ -21,7 +22,8 @@ export default {
|
|||
UserDetails,
|
||||
ReportDetails,
|
||||
ReportedContent,
|
||||
HistoryItems,
|
||||
ActivityEventsList,
|
||||
ActivityHistoryItem,
|
||||
},
|
||||
mixins: [glFeatureFlagsMixin()],
|
||||
props: {
|
||||
|
|
@ -75,10 +77,24 @@ export default {
|
|||
|
||||
<reported-content :report="abuseReport.report" data-testid="reported-content" />
|
||||
|
||||
<div v-for="report in similarOpenReports" :key="report.id" data-testid="similar-open-reports">
|
||||
<div
|
||||
v-for="report in similarOpenReports"
|
||||
:key="report.id"
|
||||
data-testid="reported-content-similar-open-reports"
|
||||
>
|
||||
<reported-content :report="report" />
|
||||
</div>
|
||||
|
||||
<history-items :report="abuseReport.report" />
|
||||
<activity-events-list>
|
||||
<template #history-items>
|
||||
<activity-history-item :report="abuseReport.report" data-testid="activity" />
|
||||
<activity-history-item
|
||||
v-for="report in similarOpenReports"
|
||||
:key="report.id"
|
||||
:report="report"
|
||||
data-testid="activity-similar-open-reports"
|
||||
/>
|
||||
</template>
|
||||
</activity-events-list>
|
||||
</section>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
<script>
|
||||
import { HISTORY_ITEMS_I18N } from '../constants';
|
||||
|
||||
export default {
|
||||
name: 'ActivityEventsList',
|
||||
i18n: HISTORY_ITEMS_I18N,
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- The styles `issuable-discussion`, `timeline`, `main-notes-list` and `notes` used below
|
||||
are declared in app/assets/stylesheets/pages/notes.scss -->
|
||||
<section class="gl-pt-6 issuable-discussion">
|
||||
<h2 class="gl-font-lg gl-mt-0 gl-mb-2">{{ $options.i18n.activity }}</h2>
|
||||
<ul class="timeline main-notes-list notes">
|
||||
<slot name="history-items"></slot>
|
||||
</ul>
|
||||
</section>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<script>
|
||||
import { GlSprintf } from '@gitlab/ui';
|
||||
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
|
||||
import HistoryItem from '~/vue_shared/components/registry/history_item.vue';
|
||||
import { HISTORY_ITEMS_I18N } from '../constants';
|
||||
|
||||
export default {
|
||||
name: 'ActivityHistoryItem',
|
||||
components: {
|
||||
GlSprintf,
|
||||
TimeAgoTooltip,
|
||||
HistoryItem,
|
||||
},
|
||||
props: {
|
||||
report: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
reporter() {
|
||||
return this.report.reporter;
|
||||
},
|
||||
reporterName() {
|
||||
return this.reporter?.name || this.$options.i18n.deletedReporter;
|
||||
},
|
||||
},
|
||||
i18n: HISTORY_ITEMS_I18N,
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<history-item icon="warning">
|
||||
<div class="gl-display-flex gl-xs-flex-direction-column">
|
||||
<gl-sprintf :message="$options.i18n.reportedByForCategory">
|
||||
<template #name>{{ reporterName }}</template>
|
||||
<template #category>{{ report.category }}</template>
|
||||
</gl-sprintf>
|
||||
<time-ago-tooltip :time="report.reportedAt" class="gl-text-secondary gl-sm-ml-3" />
|
||||
</div>
|
||||
</history-item>
|
||||
</template>
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
<script>
|
||||
import { GlSprintf } from '@gitlab/ui';
|
||||
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
|
||||
import HistoryItem from '~/vue_shared/components/registry/history_item.vue';
|
||||
import { HISTORY_ITEMS_I18N } from '../constants';
|
||||
|
||||
export default {
|
||||
name: 'HistoryItems',
|
||||
components: {
|
||||
GlSprintf,
|
||||
TimeAgoTooltip,
|
||||
HistoryItem,
|
||||
},
|
||||
props: {
|
||||
report: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
reporter() {
|
||||
return this.report.reporter;
|
||||
},
|
||||
reporterName() {
|
||||
return this.reporter?.name || this.$options.i18n.deletedReporter;
|
||||
},
|
||||
},
|
||||
i18n: HISTORY_ITEMS_I18N,
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- The styles `issuable-discussion`, `timeline`, `main-notes-list` and `notes` used below
|
||||
are declared in app/assets/stylesheets/pages/notes.scss -->
|
||||
<section class="gl-pt-6 issuable-discussion">
|
||||
<h2 class="gl-font-lg gl-mt-0 gl-mb-2">{{ $options.i18n.activity }}</h2>
|
||||
<ul class="timeline main-notes-list notes">
|
||||
<history-item icon="warning">
|
||||
<div class="gl-display-flex gl-xs-flex-direction-column">
|
||||
<gl-sprintf :message="$options.i18n.reportedByForCategory">
|
||||
<template #name>{{ reporterName }}</template>
|
||||
<template #category>{{ report.category }}</template>
|
||||
</gl-sprintf>
|
||||
<time-ago-tooltip :time="report.reportedAt" class="gl-text-secondary gl-sm-ml-3" />
|
||||
</div>
|
||||
</history-item>
|
||||
</ul>
|
||||
</section>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: create_embeddings_with_vertex_ai
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129930
|
||||
rollout_issue_url:
|
||||
milestone: '16.4'
|
||||
type: development
|
||||
group: group::duo chat
|
||||
default_enabled: false
|
||||
|
|
@ -795,9 +795,15 @@ Gitlab.ee do
|
|||
Settings.cron_jobs['sync_seat_link_worker'] ||= {}
|
||||
Settings.cron_jobs['sync_seat_link_worker']['cron'] ||= "#{rand(60)} #{rand(3..4)} * * * UTC"
|
||||
Settings.cron_jobs['sync_seat_link_worker']['job_class'] = 'SyncSeatLinkWorker'
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_create_empty_embeddings_records_worker'] ||= {}
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_create_empty_embeddings_records_worker']['cron'] ||= '0 5 * * 1,2,3,4,5'
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_create_empty_embeddings_records_worker']['job_class'] ||= 'Llm::Embedding::GitlabDocumentation::CreateEmptyEmbeddingsRecordsWorker'
|
||||
Settings.cron_jobs['tanuki_bot_recreate_records_worker'] ||= {}
|
||||
Settings.cron_jobs['tanuki_bot_recreate_records_worker']['cron'] ||= '0 5 * * 1,2,3,4,5'
|
||||
Settings.cron_jobs['tanuki_bot_recreate_records_worker']['job_class'] ||= 'Llm::TanukiBot::RecreateRecordsWorker'
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_cleanup_previous_versions_records_worker'] ||= {}
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_cleanup_previous_versions_records_worker']['cron'] ||= '0 0 * * *'
|
||||
Settings.cron_jobs['llm_embedding_gitlab_documentation_cleanup_previous_versions_records_worker']['job_class'] ||= 'Llm::Embedding::GitlabDocumentation::CleanupPreviousVersionsRecordsWorker'
|
||||
Settings.cron_jobs['tanuki_bot_remove_previous_records_worker'] ||= {}
|
||||
Settings.cron_jobs['tanuki_bot_remove_previous_records_worker']['cron'] ||= '0 0 * * *'
|
||||
Settings.cron_jobs['tanuki_bot_remove_previous_records_worker']['job_class'] ||= 'Llm::TanukiBot::RemovePreviousRecordsWorker'
|
||||
|
|
|
|||
|
|
@ -361,6 +361,8 @@
|
|||
- 2
|
||||
- - llm_completion
|
||||
- 1
|
||||
- - llm_embedding_gitlab_documentation_set_embeddings_on_the_record
|
||||
- 1
|
||||
- - llm_tanuki_bot_update
|
||||
- 1
|
||||
- - mail_scheduler
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
type: reference, howto
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ All other features are considered to be Generally Available (GA).
|
|||
## Experiment
|
||||
|
||||
Support is not provided for features listed as "Experimental" or "Alpha" or any similar designation. Issues regarding such features should be opened in the GitLab issue tracker. Teams should release features as GA from the start unless there are strong reasons to release them as Experiment or Beta versions first.
|
||||
All Experimental features must [initiate Production Readiness Review](https://about.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process) and complete the [experiment section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#experiment).
|
||||
|
||||
Experimental features are:
|
||||
|
||||
- Not ready for production use.
|
||||
- No support available.
|
||||
|
|
@ -33,6 +36,9 @@ Support is not provided for features listed as "Experimental" or "Alpha" or any
|
|||
## Beta
|
||||
|
||||
Commercially-reasonable efforts are made to provide limited support for features designated as "Beta," with the expectation that issues require extra time and assistance from development to troubleshoot.
|
||||
All Beta features must complete all sections up to and including the [beta section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#beta) by following the [Production Readiness Review process](https://about.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process).
|
||||
|
||||
Beta features are:
|
||||
|
||||
- May not be ready for production use.
|
||||
- Support on a commercially-reasonable effort basis.
|
||||
|
|
@ -50,7 +56,9 @@ Commercially-reasonable efforts are made to provide limited support for features
|
|||
|
||||
## Generally Available (GA)
|
||||
|
||||
Generally Available features means that they passed the [Production Readiness Review](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md) for GitLab.com, and are:
|
||||
Generally Available features must complete the [Production Readiness Review](https://about.gitlab.com/handbook/engineering/infrastructure/production/readiness) and complete all sections up to and including the [GA section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#general-availability).
|
||||
|
||||
GA features are:
|
||||
|
||||
- Ready for production use at any scale.
|
||||
- Fully documented and supported.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ For information on how to create and upload a package, view the GitLab documenta
|
|||
|
||||
<!--- start_remove The following content will be removed on remove_date: '2023-11-22' -->
|
||||
WARNING:
|
||||
[External authorization](../../admin_area/settings/external_authorization.md) will be enabled by default in GitLab 16.0. External authorization prevents personal access tokens and deploy tokens from accessing container and package registries and affects all users who use these tokens to access the registries. You can disable external authorization if you want to use personal access tokens and deploy tokens with the container or package registries.
|
||||
In GitLab 16.0 and later, [external authorization](../../admin_area/settings/external_authorization.md) prevents personal access tokens and deploy tokens from accessing container and package registries and affects all users who use these tokens to access the registries. You can disable external authorization if you want to use personal access tokens and deploy tokens with the container or package registries.
|
||||
<!--- end_remove -->
|
||||
|
||||
Authentication depends on the package manager being used. For more information, see the docs on the
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Anti-Abuse
|
||||
stage: Govern
|
||||
group: Anti-Abuse
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ module Sidebars
|
|||
|
||||
override :render?
|
||||
def render?
|
||||
Feature.enabled?(:ui_for_organizations) && !!context.current_user
|
||||
!!context.current_user && Feature.enabled?(:ui_for_organizations, context.current_user)
|
||||
end
|
||||
|
||||
override :active_routes
|
||||
|
|
|
|||
|
|
@ -41594,9 +41594,6 @@ msgstr ""
|
|||
msgid "ScanResultPolicy|New attribute"
|
||||
msgstr ""
|
||||
|
||||
msgid "ScanResultPolicy|New severity"
|
||||
msgstr ""
|
||||
|
||||
msgid "ScanResultPolicy|New status"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -41606,9 +41603,6 @@ msgstr ""
|
|||
msgid "ScanResultPolicy|Only 1 age criteria is allowed"
|
||||
msgstr ""
|
||||
|
||||
msgid "ScanResultPolicy|Only 1 severity is allowed"
|
||||
msgstr ""
|
||||
|
||||
msgid "ScanResultPolicy|Only 2 attribute criteria are allowed"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ gem 'nokogiri', '~> 1.15', '>= 1.15.4'
|
|||
|
||||
gem 'deprecation_toolkit', '~> 2.0.3', require: false
|
||||
|
||||
gem 'factory_bot', '~> 6.2.1'
|
||||
gem 'factory_bot', '~> 6.3.0'
|
||||
|
||||
group :development do
|
||||
gem 'pry-byebug', '~> 3.10.1', platform: :mri
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ GEM
|
|||
unf (>= 0.0.5, < 1.0.0)
|
||||
erubi (1.12.0)
|
||||
excon (0.92.4)
|
||||
factory_bot (6.2.1)
|
||||
factory_bot (6.3.0)
|
||||
activesupport (>= 5.0.0)
|
||||
faker (3.2.0)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
|
|
@ -346,7 +346,7 @@ DEPENDENCIES
|
|||
chemlab-library-www-gitlab-com (~> 0.1, >= 0.1.1)
|
||||
confiner (~> 0.4)
|
||||
deprecation_toolkit (~> 2.0.3)
|
||||
factory_bot (~> 6.2.1)
|
||||
factory_bot (~> 6.3.0)
|
||||
faker (~> 3.2)
|
||||
faraday-retry (~> 2.2)
|
||||
fog-core (= 2.1.0)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
ARG BASE_TAG=master
|
||||
|
||||
FROM registry.gitlab.com/gitlab-org/gitlab-development-kit/asdf-bootstrapped-verify:main@sha256:d2e6d3ad2e8a8682a7b908d2107ebb8539462036b3b28ba6a240ec9ab4d74654 as gdk-base
|
||||
FROM registry.gitlab.com/gitlab-org/gitlab-development-kit/asdf-bootstrapped-verify:main@sha256:934d8caa0a91c2bb9c68fe7bce42ca89fd04c580deea351a21820b45fa74413f as gdk-base
|
||||
|
||||
# Allow passwordless /etc/hosts update by gdk user
|
||||
USER root
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ module QA
|
|||
end
|
||||
|
||||
def go_to_group_overview
|
||||
click_element(:nav_item_link, submenu_item: 'Group overview')
|
||||
click_element(:nav_item_link, submenu_item: 'group-overview')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ module QA
|
|||
extend QA::Page::PageConcern
|
||||
|
||||
def click_project
|
||||
click_element(:nav_item_link, submenu_item: 'Project overview')
|
||||
click_element(:nav_item_link, submenu_item: 'project-overview')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
|
|||
|
||||
wait_for_all_requests
|
||||
|
||||
expect(page).to have_selector('.gl-field-success-outline')
|
||||
|
||||
click_button submit_button_text
|
||||
end
|
||||
|
||||
|
|
@ -195,8 +197,7 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
|
|||
context 'when the user sign-up using a different email address' do
|
||||
let(:invite_email) { build_stubbed(:user).email }
|
||||
|
||||
it 'signs up and redirects to the activity page',
|
||||
quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/414971' do
|
||||
it 'signs up and redirects to the activity page' do
|
||||
fill_in_sign_up_form(new_user)
|
||||
fill_in_welcome_form
|
||||
|
||||
|
|
@ -266,8 +267,7 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
|
|||
allow(User).to receive(:allow_unconfirmed_access_for).and_return 2.days
|
||||
end
|
||||
|
||||
it 'signs up and redirects to the group activity page',
|
||||
quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/414971' do
|
||||
it 'signs up and redirects to the group activity page' do
|
||||
fill_in_sign_up_form(new_user)
|
||||
fill_in_welcome_form
|
||||
|
||||
|
|
|
|||
|
|
@ -5,21 +5,33 @@ import ReportHeader from '~/admin/abuse_report/components/report_header.vue';
|
|||
import UserDetails from '~/admin/abuse_report/components/user_details.vue';
|
||||
import ReportDetails from '~/admin/abuse_report/components/report_details.vue';
|
||||
import ReportedContent from '~/admin/abuse_report/components/reported_content.vue';
|
||||
import HistoryItems from '~/admin/abuse_report/components/history_items.vue';
|
||||
import ActivityEventsList from '~/admin/abuse_report/components/activity_events_list.vue';
|
||||
import ActivityHistoryItem from '~/admin/abuse_report/components/activity_history_item.vue';
|
||||
import { SUCCESS_ALERT } from '~/admin/abuse_report/constants';
|
||||
import { mockAbuseReport } from '../mock_data';
|
||||
|
||||
describe('AbuseReportApp', () => {
|
||||
let wrapper;
|
||||
|
||||
const { similarOpenReports } = mockAbuseReport.user;
|
||||
|
||||
const findAlert = () => wrapper.findComponent(GlAlert);
|
||||
const findReportHeader = () => wrapper.findComponent(ReportHeader);
|
||||
const findUserDetails = () => wrapper.findComponent(UserDetails);
|
||||
|
||||
const findReportedContent = () => wrapper.findByTestId('reported-content');
|
||||
const findSimilarOpenReports = () => wrapper.findAllByTestId('similar-open-reports');
|
||||
const findSimilarReportedContent = () =>
|
||||
findSimilarOpenReports().at(0).findComponent(ReportedContent);
|
||||
const findHistoryItems = () => wrapper.findComponent(HistoryItems);
|
||||
const findReportedContentForSimilarReports = () =>
|
||||
wrapper.findAllByTestId('reported-content-similar-open-reports');
|
||||
const firstReportedContentForSimilarReports = () =>
|
||||
findReportedContentForSimilarReports().at(0).findComponent(ReportedContent);
|
||||
|
||||
const findActivityList = () => wrapper.findComponent(ActivityEventsList);
|
||||
const findActivityItem = () => wrapper.findByTestId('activity');
|
||||
const findActivityForSimilarReports = () =>
|
||||
wrapper.findAllByTestId('activity-similar-open-reports');
|
||||
const firstActivityForSimilarReports = () =>
|
||||
findActivityForSimilarReports().at(0).findComponent(ActivityHistoryItem);
|
||||
|
||||
const findReportDetails = () => wrapper.findComponent(ReportDetails);
|
||||
|
||||
const createComponent = (props = {}, provide = {}) => {
|
||||
|
|
@ -70,7 +82,7 @@ describe('AbuseReportApp', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('ReportHeader', () => {
|
||||
describe('Report header', () => {
|
||||
it('renders ReportHeader', () => {
|
||||
expect(findReportHeader().props('user')).toBe(mockAbuseReport.user);
|
||||
expect(findReportHeader().props('report')).toBe(mockAbuseReport.report);
|
||||
|
|
@ -89,7 +101,7 @@ describe('AbuseReportApp', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('UserDetails', () => {
|
||||
describe('User Details', () => {
|
||||
it('renders UserDetails', () => {
|
||||
expect(findUserDetails().props('user')).toBe(mockAbuseReport.user);
|
||||
});
|
||||
|
|
@ -107,6 +119,17 @@ describe('AbuseReportApp', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Reported Content', () => {
|
||||
it('renders ReportedContent', () => {
|
||||
expect(findReportedContent().props('report')).toBe(mockAbuseReport.report);
|
||||
});
|
||||
|
||||
it('renders similar abuse reports', () => {
|
||||
expect(findReportedContentForSimilarReports()).toHaveLength(similarOpenReports.length);
|
||||
expect(firstReportedContentForSimilarReports().props('report')).toBe(similarOpenReports[0]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ReportDetails', () => {
|
||||
describe('when abuseReportLabels feature flag is enabled', () => {
|
||||
it('renders ReportDetails', () => {
|
||||
|
|
@ -125,18 +148,18 @@ describe('AbuseReportApp', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('renders ReportedContent', () => {
|
||||
expect(findReportedContent().props('report')).toBe(mockAbuseReport.report);
|
||||
});
|
||||
describe('Activity', () => {
|
||||
it('renders the activity events list', () => {
|
||||
expect(findActivityList().exists()).toBe(true);
|
||||
});
|
||||
|
||||
it('renders similar abuse reports', () => {
|
||||
const { similarOpenReports } = mockAbuseReport.user;
|
||||
it('renders activity item for abuse report', () => {
|
||||
expect(findActivityItem().props('report')).toBe(mockAbuseReport.report);
|
||||
});
|
||||
|
||||
expect(findSimilarOpenReports()).toHaveLength(similarOpenReports.length);
|
||||
expect(findSimilarReportedContent().props('report')).toBe(similarOpenReports[0]);
|
||||
});
|
||||
|
||||
it('renders HistoryItems', () => {
|
||||
expect(findHistoryItems().props('report')).toBe(mockAbuseReport.report);
|
||||
it('renders activity items for similar abuse reports', () => {
|
||||
expect(findActivityForSimilarReports()).toHaveLength(similarOpenReports.length);
|
||||
expect(firstActivityForSimilarReports().props('report')).toBe(similarOpenReports[0]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
import { shallowMount } from '@vue/test-utils';
|
||||
import ActivityEventsList from '~/admin/abuse_report/components/activity_events_list.vue';
|
||||
|
||||
describe('ActivityEventsList', () => {
|
||||
let wrapper;
|
||||
|
||||
const mockSlotContent = 'Test slot content';
|
||||
|
||||
const findActivityEventsList = () => wrapper.findComponent(ActivityEventsList);
|
||||
|
||||
const createComponent = () => {
|
||||
wrapper = shallowMount(ActivityEventsList, {
|
||||
slots: {
|
||||
'history-items': mockSlotContent,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
createComponent();
|
||||
});
|
||||
|
||||
it('renders activity title', () => {
|
||||
expect(findActivityEventsList().text()).toContain('Activity');
|
||||
});
|
||||
|
||||
it('renders history-items slot', () => {
|
||||
expect(findActivityEventsList().text()).toContain(mockSlotContent);
|
||||
});
|
||||
});
|
||||
|
|
@ -1,13 +1,12 @@
|
|||
import { GlSprintf } from '@gitlab/ui';
|
||||
import { shallowMount } from '@vue/test-utils';
|
||||
import { sprintf } from '~/locale';
|
||||
import HistoryItems from '~/admin/abuse_report/components/history_items.vue';
|
||||
import AcitivityHistoryItem from '~/admin/abuse_report/components/activity_history_item.vue';
|
||||
import HistoryItem from '~/vue_shared/components/registry/history_item.vue';
|
||||
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
|
||||
import { HISTORY_ITEMS_I18N } from '~/admin/abuse_report/constants';
|
||||
import { mockAbuseReport } from '../mock_data';
|
||||
|
||||
describe('HistoryItems', () => {
|
||||
describe('AcitivityHistoryItem', () => {
|
||||
let wrapper;
|
||||
|
||||
const { report } = mockAbuseReport;
|
||||
|
|
@ -16,7 +15,7 @@ describe('HistoryItems', () => {
|
|||
const findTimeAgo = () => wrapper.findComponent(TimeAgoTooltip);
|
||||
|
||||
const createComponent = (props = {}) => {
|
||||
wrapper = shallowMount(HistoryItems, {
|
||||
wrapper = shallowMount(AcitivityHistoryItem, {
|
||||
propsData: {
|
||||
report,
|
||||
...props,
|
||||
|
|
@ -37,7 +36,7 @@ describe('HistoryItems', () => {
|
|||
|
||||
describe('rendering the title', () => {
|
||||
it('renders the reporters name and the category', () => {
|
||||
const title = sprintf(HISTORY_ITEMS_I18N.reportedByForCategory, {
|
||||
const title = sprintf('Reported by %{name} for %{category}.', {
|
||||
name: report.reporter.name,
|
||||
category: report.category,
|
||||
});
|
||||
|
|
@ -50,8 +49,8 @@ describe('HistoryItems', () => {
|
|||
});
|
||||
|
||||
it('renders the `No user found` as the reporters name and the category', () => {
|
||||
const title = sprintf(HISTORY_ITEMS_I18N.reportedByForCategory, {
|
||||
name: HISTORY_ITEMS_I18N.deletedReporter,
|
||||
const title = sprintf('Reported by %{name} for %{category}.', {
|
||||
name: 'No user found',
|
||||
category: report.category,
|
||||
});
|
||||
expect(findHistoryItem().text()).toContain(title);
|
||||
|
|
@ -11,6 +11,10 @@ RSpec.describe Sidebars::YourWork::Menus::OrganizationsMenu, feature_category: :
|
|||
describe '#render?' do
|
||||
context 'when `ui_for_organizations` feature flag is enabled' do
|
||||
context 'when `current_user` is available' do
|
||||
before do
|
||||
stub_feature_flags(ui_for_organizations: [user])
|
||||
end
|
||||
|
||||
it 'returns true' do
|
||||
expect(subject.render?).to eq true
|
||||
end
|
||||
|
|
|
|||
|
|
@ -345,6 +345,8 @@ RSpec.describe 'Every Sidekiq worker', feature_category: :shared do
|
|||
'JiraConnect::SyncProjectWorker' => 3,
|
||||
'LdapGroupSyncWorker' => 3,
|
||||
'Licenses::ResetSubmitLicenseUsageDataBannerWorker' => 13,
|
||||
'Llm::Embedding::GitlabDocumentation::SetEmbeddingsOnTheRecordWorker' => 1,
|
||||
'Llm::Embedding::GitlabDocumentation::CreateEmptyEmbeddingsRecordsWorker' => 3,
|
||||
'Llm::TanukiBot::UpdateWorker' => 1,
|
||||
'Llm::TanukiBot::RecreateRecordsWorker' => 3,
|
||||
'MailScheduler::IssueDueWorker' => 3,
|
||||
|
|
|
|||
Loading…
Reference in New Issue