Skip to content
代码片段 群组 项目
未验证 提交 ea09b4f0 编辑于 作者: Aakriti Gupta's avatar Aakriti Gupta 提交者: GitLab
浏览文件

Merge branch '520595-create-graphQL-query-for-exploring-projects' into 'master'

Add new arguments in GraphQL query for exploring projects

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183133



Merged-by: default avatarAakriti Gupta <agupta@gitlab.com>
Approved-by: default avatarShubham Kumar <shukumar@gitlab.com>
Approved-by: default avatarAmy Qualls <aqualls@gitlab.com>
Approved-by: default avatarAakriti Gupta <agupta@gitlab.com>
Reviewed-by: default avatarAakriti Gupta <agupta@gitlab.com>
Reviewed-by: default avatarEmily Sahlani <esahlani@gitlab.com>
Co-authored-by: default avatarPratibha Gupta <guptapratibha26@gmail.com>
No related branches found
No related tags found
2 合并请求!3031Merge per-main-jh to main-jh by luzhiyuan,!3030Merge per-main-jh to main-jh
......@@ -35,6 +35,14 @@ class ProjectsResolver < BaseResolver
required: false,
description: 'Filter projects by programming language name (case insensitive). For example: "css" or "ruby".'
argument :trending, GraphQL::Types::Boolean,
required: false,
description: "Return only projects that are trending."
argument :not_aimed_for_deletion, GraphQL::Types::Boolean,
required: false,
description: "Exclude projects that are marked for deletion."
before_connection_authorization do |projects, current_user|
::Preloaders::UserMaxAccessLevelInProjectsPreloader.new(projects, current_user).execute
end
......@@ -69,7 +77,9 @@ def finder_params(args)
full_paths: args[:full_paths],
archived: args[:archived],
min_access_level: args[:min_access_level],
language_name: args[:programming_language_name]
language_name: args[:programming_language_name],
trending: args[:trending],
not_aimed_for_deletion: args[:not_aimed_for_deletion]
}
end
......
......@@ -1197,12 +1197,14 @@ four standard [pagination arguments](#pagination-arguments):
| <a id="queryprojectsmarkedfordeletionon"></a>`markedForDeletionOn` | [`Date`](#date) | Date when the project was marked for deletion. |
| <a id="queryprojectsmembership"></a>`membership` | [`Boolean`](#boolean) | Return only projects that the current user is a member of. |
| <a id="queryprojectsminaccesslevel"></a>`minAccessLevel` | [`AccessLevelEnum`](#accesslevelenum) | Return only projects where current user has at least the specified access level. |
| <a id="queryprojectsnotaimedfordeletion"></a>`notAimedForDeletion` | [`Boolean`](#boolean) | Exclude projects that are marked for deletion. |
| <a id="queryprojectspersonal"></a>`personal` | [`Boolean`](#boolean) | Return only personal projects. |
| <a id="queryprojectsprogramminglanguagename"></a>`programmingLanguageName` | [`String`](#string) | Filter projects by programming language name (case insensitive). For example: "css" or "ruby". |
| <a id="queryprojectssearch"></a>`search` | [`String`](#string) | Search query, which can be for the project name, a path, or a description. |
| <a id="queryprojectssearchnamespaces"></a>`searchNamespaces` | [`Boolean`](#boolean) | Include namespace in project search. |
| <a id="queryprojectssort"></a>`sort` | [`String`](#string) | Sort order of results. Format: `<field_name>_<sort_direction>`, for example: `id_desc` or `name_asc`. |
| <a id="queryprojectstopics"></a>`topics` | [`[String!]`](#string) | Filter projects by topics. |
| <a id="queryprojectstrending"></a>`trending` | [`Boolean`](#boolean) | Return only projects that are trending. |
| <a id="queryprojectswithissuesenabled"></a>`withIssuesEnabled` | [`Boolean`](#boolean) | Return only projects with issues enabled. |
| <a id="queryprojectswithmergerequestsenabled"></a>`withMergeRequestsEnabled` | [`Boolean`](#boolean) | Return only projects with merge requests enabled. |
 
......@@ -32703,12 +32705,14 @@ four standard [pagination arguments](#pagination-arguments):
| <a id="organizationprojectsmarkedfordeletionon"></a>`markedForDeletionOn` | [`Date`](#date) | Date when the project was marked for deletion. |
| <a id="organizationprojectsmembership"></a>`membership` | [`Boolean`](#boolean) | Return only projects that the current user is a member of. |
| <a id="organizationprojectsminaccesslevel"></a>`minAccessLevel` | [`AccessLevelEnum`](#accesslevelenum) | Return only projects where current user has at least the specified access level. |
| <a id="organizationprojectsnotaimedfordeletion"></a>`notAimedForDeletion` | [`Boolean`](#boolean) | Exclude projects that are marked for deletion. |
| <a id="organizationprojectspersonal"></a>`personal` | [`Boolean`](#boolean) | Return only personal projects. |
| <a id="organizationprojectsprogramminglanguagename"></a>`programmingLanguageName` | [`String`](#string) | Filter projects by programming language name (case insensitive). For example: "css" or "ruby". |
| <a id="organizationprojectssearch"></a>`search` | [`String`](#string) | Search query, which can be for the project name, a path, or a description. |
| <a id="organizationprojectssearchnamespaces"></a>`searchNamespaces` | [`Boolean`](#boolean) | Include namespace in project search. |
| <a id="organizationprojectssort"></a>`sort` | [`String`](#string) | Sort order of results. Format: `<field_name>_<sort_direction>`, for example: `id_desc` or `name_asc`. |
| <a id="organizationprojectstopics"></a>`topics` | [`[String!]`](#string) | Filter projects by topics. |
| <a id="organizationprojectstrending"></a>`trending` | [`Boolean`](#boolean) | Return only projects that are trending. |
| <a id="organizationprojectswithissuesenabled"></a>`withIssuesEnabled` | [`Boolean`](#boolean) | Return only projects with issues enabled. |
| <a id="organizationprojectswithmergerequestsenabled"></a>`withMergeRequestsEnabled` | [`Boolean`](#boolean) | Return only projects with merge requests enabled. |
 
......@@ -224,6 +224,10 @@
archived { true }
end
trait :not_aimed_for_deletion do
marked_for_deletion_at { nil }
end
trait :hidden do
hidden { true }
end
......
......@@ -164,4 +164,70 @@
.to contain_exactly(a_graphql_entity_for(project))
end
end
context 'when providing the trending argument' do
let_it_be(:trending_project1) { create(:project, :public, group: group) }
let_it_be(:trending_project2) { create(:project, :public, group: group) }
let_it_be(:test_project) { create(:project, :public, group: group) }
let(:filters) { { trending: true } }
before do
create(:trending_project, project: trending_project1)
create(:trending_project, project: trending_project2)
post_graphql(query, current_user: current_user)
end
it 'returns only trending projects' do
expect(graphql_data_at(:projects, :nodes))
.to contain_exactly(
a_graphql_entity_for(trending_project1),
a_graphql_entity_for(trending_project2)
)
end
it 'excludes non-trending projects' do
expect(graphql_data_at(:projects, :nodes)).not_to include(
a_graphql_entity_for(archived_project),
a_graphql_entity_for(test_project),
a_graphql_entity_for(other_project)
)
end
end
context 'when providing the not_aimed_for_deletion argument' do
let_it_be(:project_aimed_for_deletion1) do
create(:project, :public, marked_for_deletion_at: 1.day.ago, group: group)
end
let_it_be(:project_aimed_for_deletion2) do
create(:project, :public, marked_for_deletion_at: 3.days.ago, group: group)
end
let_it_be(:project_not_aimed_for_deletion) { create(:project, :public, group: group) }
let(:filters) { { not_aimed_for_deletion: true, archived: :INCLUDE } }
before do
post_graphql(query, current_user: current_user)
end
it 'returns only projects not aimed for deletion' do
expect(graphql_data_at(:projects, :nodes))
.to contain_exactly(
*projects.map { |project| a_graphql_entity_for(project) },
a_graphql_entity_for(other_project),
a_graphql_entity_for(archived_project),
a_graphql_entity_for(project_not_aimed_for_deletion)
)
end
it 'excludes projects marked for deletion' do
expect(graphql_data_at(:projects, :nodes)).not_to include(
a_graphql_entity_for(project_aimed_for_deletion1),
a_graphql_entity_for(project_aimed_for_deletion2)
)
end
end
end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册