diff --git a/app/graphql/resolvers/namespace_projects_resolver.rb b/app/graphql/resolvers/namespace_projects_resolver.rb index f0781058beae0e2a453d29ba452b52e52ddf4314..1e8a7365fc0ff90ce908792caf7983e8de947cfb 100644 --- a/app/graphql/resolvers/namespace_projects_resolver.rb +++ b/app/graphql/resolvers/namespace_projects_resolver.rb @@ -7,6 +7,11 @@ class NamespaceProjectsResolver < BaseResolver default_value: false, description: 'Include also subgroup projects.' + argument :include_archived, GraphQL::Types::Boolean, + required: false, + default_value: true, + description: 'Include also archived projects.' + argument :not_aimed_for_deletion, GraphQL::Types::Boolean, required: false, default_value: false, @@ -65,6 +70,7 @@ def namespace def finder_params(args) { include_subgroups: args.dig(:include_subgroups), + include_archived: args.dig(:include_archived), not_aimed_for_deletion: args.dig(:not_aimed_for_deletion), sort: args.dig(:sort), search: args.dig(:search), diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index b21e82c9b541e93935c8ebfc3408ed5480f69b80..92363f5dad8fa2ea2f1aa07eacc8eb2da7bfa03b 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -20240,6 +20240,7 @@ four standard [pagination arguments](#connection-pagination-arguments): | <a id="groupprojectshascodecoverage"></a>`hasCodeCoverage` | [`Boolean`](#boolean) | Returns only the projects which have code coverage. | | <a id="groupprojectshasvulnerabilities"></a>`hasVulnerabilities` | [`Boolean`](#boolean) | Returns only the projects which have vulnerabilities. | | <a id="groupprojectsids"></a>`ids` | [`[ID!]`](#id) | Filter projects by IDs. | +| <a id="groupprojectsincludearchived"></a>`includeArchived` | [`Boolean`](#boolean) | Include also archived projects. | | <a id="groupprojectsincludesubgroups"></a>`includeSubgroups` | [`Boolean`](#boolean) | Include also subgroup projects. | | <a id="groupprojectsnotaimedfordeletion"></a>`notAimedForDeletion` | [`Boolean`](#boolean) | Include projects that are not aimed for deletion. | | <a id="groupprojectssbomcomponentid"></a>`sbomComponentId` | [`ID`](#id) | Return only the projects related to the specified SBOM component. | @@ -23297,6 +23298,7 @@ four standard [pagination arguments](#connection-pagination-arguments): | <a id="namespaceprojectshascodecoverage"></a>`hasCodeCoverage` | [`Boolean`](#boolean) | Returns only the projects which have code coverage. | | <a id="namespaceprojectshasvulnerabilities"></a>`hasVulnerabilities` | [`Boolean`](#boolean) | Returns only the projects which have vulnerabilities. | | <a id="namespaceprojectsids"></a>`ids` | [`[ID!]`](#id) | Filter projects by IDs. | +| <a id="namespaceprojectsincludearchived"></a>`includeArchived` | [`Boolean`](#boolean) | Include also archived projects. | | <a id="namespaceprojectsincludesubgroups"></a>`includeSubgroups` | [`Boolean`](#boolean) | Include also subgroup projects. | | <a id="namespaceprojectsnotaimedfordeletion"></a>`notAimedForDeletion` | [`Boolean`](#boolean) | Include projects that are not aimed for deletion. | | <a id="namespaceprojectssbomcomponentid"></a>`sbomComponentId` | [`ID`](#id) | Return only the projects related to the specified SBOM component. | diff --git a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb index 3ae19078c30b2b69d2b8f94c3862d9293d5e9eb6..5b93605e1d921fc64e56bef4741063a984d205c5 100644 --- a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb +++ b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb @@ -25,7 +25,7 @@ let(:group) { create(:group) } let(:namespace) { group } let(:project1) { create(:project, namespace: namespace) } - let(:project2) { create(:project, namespace: namespace) } + let(:project2) { create(:project, :archived, namespace: namespace) } let(:project3) { create(:project, namespace: namespace, marked_for_deletion_at: 1.day.ago, pending_delete: true) } let(:nested_group) { create(:group, parent: group) } let(:nested_project) { create(:project, group: nested_group) } @@ -54,6 +54,12 @@ expect(resolve_projects(arg)).to contain_exactly(project1, project2) end + it 'can filter out archived projects' do + arg = { include_archived: false } + + expect(resolve_projects(arg)).to contain_exactly(project1, project3) + end + it 'finds all projects not aimed for deletion including the subgroups' do args[:not_aimed_for_deletion] = true