Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
87dfe5a2
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
87dfe5a2
编写于
1月 17, 2019
作者:
R
Rémy Coutable
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add GraphQL filters for issuables (state, labels, time fields)
Signed-off-by:
N
Rémy Coutable
<
remy@rymai.me
>
上级
f0a2c411
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
156 addition
and
15 deletion
+156
-15
app/graphql/resolvers/issues_resolver.rb
app/graphql/resolvers/issues_resolver.rb
+24
-1
app/graphql/types/issuable_state_enum.rb
app/graphql/types/issuable_state_enum.rb
+12
-0
app/graphql/types/issue_state_enum.rb
app/graphql/types/issue_state_enum.rb
+8
-0
app/graphql/types/issue_type.rb
app/graphql/types/issue_type.rb
+1
-1
app/graphql/types/merge_request_state_enum.rb
app/graphql/types/merge_request_state_enum.rb
+10
-0
app/graphql/types/merge_request_type.rb
app/graphql/types/merge_request_type.rb
+1
-1
changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml
...before-and-closed_after-for-issuesresolver-in-graphql.yml
+5
-0
doc/api/README.md
doc/api/README.md
+1
-1
spec/graphql/resolvers/issues_resolver_spec.rb
spec/graphql/resolvers/issues_resolver_spec.rb
+58
-11
spec/graphql/types/issuable_state_enum_spec.rb
spec/graphql/types/issuable_state_enum_spec.rb
+9
-0
spec/graphql/types/issue_state_enum_spec.rb
spec/graphql/types/issue_state_enum_spec.rb
+9
-0
spec/graphql/types/merge_request_state_enum_spec.rb
spec/graphql/types/merge_request_state_enum_spec.rb
+13
-0
spec/support/shared_examples/graphql/issuable_state_shared_examples.rb
...shared_examples/graphql/issuable_state_shared_examples.rb
+5
-0
未找到文件。
app/graphql/resolvers/issues_resolver.rb
浏览文件 @
87dfe5a2
...
...
@@ -9,7 +9,30 @@ module Resolvers
argument
:iids
,
[
GraphQL
::
ID_TYPE
],
required:
false
,
description:
'The list of IIDs of issues, e.g., [1, 2]'
argument
:state
,
Types
::
IssuableStateEnum
,
required:
false
,
description:
"Current state of Issue"
argument
:label_name
,
GraphQL
::
STRING_TYPE
.
to_list_type
,
required:
false
,
description:
"Labels applied to the Issue"
argument
:created_before
,
Types
::
TimeType
,
required:
false
,
description:
"Issues created before this date"
argument
:created_after
,
Types
::
TimeType
,
required:
false
,
description:
"Issues created after this date"
argument
:updated_before
,
Types
::
TimeType
,
required:
false
,
description:
"Issues updated before this date"
argument
:updated_after
,
Types
::
TimeType
,
required:
false
,
description:
"Issues updated after this date"
argument
:closed_before
,
Types
::
TimeType
,
required:
false
,
description:
"Issues closed before this date"
argument
:closed_after
,
Types
::
TimeType
,
required:
false
,
description:
"Issues closed after this date"
argument
:search
,
GraphQL
::
STRING_TYPE
,
required:
false
argument
:sort
,
Types
::
Sort
,
...
...
app/graphql/types/issuable_state_enum.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
module
Types
class
IssuableStateEnum
<
BaseEnum
graphql_name
'IssuableState'
description
'State of a GitLab issue or merge request'
value
'opened'
value
'closed'
value
'locked'
end
end
app/graphql/types/issue_state_enum.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
module
Types
class
IssueStateEnum
<
IssuableStateEnum
graphql_name
'IssueState'
description
'State of a GitLab issue'
end
end
app/graphql/types/issue_type.rb
浏览文件 @
87dfe5a2
...
...
@@ -11,7 +11,7 @@ module Types
field
:iid
,
GraphQL
::
ID_TYPE
,
null:
false
field
:title
,
GraphQL
::
STRING_TYPE
,
null:
false
field
:description
,
GraphQL
::
STRING_TYPE
,
null:
true
field
:state
,
GraphQL
::
STRING_TYPE
,
null:
false
field
:state
,
IssueStateEnum
,
null:
false
field
:author
,
Types
::
UserType
,
null:
false
,
...
...
app/graphql/types/merge_request_state_enum.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
module
Types
class
MergeRequestStateEnum
<
IssuableStateEnum
graphql_name
'MergeRequestState'
description
'State of a GitLab merge request'
value
'merged'
end
end
app/graphql/types/merge_request_type.rb
浏览文件 @
87dfe5a2
...
...
@@ -12,7 +12,7 @@ module Types
field
:iid
,
GraphQL
::
ID_TYPE
,
null:
false
field
:title
,
GraphQL
::
STRING_TYPE
,
null:
false
field
:description
,
GraphQL
::
STRING_TYPE
,
null:
true
field
:state
,
GraphQL
::
STRING_TYPE
,
null:
tru
e
field
:state
,
MergeRequestStateEnum
,
null:
fals
e
field
:created_at
,
Types
::
TimeType
,
null:
false
field
:updated_at
,
Types
::
TimeType
,
null:
false
field
:source_project
,
Types
::
ProjectType
,
null:
true
...
...
changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml
0 → 100644
浏览文件 @
87dfe5a2
---
title
:
"
Implement
new
arguments
`state`,
`closed_before`
and
`closed_after`
for
`IssuesResolver`
in
GraphQL"
merge_request
:
24910
author
:
type
:
changed
doc/api/README.md
浏览文件 @
87dfe5a2
...
...
@@ -134,7 +134,7 @@ Endpoints are available for:
## Road to GraphQL
Going forward, we will start on moving to
[
GraphQL
](
http://graphql.org/learn/best-practices/
)
and deprecate the use of
[
GraphQL
](
graphql/index.md
)
and deprecate the use of
controller-specific endpoints. GraphQL has a number of benefits:
1.
We avoid having to maintain two different APIs.
...
...
spec/graphql/resolvers/issues_resolver_spec.rb
浏览文件 @
87dfe5a2
...
...
@@ -5,16 +5,63 @@ describe Resolvers::IssuesResolver do
let
(
:current_user
)
{
create
(
:user
)
}
set
(
:project
)
{
create
(
:project
)
}
set
(
:issue
)
{
create
(
:issue
,
project:
project
)
}
set
(
:issue2
)
{
create
(
:issue
,
project:
project
,
title:
'foo'
)
}
set
(
:issue1
)
{
create
(
:issue
,
project:
project
,
state: :opened
,
created_at:
3
.
hours
.
ago
,
updated_at:
3
.
hours
.
ago
)
}
set
(
:issue2
)
{
create
(
:issue
,
project:
project
,
state: :closed
,
title:
'foo'
,
created_at:
1
.
hour
.
ago
,
updated_at:
1
.
hour
.
ago
,
closed_at:
1
.
hour
.
ago
)
}
set
(
:label1
)
{
create
(
:label
,
project:
project
)
}
set
(
:label2
)
{
create
(
:label
,
project:
project
)
}
before
do
project
.
add_developer
(
current_user
)
create
(
:label_link
,
label:
label1
,
target:
issue1
)
create
(
:label_link
,
label:
label1
,
target:
issue2
)
create
(
:label_link
,
label:
label2
,
target:
issue2
)
end
describe
'#resolve'
do
it
'finds all issues'
do
expect
(
resolve_issues
).
to
contain_exactly
(
issue
,
issue2
)
expect
(
resolve_issues
).
to
contain_exactly
(
issue1
,
issue2
)
end
it
'filters by state'
do
expect
(
resolve_issues
(
state:
'opened'
)).
to
contain_exactly
(
issue1
)
expect
(
resolve_issues
(
state:
'closed'
)).
to
contain_exactly
(
issue2
)
end
it
'filters by labels'
do
expect
(
resolve_issues
(
label_name:
[
label1
.
title
])).
to
contain_exactly
(
issue1
,
issue2
)
expect
(
resolve_issues
(
label_name:
[
label1
.
title
,
label2
.
title
])).
to
contain_exactly
(
issue2
)
end
describe
'filters by created_at'
do
it
'filters by created_before'
do
expect
(
resolve_issues
(
created_before:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue1
)
end
it
'filters by created_after'
do
expect
(
resolve_issues
(
created_after:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue2
)
end
end
describe
'filters by updated_at'
do
it
'filters by updated_before'
do
expect
(
resolve_issues
(
updated_before:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue1
)
end
it
'filters by updated_after'
do
expect
(
resolve_issues
(
updated_after:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue2
)
end
end
describe
'filters by closed_at'
do
let!
(
:issue3
)
{
create
(
:issue
,
project:
project
,
state: :closed
,
closed_at:
3
.
hours
.
ago
)
}
it
'filters by closed_before'
do
expect
(
resolve_issues
(
closed_before:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue3
)
end
it
'filters by closed_after'
do
expect
(
resolve_issues
(
closed_after:
2
.
hours
.
ago
)).
to
contain_exactly
(
issue2
)
end
end
it
'searches issues'
do
...
...
@@ -22,7 +69,7 @@ describe Resolvers::IssuesResolver do
end
it
'sort issues'
do
expect
(
resolve_issues
(
sort:
'created_desc'
)).
to
eq
[
issue2
,
issue
]
expect
(
resolve_issues
(
sort:
'created_desc'
)).
to
eq
[
issue2
,
issue
1
]
end
it
'returns issues user can see'
do
...
...
@@ -30,31 +77,31 @@ describe Resolvers::IssuesResolver do
create
(
:issue
,
confidential:
true
)
expect
(
resolve_issues
).
to
contain_exactly
(
issue
,
issue2
)
expect
(
resolve_issues
).
to
contain_exactly
(
issue
1
,
issue2
)
end
it
'finds a specific issue with iid'
do
expect
(
resolve_issues
(
iid:
issue
.
iid
)).
to
contain_exactly
(
issue
)
expect
(
resolve_issues
(
iid:
issue
1
.
iid
)).
to
contain_exactly
(
issue1
)
end
it
'finds a specific issue with iids'
do
expect
(
resolve_issues
(
iids:
issue
.
iid
)).
to
contain_exactly
(
issue
)
expect
(
resolve_issues
(
iids:
issue
1
.
iid
)).
to
contain_exactly
(
issue1
)
end
it
'finds multiple issues with iids'
do
expect
(
resolve_issues
(
iids:
[
issue
.
iid
,
issue2
.
iid
]))
.
to
contain_exactly
(
issue
,
issue2
)
expect
(
resolve_issues
(
iids:
[
issue
1
.
iid
,
issue2
.
iid
]))
.
to
contain_exactly
(
issue
1
,
issue2
)
end
it
'finds only the issues within the project we are looking at'
do
another_project
=
create
(
:project
)
iids
=
[
issue
,
issue2
].
map
(
&
:iid
)
iids
=
[
issue
1
,
issue2
].
map
(
&
:iid
)
iids
.
each
do
|
iid
|
create
(
:issue
,
project:
another_project
,
iid:
iid
)
end
expect
(
resolve_issues
(
iids:
iids
)).
to
contain_exactly
(
issue
,
issue2
)
expect
(
resolve_issues
(
iids:
iids
)).
to
contain_exactly
(
issue
1
,
issue2
)
end
end
...
...
spec/graphql/types/issuable_state_enum_spec.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
require
'spec_helper'
describe
GitlabSchema
.
types
[
'IssuableState'
]
do
it
{
expect
(
described_class
.
graphql_name
).
to
eq
(
'IssuableState'
)
}
it_behaves_like
'issuable state'
end
spec/graphql/types/issue_state_enum_spec.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
require
'spec_helper'
describe
GitlabSchema
.
types
[
'IssueState'
]
do
it
{
expect
(
described_class
.
graphql_name
).
to
eq
(
'IssueState'
)
}
it_behaves_like
'issuable state'
end
spec/graphql/types/merge_request_state_enum_spec.rb
0 → 100644
浏览文件 @
87dfe5a2
# frozen_string_literal: true
require
'spec_helper'
describe
GitlabSchema
.
types
[
'MergeRequestState'
]
do
it
{
expect
(
described_class
.
graphql_name
).
to
eq
(
'MergeRequestState'
)
}
it_behaves_like
'issuable state'
it
'exposes all the existing merge request states'
do
expect
(
described_class
.
values
.
keys
).
to
include
(
'merged'
)
end
end
spec/support/shared_examples/graphql/issuable_state_shared_examples.rb
0 → 100644
浏览文件 @
87dfe5a2
RSpec
.
shared_examples
'issuable state'
do
it
'exposes all the existing issuable states'
do
expect
(
described_class
.
values
.
keys
).
to
include
(
*
%w[opened closed locked]
)
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录