Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-09-04 09:11:06 +00:00
parent 4e31f79b57
commit d246f33754
33 changed files with 214 additions and 109 deletions

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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'

View File

@ -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

View File

@ -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
---

View File

@ -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
---

View File

@ -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

View File

@ -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
---

View File

@ -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
---

View File

@ -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.

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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

View File

@ -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
---

View File

@ -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

View File

@ -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 ""

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]);
});
});
});

View File

@ -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);
});
});

View File

@ -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);

View File

@ -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

View File

@ -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,