diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 83875358b9e..39e953c8759 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -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
diff --git a/app/assets/javascripts/admin/abuse_report/components/abuse_report_app.vue b/app/assets/javascripts/admin/abuse_report/components/abuse_report_app.vue
index 3aa1289261d..3c46de7c2be 100644
--- a/app/assets/javascripts/admin/abuse_report/components/abuse_report_app.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/abuse_report_app.vue
@@ -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 {
-
+
-
+
+
+
+
+
+
diff --git a/app/assets/javascripts/admin/abuse_report/components/activity_events_list.vue b/app/assets/javascripts/admin/abuse_report/components/activity_events_list.vue
new file mode 100644
index 00000000000..8c4c1da28b8
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/components/activity_events_list.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+ {{ $options.i18n.activity }}
+
+
+
diff --git a/app/assets/javascripts/admin/abuse_report/components/activity_history_item.vue b/app/assets/javascripts/admin/abuse_report/components/activity_history_item.vue
new file mode 100644
index 00000000000..5962203c382
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/components/activity_history_item.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ {{ reporterName }}
+ {{ report.category }}
+
+
+
+
+
diff --git a/app/assets/javascripts/admin/abuse_report/components/history_items.vue b/app/assets/javascripts/admin/abuse_report/components/history_items.vue
deleted file mode 100644
index 619a8bcfe92..00000000000
--- a/app/assets/javascripts/admin/abuse_report/components/history_items.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
- {{ $options.i18n.activity }}
-
-
-
-
- {{ reporterName }}
- {{ report.category }}
-
-
-
-
-
-
-
diff --git a/config/feature_flags/development/create_embeddings_with_vertex_ai.yml b/config/feature_flags/development/create_embeddings_with_vertex_ai.yml
new file mode 100644
index 00000000000..327961d971e
--- /dev/null
+++ b/config/feature_flags/development/create_embeddings_with_vertex_ai.yml
@@ -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
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 3819f77d508..74505f0f034 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -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'
diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml
index b6158768e53..756298d2e50 100644
--- a/config/sidekiq_queues.yml
+++ b/config/sidekiq_queues.yml
@@ -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
diff --git a/doc/administration/reporting/git_abuse_rate_limit.md b/doc/administration/reporting/git_abuse_rate_limit.md
index 62b969d3d85..7e2c340f20d 100644
--- a/doc/administration/reporting/git_abuse_rate_limit.md
+++ b/doc/administration/reporting/git_abuse_rate_limit.md
@@ -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
---
diff --git a/doc/administration/reporting/ip_addr_restrictions.md b/doc/administration/reporting/ip_addr_restrictions.md
index c01cb9d60ca..2e152b0b176 100644
--- a/doc/administration/reporting/ip_addr_restrictions.md
+++ b/doc/administration/reporting/ip_addr_restrictions.md
@@ -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
---
diff --git a/doc/administration/review_abuse_reports.md b/doc/administration/review_abuse_reports.md
index a87bd289d21..4ff53a4e1b0 100644
--- a/doc/administration/review_abuse_reports.md
+++ b/doc/administration/review_abuse_reports.md
@@ -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
diff --git a/doc/integration/akismet.md b/doc/integration/akismet.md
index 8f0c6cdbe67..94c25a0547b 100644
--- a/doc/integration/akismet.md
+++ b/doc/integration/akismet.md
@@ -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
---
diff --git a/doc/integration/arkose.md b/doc/integration/arkose.md
index cd0b80e5a66..575cf8c4271 100644
--- a/doc/integration/arkose.md
+++ b/doc/integration/arkose.md
@@ -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
---
diff --git a/doc/policy/experiment-beta-support.md b/doc/policy/experiment-beta-support.md
index a327baa3132..a87a72d7910 100644
--- a/doc/policy/experiment-beta-support.md
+++ b/doc/policy/experiment-beta-support.md
@@ -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.
diff --git a/doc/security/email_verification.md b/doc/security/email_verification.md
index da844e3a2eb..7ebdfc32d2e 100644
--- a/doc/security/email_verification.md
+++ b/doc/security/email_verification.md
@@ -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
---
diff --git a/doc/security/identity_verification.md b/doc/security/identity_verification.md
index a4f7baad0e2..b6932d88820 100644
--- a/doc/security/identity_verification.md
+++ b/doc/security/identity_verification.md
@@ -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
---
diff --git a/doc/user/group/moderate_users.md b/doc/user/group/moderate_users.md
index 7e67bb6ddb5..6859125b323 100644
--- a/doc/user/group/moderate_users.md
+++ b/doc/user/group/moderate_users.md
@@ -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
---
diff --git a/doc/user/group/reporting/git_abuse_rate_limit.md b/doc/user/group/reporting/git_abuse_rate_limit.md
index abb967ad8b1..1b14edb04d9 100644
--- a/doc/user/group/reporting/git_abuse_rate_limit.md
+++ b/doc/user/group/reporting/git_abuse_rate_limit.md
@@ -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
---
diff --git a/doc/user/packages/package_registry/index.md b/doc/user/packages/package_registry/index.md
index 223f008d072..267cb46336a 100644
--- a/doc/user/packages/package_registry/index.md
+++ b/doc/user/packages/package_registry/index.md
@@ -45,7 +45,7 @@ For information on how to create and upload a package, view the GitLab documenta
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.
Authentication depends on the package manager being used. For more information, see the docs on the
diff --git a/doc/user/report_abuse.md b/doc/user/report_abuse.md
index bad62825ba5..9e6ad232414 100644
--- a/doc/user/report_abuse.md
+++ b/doc/user/report_abuse.md
@@ -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
---
diff --git a/lib/sidebars/your_work/menus/organizations_menu.rb b/lib/sidebars/your_work/menus/organizations_menu.rb
index a2a6d6083a6..1e3d0297f22 100644
--- a/lib/sidebars/your_work/menus/organizations_menu.rb
+++ b/lib/sidebars/your_work/menus/organizations_menu.rb
@@ -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
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 4732a31a12d..11a08bec8fb 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -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 ""
diff --git a/qa/Gemfile b/qa/Gemfile
index 2d0d73aa711..2ab4a293ffb 100644
--- a/qa/Gemfile
+++ b/qa/Gemfile
@@ -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
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock
index 9c68f6dee54..22078d82161 100644
--- a/qa/Gemfile.lock
+++ b/qa/Gemfile.lock
@@ -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)
diff --git a/qa/gdk/Dockerfile.gdk b/qa/gdk/Dockerfile.gdk
index 22b613e592d..97406a9df6e 100644
--- a/qa/gdk/Dockerfile.gdk
+++ b/qa/gdk/Dockerfile.gdk
@@ -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
diff --git a/qa/qa/page/group/sub_menus/main.rb b/qa/qa/page/group/sub_menus/main.rb
index 951207f5a47..a9f2e11c532 100644
--- a/qa/qa/page/group/sub_menus/main.rb
+++ b/qa/qa/page/group/sub_menus/main.rb
@@ -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
diff --git a/qa/qa/page/project/sub_menus/main.rb b/qa/qa/page/project/sub_menus/main.rb
index b6d1c6e8bcd..a147f28eef0 100644
--- a/qa/qa/page/project/sub_menus/main.rb
+++ b/qa/qa/page/project/sub_menus/main.rb
@@ -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
diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb
index f0c52bd5f7b..939de930df8 100644
--- a/spec/features/invites_spec.rb
+++ b/spec/features/invites_spec.rb
@@ -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
diff --git a/spec/frontend/admin/abuse_report/components/abuse_report_app_spec.js b/spec/frontend/admin/abuse_report/components/abuse_report_app_spec.js
index d704a91b93d..4340699a7ed 100644
--- a/spec/frontend/admin/abuse_report/components/abuse_report_app_spec.js
+++ b/spec/frontend/admin/abuse_report/components/abuse_report_app_spec.js
@@ -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]);
+ });
});
});
diff --git a/spec/frontend/admin/abuse_report/components/activity_events_list_spec.js b/spec/frontend/admin/abuse_report/components/activity_events_list_spec.js
new file mode 100644
index 00000000000..cd1120d2db4
--- /dev/null
+++ b/spec/frontend/admin/abuse_report/components/activity_events_list_spec.js
@@ -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);
+ });
+});
diff --git a/spec/frontend/admin/abuse_report/components/history_items_spec.js b/spec/frontend/admin/abuse_report/components/activity_history_item_spec.js
similarity index 79%
rename from spec/frontend/admin/abuse_report/components/history_items_spec.js
rename to spec/frontend/admin/abuse_report/components/activity_history_item_spec.js
index e8888810095..3f430b0143e 100644
--- a/spec/frontend/admin/abuse_report/components/history_items_spec.js
+++ b/spec/frontend/admin/abuse_report/components/activity_history_item_spec.js
@@ -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);
diff --git a/spec/lib/sidebars/your_work/menus/organizations_menu_spec.rb b/spec/lib/sidebars/your_work/menus/organizations_menu_spec.rb
index 31e576e39fe..304725ce8ca 100644
--- a/spec/lib/sidebars/your_work/menus/organizations_menu_spec.rb
+++ b/spec/lib/sidebars/your_work/menus/organizations_menu_spec.rb
@@ -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
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb
index ba15136f15f..24a795f65e9 100644
--- a/spec/workers/every_sidekiq_worker_spec.rb
+++ b/spec/workers/every_sidekiq_worker_spec.rb
@@ -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,