Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-07-02 00:14:23 +00:00
parent a49e906b6d
commit b608034c83
15 changed files with 305 additions and 132 deletions

View File

@ -8,7 +8,7 @@ module GroupTree
def render_group_tree(groups)
groups = groups.sort_by_attribute(@sort = safe_params[:sort])
groups = if safe_params[:filter].present?
groups = if search_descendants?
filtered_groups_with_ancestors(groups)
elsif safe_params[:parent_id].present?
groups.where(parent_id: safe_params[:parent_id]).page(safe_params[:page])
@ -24,8 +24,12 @@ module GroupTree
format.json do
serializer = GroupChildSerializer.new(current_user: current_user)
.with_pagination(request, response)
serializer.expand_hierarchy if safe_params[:filter].present?
render json: serializer.represent(@groups)
serializer.expand_hierarchy if search_descendants?
render json: serializer.represent(@groups, {
upto_preloaded_ancestors_only: inactive?
})
end
end
# rubocop:enable Gitlab/ModuleWithInstanceVariables
@ -44,10 +48,20 @@ module GroupTree
#
# Pagination needs to be applied before loading the ancestors to
# make sure ancestors are not cut off by pagination.
Group.where(id: filtered_groups.select(:id)).self_and_ancestors
ancestors = Group.where(id: filtered_groups.select(:id)).self_and_ancestors
ancestors = ancestors.self_or_ancestors_inactive if inactive?
ancestors
end
# rubocop: enable CodeReuse/ActiveRecord
def inactive?
safe_params[:active] == false
end
def search_descendants?
safe_params[:filter].present? || inactive?
end
def safe_params
params.merge(
active: Gitlab::Utils.to_boolean(params[:active]),

View File

@ -10,7 +10,7 @@ class Dashboard::GroupsController < Dashboard::ApplicationController
urgency :low, [:index]
def index
groups = GroupsFinder.new(current_user, all_available: false).execute
groups = GroupsFinder.new(current_user, all_available: false, active: safe_params[:active]).execute
render_group_tree(groups)
end
end

View File

@ -9,6 +9,6 @@ class Explore::GroupsController < Explore::ApplicationController
MAX_QUERY_SIZE = 10_000
def index
render_group_tree GroupsFinder.new(current_user).execute.limit(MAX_QUERY_SIZE)
render_group_tree GroupsFinder.new(current_user, active: safe_params[:active]).execute.limit(MAX_QUERY_SIZE)
end
end

View File

@ -2238,6 +2238,7 @@ Input type: `AiDuoWorkflowCreateInput`
| <a id="mutationaiduoworkflowcreateagentprivileges"></a>`agentPrivileges` | [`[Int!]`](#int) | Actions the agent is allowed to perform. |
| <a id="mutationaiduoworkflowcreateallowagenttorequestuser"></a>`allowAgentToRequestUser` | [`Boolean`](#boolean) | When enabled, Duo Workflow may stop to ask the user questions before proceeding. |
| <a id="mutationaiduoworkflowcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationaiduoworkflowcreateenvironment"></a>`environment` | [`WorkflowEnvironment`](#workflowenvironment) | Environment for the workflow. |
| <a id="mutationaiduoworkflowcreategoal"></a>`goal` | [`String`](#string) | Goal of the workflow. |
| <a id="mutationaiduoworkflowcreatepreapprovedagentprivileges"></a>`preApprovedAgentPrivileges` | [`[Int!]`](#int) | Actions the agent can perform without asking for approval. |
| <a id="mutationaiduoworkflowcreateprojectid"></a>`projectId` | [`ProjectID`](#projectid) | Global ID of the project the user is acting on. |

View File

@ -88,7 +88,7 @@ To find a domain expert:
- In the Merge Request approvals widget, select [View eligible approvers](../user/project/merge_requests/approvals/rules.md#eligible-approvers).
This widget shows recommended and required approvals per area of the codebase.
These rules are defined in [Code Owners](../user/project/merge_requests/approvals/rules.md#code-owners-as-eligible-approvers).
These rules are defined in [Code Owners](../user/project/merge_requests/approvals/rules.md#code-owners-as-approvers).
- View the list of team members who work in the [stage or group](https://handbook.gitlab.com/handbook/product/categories/#devops-stages) related to the merge request.
- View team members' domain expertise on the [engineering projects](https://handbook.gitlab.com/handbook/engineering/projects/) page or on the [GitLab team page](https://about.gitlab.com/company/team/). Domains are self-identified, so use your judgment to map the changes on your merge request to a domain.
- Look for team members who have contributed to the files in the merge request. View the logs by running `git log <file>`.

View File

@ -67,7 +67,7 @@ the tiers are no longer mentioned in GitLab documentation:
- [Multiple assignees](../user/project/merge_requests/_index.md#assign-a-user-to-a-merge-request)
- [Approval rule information for reviewers](../user/project/merge_requests/reviews/_index.md#request-a-review)
- [Required Approvals](../user/project/merge_requests/approvals/_index.md#required-approvals)
- [Code Owners as eligible approvers](../user/project/merge_requests/approvals/rules.md#code-owners-as-eligible-approvers)
- [Code Owners as eligible approvers](../user/project/merge_requests/approvals/rules.md#code-owners-as-approvers)
- [Approval rules](../user/project/merge_requests/approvals/rules.md) features
- [Restricting push and merge access to certain users](../user/project/repository/branches/protected.md)
- Metrics and analytics:

View File

@ -2,7 +2,7 @@
stage: Create
group: Source Code
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: Use Code Owners to define experts for your code base, and set review requirements based on file type or location.
description: Use Code Owners to define experts for your codebase, and set review requirements based on file type or location.
title: Code Owners
---
@ -51,6 +51,8 @@ For example:
<iframe src="https://www.youtube-nocookie.com/embed/RoyBySTUSB0" frameborder="0" allowfullscreen> </iframe>
</figure>
For information about who is eligible to approve merge requests as either an approver or Code Owner, see [Approver by membership type](../merge_requests/approvals/rules.md#approver-by-membership-type).
## Code Owners and protected branches
To ensure merge request changes are reviewed and approved by Code Owners, specified in the
@ -109,7 +111,7 @@ Prerequisites:
1. Create a `CODEOWNERS` file in your [preferred location](#codeowners-file).
1. Define some rules in the file following the [`CODEOWNERS` syntax](reference.md).
Some suggestions:
- Configure [All eligible approvers](../merge_requests/approvals/rules.md#code-owners-as-eligible-approvers) approval rule.
- Configure [All eligible approvers](../merge_requests/approvals/rules.md#code-owners-as-approvers) approval rule.
- [Require Code Owner approval](../repository/branches/protected.md#require-code-owner-approval) on a protected branch.
1. Commit your changes, and push them up to GitLab.

View File

@ -15,7 +15,7 @@ title: Merge request approval rules
Approval rules define how many [approvals](_index.md) a merge request must receive before it can
be merged, and which users should do the approving. They can be used in conjunction
with [code owners](#code-owners-as-eligible-approvers) to ensure that changes are
with [code owners](#code-owners-as-approvers) to ensure that changes are
reviewed both by the group maintaining the feature, and any groups responsible
for specific areas of oversight.
@ -119,122 +119,13 @@ reduces the number of approvals left (the **Approvals** column) for all rules th
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For an overview, see [Multiple Approvers](https://www.youtube.com/watch?v=8JQJ5821FrA).
## Eligible approvers
To be eligible as an approver for your project, a user must be a direct member of at least one of the following:
- Your project.
- Your project's group.
- Any of your project's group's parent groups.
- Another group that has been [shared with your project](../../members/sharing_projects_groups.md#sharing-projects).
- Another group that has been [shared with your project's group or any of the group's parents](../../members/sharing_projects_groups.md#sharing-groups).
- A [group added as approvers](#group-approvers).
Users with the Developer role can approve merge requests if one of the following is true:
- Users added as approvers at the project or merge request level.
- Users who are [Code owners](#code-owners-as-eligible-approvers) of the files
changed in the merge request.
Users with the Reporter role can approve only if all of the following are true:
- The users are part of a group that has been [shared](../../members/sharing_projects_groups.md) with the project.
The group must have at least the Reporter role.
- The group has been added as merge request approvers.
- Approval permissions for users with the reporter role [are enabled](#enable-approval-permissions-for-users-with-the-reporter-role).
To show who has participated in the merge request review, the Approvals widget in
a merge request displays a **Commented by** column. This column lists eligible approvers
who commented on the merge request. It helps authors and reviewers identify who to
contact with questions about the merge request's content.
If the number of required approvals is greater than the number of assigned approvers,
approvals from other users with at least the Developer role
in the project count toward meeting the required number of approvals, even if the
users were not explicitly listed in the approval rules.
### Get notified about all merge requests you can approve
## Get notified about all merge requests you can approve
To get email notifications every time a merge request you're eligible to approve is created:
- [Set your notification level](../../../profile/notifications.md#edit-notification-settings) to **Custom**
and select the **Merge request you're eligible to approve is created** event.
### Group approvers
You can add a group of users as approvers. All direct members of this group
can approve the rule. Inherited members cannot approve the rule.
Typically the group is a subgroup in your top-level namespace, unless you are
collaborating with an external group. If you are collaborating with another group
and want to use members of that group as approvers, you can either:
- [Share access to the project](../../members/sharing_projects_groups.md#sharing-projects).
- [Share access to your project's group](../../members/sharing_projects_groups.md#sharing-groups),
which gives the external group approval access to all projects in your project's group.
A user's membership in an approver group determines their individual approval permissions
in the following ways:
- Inherited members are not considered approvers. Only direct members can approve merge requests.
- A user from a group approver group who is later also added as an individual approver
counts as one approver, not two.
- Merge request authors do not count as eligible approvers on their own merge requests by default.
To change this behavior, disable the
[**Prevent author approval**](settings.md#prevent-approval-by-author)
project setting.
- By default, committers to merge requests can approve a merge request. To change this behavior, enable
the [**Prevent committers approval**](settings.md#prevent-approvals-by-users-who-add-commits)
project setting.
### Code owners as eligible approvers
If you add [code owners](../../codeowners/_index.md) to your repository, the owners of files
become eligible approvers in the project. To enable this merge request approval rule:
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > Merge requests**.
1. In the **Merge request approvals** section, in the **Approval rules** section, locate the **All eligible users** rule.
1. In the **Approvals required** column, enter the number of approvals required.
You can also
[require code owner approval](../../repository/branches/protected.md#require-code-owner-approval)
for protected branches.
## Enable approval permissions for users with the Reporter role
Before users with the Reporter role can merge to a protected branch, you might have to grant them
permission to approve merge requests.
Some users (like managers) might not need permission to push or merge code, but still need
oversight on proposed work.
Users with the Reporter role can approve merge requests only through regular approval rules.
Code owner approval rules require users to have at least the Developer role. For more information,
see [Eligible approvers](#eligible-approvers).
Prerequisites:
- You must select a specific branch, as this method does not work with `All Branches` or `All protected branches` settings.
- The shared group must be added to an approval rule and not individual users, even when the added user is part of the group.
To enable approval permissions for these users without granting them push access:
1. [Create a protected branch](../../repository/branches/protected.md)
1. [Create a new group](../../../group/_index.md#create-a-group).
1. [Add the user to the group](../../../group/_index.md#add-users-to-a-group),
and select the Reporter role for the user. Do not assign roles with higher permissions than
Reporter due to a [known issue](https://gitlab.com/gitlab-org/gitlab/-/issues/492467).
Assigning higher roles may result in unexpected behavior.
1. [Share the project with your group](../../members/sharing_projects_groups.md#invite-a-group-to-a-project),
with at least the Reporter role.
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > Merge requests**.
1. In the **Merge request approvals** section, in the **Approval rules** section:
- For a new rule, select **Add approval rule** and target the protected branch.
- For an existing rule, select **Edit** and target the protected branch.
1. On the right sidebar, in **Add approvers**, select the group you created.
1. Select **Save changes**.
## Edit or override merge request approval rules
You can override the merge request approval rules for a project by either:
@ -300,6 +191,40 @@ approval rule for certain branches:
1. To enable this configuration, follow
[Require Code Owner approval on a protected branch](../../repository/branches/protected.md#require-code-owner-approval).
## Enable approval permissions for users with the Reporter role
Before users with the Reporter role can merge to a protected branch, you might have to grant them
permission to approve merge requests.
Some users (like managers) might not need permission to push or merge code, but still need
oversight on proposed work.
Users with the Reporter role can approve merge requests only through regular approval rules.
Code owner approval rules require users to have at least the Developer role. For more information,
see [Eligible approvers](#eligible-approvers).
Prerequisites:
- You must select a specific branch, as this method does not work with `All Branches` or `All protected branches` settings.
- The shared group must be added to an approval rule and not individual users, even when the added user is part of the group.
To enable approval permissions for these users without granting them push access:
1. [Create a protected branch](../../repository/branches/protected.md)
1. [Create a new group](../../../group/_index.md#create-a-group).
1. [Add the user to the group](../../../group/_index.md#add-users-to-a-group),
and select the Reporter role for the user. Do not assign roles with higher permissions than
Reporter due to a [known issue](https://gitlab.com/gitlab-org/gitlab/-/issues/492467).
Assigning higher roles may result in unexpected behavior.
1. [Share the project with your group](../../members/sharing_projects_groups.md#invite-a-group-to-a-project),
with at least the Reporter role.
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > Merge requests**.
1. In the **Merge request approvals** section, in the **Approval rules** section:
- For a new rule, select **Add approval rule** and target the protected branch.
- For an existing rule, select **Edit** and target the protected branch.
1. On the right sidebar, in **Add approvers**, select the group you created.
1. Select **Save changes**.
## Security Approvals
{{< details >}}
@ -329,6 +254,123 @@ on the merge request to indicate which steps are needed to proceed.
These policies are both created and edited in the [security policy editor](../../../application_security/policies/_index.md#policy-editor).
## Eligible approvers
To be eligible as an approver for your project, a user must be a direct member of at least one of the following:
- Your project.
- Your project's group.
- Any of your project's group's parent groups.
- Another group that has been [shared with your project](../../members/sharing_projects_groups.md#sharing-projects).
- Another group that has been [shared with your project's group or any of the group's parents](../../members/sharing_projects_groups.md#sharing-groups).
- A [group added as approvers](#group-approvers).
Users with the Developer role can approve merge requests if one of the following is true:
- Users added as approvers at the project or merge request level.
- Users who are [Code owners](#code-owners-as-approvers) of the files
changed in the merge request.
Users with the Reporter role can approve only if all of the following are true:
- The users are part of a group that has been [shared](../../members/sharing_projects_groups.md) with the project.
The group must have at least the Reporter role.
- The group has been added as merge request approvers.
- Approval permissions for users with the reporter role [are enabled](#enable-approval-permissions-for-users-with-the-reporter-role).
To show who has participated in the merge request review, the Approvals widget in
a merge request displays a **Commented by** column. This column lists eligible approvers
who commented on the merge request. It helps authors and reviewers identify who to
contact with questions about the merge request's content.
If the number of required approvals is greater than the number of assigned approvers,
approvals from other users with at least the Developer role
in the project count toward meeting the required number of approvals, even if the
users were not explicitly listed in the approval rules.
### Code owners as approvers
If you add [code owners](../../codeowners/_index.md) to your repository, the owners of files
become eligible approvers in the project. To enable this merge request approval rule:
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > Merge requests**.
1. In the **Merge request approvals** section, in the **Approval rules** section, locate the **All eligible users** rule.
1. In the **Approvals required** column, enter the number of approvals required.
You can also
[require code owner approval](../../repository/branches/protected.md#require-code-owner-approval)
for protected branches.
### Approver by membership type
The following tables show how membership type affects eligibility for both approval rules and
Code Owners.
#### User eligibility
When you assign individual users as approvers for approval rules or reference users in `CODEOWNERS`
files, like `@username`:
| Membership type | Approval rules | Code Owners |
|--------------------------------------------------------------------------------------------------------------------|---------------------------------------------|-------------|
| Direct member of the project | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Direct member of the project's group | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Inherited member of the project's group | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Direct member of a [group invited to the project](../../members/sharing_projects_groups.md#sharing-projects) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Inherited member of a group invited to the project | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No |
| Direct member of a [group invited to the project's group](../../members/sharing_projects_groups.md#sharing-groups) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Inherited member of a group invited to the project's group | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No |
| Direct member of a group invited to the project's group's parent groups | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| Inherited member of a group invited to the project's group's parent groups | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No |
#### Group eligibility
When you assign groups as approvers for approval rules or reference groups in `CODEOWNERS` files,
like `@group-name`, only direct members of eligible groups can provide approvals:
| Group type | Approval rules | Code Owners |
|------------|----------------|-------------|
| [Groups invited to the project](../../members/sharing_projects_groups.md#sharing-projects) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Groups invited to the project's group](../../members/sharing_projects_groups.md#sharing-groups) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="dash-circle" >}} No |
| Groups invited to a parent of the project's group | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="dash-circle" >}} No |
| The project's group | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| A parent of the project's group | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
{{< alert type="note" >}}
For group-based approvals, only direct members of the group can approve merge requests.
Inherited members of the eligible groups cannot provide approvals.
{{< /alert >}}
### Group approvers
You can add a group of users as approvers. All direct members of this group
can approve the rule. Inherited members cannot approve the rule.
Typically the group is a subgroup in your top-level namespace, unless you are
collaborating with an external group. If you are collaborating with another group
and want to use members of that group as approvers, you can either:
- [Share access to the project](../../members/sharing_projects_groups.md#sharing-projects).
- [Share access to your project's group](../../members/sharing_projects_groups.md#sharing-groups),
which gives the external group approval access to all projects in your project's group.
A user's membership in an approver group determines their individual approval permissions
in the following ways:
- Inherited members are not considered approvers. Only direct members can approve merge requests.
- A user from a group approver group who is later also added as an individual approver
counts as one approver, not two.
- Merge request authors do not count as eligible approvers on their own merge requests by default.
To change this behavior, disable the
[**Prevent author approval**](settings.md#prevent-approval-by-author)
project setting.
- By default, committers to merge requests can approve a merge request. To change this behavior, enable
the [**Prevent committers approval**](settings.md#prevent-approvals-by-users-who-add-commits)
project setting.
## Troubleshooting
### Approval rule name can't be blank

View File

@ -15509,6 +15509,9 @@ msgstr ""
msgid "Compliance Center|Violations"
msgstr ""
msgid "Compliance and security policy group for this instance"
msgstr ""
msgid "Compliance center"
msgstr ""
@ -56566,6 +56569,9 @@ msgstr ""
msgid "SecurityOrchestration|Save allowlist"
msgstr ""
msgid "SecurityOrchestration|Save changes"
msgstr ""
msgid "SecurityOrchestration|Save denylist"
msgstr ""
@ -56644,6 +56650,9 @@ msgstr ""
msgid "SecurityOrchestration|Select a cadence"
msgstr ""
msgid "SecurityOrchestration|Select a group"
msgstr ""
msgid "SecurityOrchestration|Select a project to store your security policies in. %{linkStart}More information.%{linkEnd}"
msgstr ""
@ -56842,6 +56851,9 @@ msgstr ""
msgid "SecurityOrchestration|Type in custom variable"
msgstr ""
msgid "SecurityOrchestration|Unassign group"
msgstr ""
msgid "SecurityOrchestration|Unknown source"
msgstr ""
@ -57795,6 +57807,9 @@ msgstr ""
msgid "Select a group"
msgstr ""
msgid "Select a group to create, distribute, and manage compliance frameworks and security polices for this GitLab instance. You should select a group without existing compliance frameworks."
msgstr ""
msgid "Select a label"
msgstr ""

View File

@ -10,8 +10,9 @@ module QA
element 'enable-usage-data-checkbox'
end
def has_disabled_usage_data_checkbox?
has_element?('enable-usage-data-checkbox', disabled: true, visible: false)
def has_usage_data_checkbox_checked_and_disabled?
checkbox = find_element('enable-usage-data-checkbox', visible: false)
checkbox.disabled? && checkbox.checked?
end
end
end

View File

@ -2,8 +2,8 @@
module QA
RSpec.describe 'Analytics' do
describe 'Service ping default enabled', product_group: :analytics_instrumentation do
context 'when using default enabled from gitlab.yml config', :requires_admin do
describe 'Service ping default checked', product_group: :analytics_instrumentation do
context 'when using default gitlab.yml config', :requires_admin do
before do
Flow::Login.sign_in_as_admin
@ -12,12 +12,12 @@ module QA
end
it(
'has service ping toggle enabled',
'has service ping checked (but disabled)',
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348335'
) do
Page::Admin::Settings::MetricsAndProfiling.perform do |setting|
setting.expand_usage_statistics do |page|
expect(page).not_to have_disabled_usage_data_checkbox
expect(page).to have_usage_data_checkbox_checked_and_disabled
end
end
end

View File

@ -3,20 +3,19 @@
require 'spec_helper'
RSpec.describe GroupTree, feature_category: :groups_and_projects do
let(:group) { create(:group, :public) }
let(:user) { create(:user) }
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group, :public, owners: [user]) }
controller(ApplicationController) do
# `described_class` is not available in this context
include GroupTree
def index
render_group_tree GroupsFinder.new(current_user).execute
render_group_tree GroupsFinder.new(current_user, active: safe_params[:active]).execute
end
end
before do
group.add_owner(user)
sign_in(user)
end
@ -79,6 +78,35 @@ RSpec.describe GroupTree, feature_category: :groups_and_projects do
end
end
context 'with active parameter' do
let_it_be(:active_ancestor) { group }
let_it_be(:inactive_ancestor) { create(:group, :archived, :public) }
let_it_be(:active_child) { create(:group, parent: active_ancestor) }
let_it_be(:inactive_child) { create(:group, parent: inactive_ancestor) }
context 'when true' do
it 'only loads root group' do
allow(GroupsFinder).to receive(:execute).and_return(Group.where(id: active_child.id))
get :index, params: { active: true }, format: :json
expect(assigns(:groups)).to include(active_ancestor)
expect(assigns(:groups)).not_to include(active_child, inactive_ancestor, inactive_child)
end
end
context 'when false' do
it 'preloads inactive ancestors' do
allow(GroupsFinder).to receive(:execute).and_return(Group.where(id: inactive_child.id))
get :index, params: { active: false }, format: :json
expect(assigns(:groups)).to include(inactive_ancestor, inactive_child)
expect(assigns(:groups)).not_to include(active_ancestor, active_child)
end
end
end
context 'json content' do
it 'shows groups as json' do
get :index, format: :json

View File

@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Dashboard::GroupsController do
include ExternalAuthorizationServiceHelpers
let(:user) { create(:user) }
let_it_be(:user) { create(:user) }
before do
sign_in(user)
@ -53,5 +53,7 @@ RSpec.describe Dashboard::GroupsController do
expect(response).to have_gitlab_http_status(:ok)
end
it_behaves_like 'groups controller with active parameter'
end
end

View File

@ -37,6 +37,8 @@ RSpec.describe Explore::GroupsController, feature_category: :groups_and_projects
expect(response).to redirect_to new_user_session_path
end
end
it_behaves_like 'groups controller with active parameter'
end
it_behaves_like 'explore groups'

View File

@ -0,0 +1,66 @@
# frozen_string_literal: true
RSpec.shared_examples 'groups controller with active parameter' do
let_it_be(:active_group) { create(:group, :public, developers: [user]) }
let_it_be(:inactive_group) { create(:group, :archived, :public, developers: [user]) }
let(:params) { {} }
before do
get :index, params: params, format: :json
end
context 'when true' do
let(:params) { { active: true } }
it 'returns active group', :aggregate_failures do
expect(assigns(:groups)).to include(active_group)
expect(assigns(:groups)).not_to include(inactive_group)
end
end
context 'when false' do
let(:params) { { active: false } }
it 'returns inactive group' do
expect(assigns(:groups)).to contain_exactly(inactive_group)
end
context 'when active group has inactive subgroup' do
let_it_be(:active_subgroup) { create(:group, parent: active_group) }
let_it_be(:inactive_subgroup) { create(:group, :archived, parent: active_group) }
it 'returns inactive subgroup' do
expect(assigns(:groups)).to contain_exactly(inactive_group, inactive_subgroup)
end
end
context 'when inactive group has active subgroup' do
let_it_be(:active_subgroup) { create(:group, parent: inactive_group) }
it 'returns inactive group with subgroup' do
expect(assigns(:groups)).to contain_exactly(inactive_group, active_subgroup)
end
end
context 'when inactive group has inactive subgroup' do
let_it_be(:inactive_subgroup) { create(:group, :archived, parent: inactive_group) }
it 'returns inactive group with subgroup' do
expect(assigns(:groups)).to contain_exactly(inactive_group, inactive_subgroup)
end
end
context "when groups has lower-level inactive subgroup" do
let_it_be(:inactive_subgroup) { create(:group, :archived, parent: active_group) }
let_it_be(:inactive_subsubgroup) { create(:group, :archived, parent: inactive_subgroup) }
let(:params) { { active: false, filter: inactive_subsubgroup.name } }
it 'returns inactive subgroup with its inactive parents' do
expect(json_response.first['id']).to eq(inactive_subgroup.id)
expect(json_response.first['children'].first['id']).to eq(inactive_subsubgroup.id)
end
end
end
end