Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
gitlab-ce
Commits
c5c9dce2
Commit
c5c9dce2
authored
7 years ago
by
Felipe Artur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add group milestones API endpoint
parent
05329d4a
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
545 additions
and
101 deletions
+545
-101
app/finders/issuable_finder.rb
app/finders/issuable_finder.rb
+1
-1
doc/api/README.md
doc/api/README.md
+2
-1
doc/api/group_milestones.md
doc/api/group_milestones.md
+120
-0
lib/api/api.rb
lib/api/api.rb
+2
-1
lib/api/entities.rb
lib/api/entities.rb
+2
-2
lib/api/group_milestones.rb
lib/api/group_milestones.rb
+85
-0
lib/api/helpers.rb
lib/api/helpers.rb
+4
-0
lib/api/milestone_responses.rb
lib/api/milestone_responses.rb
+98
-0
lib/api/project_milestones.rb
lib/api/project_milestones.rb
+91
-0
spec/requests/api/group_milestones_spec.rb
spec/requests/api/group_milestones_spec.rb
+21
-0
spec/requests/api/project_milestones_spec.rb
spec/requests/api/project_milestones_spec.rb
+25
-0
spec/support/api/milestones_shared_examples.rb
spec/support/api/milestones_shared_examples.rb
+94
-96
No files found.
app/finders/issuable_finder.rb
View file @
c5c9dce2
This diff is collapsed.
Click to expand it.
doc/api/README.md
View file @
c5c9dce2
...
@@ -29,7 +29,8 @@ following locations:
...
@@ -29,7 +29,8 @@ following locations:
-
[
Keys
](
keys.md
)
-
[
Keys
](
keys.md
)
-
[
Labels
](
labels.md
)
-
[
Labels
](
labels.md
)
-
[
Merge Requests
](
merge_requests.md
)
-
[
Merge Requests
](
merge_requests.md
)
-
[
Milestones
](
milestones.md
)
-
[
Project milestones
](
milestones.md
)
-
[
Group milestones
](
group_milestones.md
)
-
[
Namespaces
](
namespaces.md
)
-
[
Namespaces
](
namespaces.md
)
-
[
Notes
](
notes.md
)
(
comments
)
-
[
Notes
](
notes.md
)
(
comments
)
-
[
Notification settings
](
notification_settings.md
)
-
[
Notification settings
](
notification_settings.md
)
...
...
This diff is collapsed.
Click to expand it.
doc/api/group_milestones.md
0 → 100644
View file @
c5c9dce2
# Group milestones API
## List group milestones
Returns a list of group milestones.
```
GET /groups/:id/milestones
GET /groups/:id/milestones?iids=42
GET /groups/:id/milestones?iids[]=42&iids[]=43
GET /groups/:id/milestones?state=active
GET /groups/:id/milestones?state=closed
GET /groups/:id/milestones?search=version
```
Parameters:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
|
`id`
| integer/string | yes | The ID or
[
URL-encoded path of the group
](
README.md#namespaced-path-encoding
)
owned by the authenticated user |
|
`iids`
| Array[integer] | optional | Return only the milestones having the given
`iids`
|
|
`state`
| string | optional | Return only
`active`
or
`closed`
milestones
` |
| `
search
` | string | optional | Return only milestones with a title or description matching the provided string |
```bash
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/5/milestones
```
Example Response:
```json
[
{
"id": 12,
"iid": 3,
"group_id": 16,
"title": "10.0",
"description": "Version",
"due_date": "2013-11-29",
"start_date": "2013-11-10",
"state": "active",
"updated_at": "2013-10-02T09:24:18Z",
"created_at": "2013-10-02T09:24:18Z"
}
]
```
## Get single milestone
Gets a single group milestone.
```
GET /groups/:id/milestones/:milestone_id
```
Parameters:
- `
id
` (required) - The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user
- `
milestone_id
` (required) - The ID of the group milestone
## Create new milestone
Creates a new group milestone.
```
POST /groups/:id/milestones
```
Parameters:
- `
id
` (required) - The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user
- `
title
` (required) - The title of an milestone
- `
description
` (optional) - The description of the milestone
- `
due_date
` (optional) - The due date of the milestone
- `
start_date
` (optional) - The start date of the milestone
## Edit milestone
Updates an existing group milestone.
```
PUT /groups/:id/milestones/:milestone_id
```
Parameters:
- `
id
` (required) - The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user
- `
milestone_id
` (required) - The ID of a group milestone
- `
title
` (optional) - The title of a milestone
- `
description
` (optional) - The description of a milestone
- `
due_date
` (optional) - The due date of the milestone
- `
start_date
` (optional) - The start date of the milestone
- `
state_event
` (optional) - The state event of the milestone (close|activate)
## Get all issues assigned to a single milestone
Gets all issues assigned to a single group milestone.
```
GET /groups/:id/milestones/:milestone_id/issues
```
Parameters:
- `
id
` (required) - The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user
- `
milestone_id
` (required) - The ID of a group milestone
## Get all merge requests assigned to a single milestone
Gets all merge requests assigned to a single group milestone.
```
GET /groups/:id/milestones/:milestone_id/merge_requests
```
Parameters:
- `
id
` (required) - The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user
- `
milestone_id
`
(required) - The ID of a group milestone
This diff is collapsed.
Click to expand it.
lib/api/api.rb
View file @
c5c9dce2
...
@@ -109,7 +109,8 @@ module API
...
@@ -109,7 +109,8 @@ module API
mount
::
API
::
Members
mount
::
API
::
Members
mount
::
API
::
MergeRequestDiffs
mount
::
API
::
MergeRequestDiffs
mount
::
API
::
MergeRequests
mount
::
API
::
MergeRequests
mount
::
API
::
Milestones
mount
::
API
::
ProjectMilestones
mount
::
API
::
GroupMilestones
mount
::
API
::
Namespaces
mount
::
API
::
Namespaces
mount
::
API
::
Notes
mount
::
API
::
Notes
mount
::
API
::
NotificationSettings
mount
::
API
::
NotificationSettings
...
...
This diff is collapsed.
Click to expand it.
lib/api/entities.rb
View file @
c5c9dce2
...
@@ -269,8 +269,8 @@ module API
...
@@ -269,8 +269,8 @@ module API
class
Milestone
<
Grape
::
Entity
class
Milestone
<
Grape
::
Entity
expose
:id
,
:iid
expose
:id
,
:iid
expose
(
:project_id
)
{
|
entity
|
entity
&
.
project_id
}
expose
:project_id
,
if:
->
(
entity
,
options
)
{
entity
&
.
project_id
}
expose
(
:group_id
)
{
|
entity
|
entity
&
.
group_id
}
expose
:group_id
,
if:
->
(
entity
,
options
)
{
entity
&
.
group_id
}
expose
:title
,
:description
expose
:title
,
:description
expose
:state
,
:created_at
,
:updated_at
expose
:state
,
:created_at
,
:updated_at
expose
:due_date
expose
:due_date
...
...
This diff is collapsed.
Click to expand it.
lib/api/group_milestones.rb
0 → 100644
View file @
c5c9dce2
module
API
class
GroupMilestones
<
Grape
::
API
include
MilestoneResponses
include
PaginationParams
before
do
authenticate!
end
params
do
requires
:id
,
type:
String
,
desc:
'The ID of a group'
end
resource
:groups
,
requirements:
{
id:
%r{[^/]+}
}
do
desc
'Get a list of group milestones'
do
success
Entities
::
Milestone
end
params
do
use
:list_params
end
get
":id/milestones"
do
list_milestones_for
(
user_group
)
end
desc
'Get a single group milestone'
do
success
Entities
::
Milestone
end
params
do
requires
:milestone_id
,
type:
Integer
,
desc:
'The ID of a group milestone'
end
get
":id/milestones/:milestone_id"
do
authorize!
:read_group
,
user_group
get_milestone_for
(
user_group
)
end
desc
'Create a new group milestone'
do
success
Entities
::
Milestone
end
params
do
requires
:title
,
type:
String
,
desc:
'The title of the milestone'
use
:optional_params
end
post
":id/milestones"
do
authorize!
:admin_milestones
,
user_group
create_milestone_for
(
user_group
)
end
desc
'Update an existing group milestone'
do
success
Entities
::
Milestone
end
params
do
use
:update_params
end
put
":id/milestones/:milestone_id"
do
authorize!
:admin_milestones
,
user_group
update_milestone_for
(
user_group
)
end
desc
'Get all issues for a single group milestone'
do
success
Entities
::
IssueBasic
end
params
do
requires
:milestone_id
,
type:
Integer
,
desc:
'The ID of a group milestone'
use
:pagination
end
get
":id/milestones/:milestone_id/issues"
do
milestone_issuables_for
(
user_group
,
:issue
)
end
desc
'Get all merge requests for a single group milestone'
do
detail
'This feature was introduced in GitLab 9.'
success
Entities
::
MergeRequestBasic
end
params
do
requires
:milestone_id
,
type:
Integer
,
desc:
'The ID of a group milestone'
use
:pagination
end
get
':id/milestones/:milestone_id/merge_requests'
do
milestone_issuables_for
(
user_group
,
:merge_request
)
end
end
end
end
This diff is collapsed.
Click to expand it.
lib/api/helpers.rb
View file @
c5c9dce2
...
@@ -25,6 +25,10 @@ module API
...
@@ -25,6 +25,10 @@ module API
initial_current_user
!=
current_user
initial_current_user
!=
current_user
end
end
def
user_group
@group
||=
find_group!
(
params
[
:id
])
end
def
user_project
def
user_project
@project
||=
find_project!
(
params
[
:id
])
@project
||=
find_project!
(
params
[
:id
])
end
end
...
...
This diff is collapsed.
Click to expand it.
lib/api/milestone_responses.rb
0 → 100644
View file @
c5c9dce2
module
API
module
MilestoneResponses
extend
ActiveSupport
::
Concern
included
do
helpers
do
params
:optional_params
do
optional
:description
,
type:
String
,
desc:
'The description of the milestone'
optional
:due_date
,
type:
String
,
desc:
'The due date of the milestone. The ISO 8601 date format (%Y-%m-%d)'
optional
:start_date
,
type:
String
,
desc:
'The start date of the milestone. The ISO 8601 date format (%Y-%m-%d)'
end
params
:list_params
do
optional
:state
,
type:
String
,
values:
%w[active closed all]
,
default:
'all'
,
desc:
'Return "active", "closed", or "all" milestones'
optional
:iids
,
type:
Array
[
Integer
],
desc:
'The IIDs of the milestones'
optional
:search
,
type:
String
,
desc:
'The search criteria for the title or description of the milestone'
use
:pagination
end
params
:update_params
do
requires
:milestone_id
,
type:
Integer
,
desc:
'The milestone ID number'
optional
:title
,
type:
String
,
desc:
'The title of the milestone'
optional
:state_event
,
type:
String
,
values:
%w[close activate]
,
desc:
'The state event of the milestone '
use
:optional_params
at_least_one_of
:title
,
:description
,
:due_date
,
:state_event
end
def
list_milestones_for
(
parent
)
milestones
=
parent
.
milestones
milestones
=
Milestone
.
filter_by_state
(
milestones
,
params
[
:state
])
milestones
=
filter_by_iid
(
milestones
,
params
[
:iids
])
if
params
[
:iids
].
present?
milestones
=
filter_by_search
(
milestones
,
params
[
:search
])
if
params
[
:search
]
present
paginate
(
milestones
),
with:
Entities
::
Milestone
end
def
get_milestone_for
(
parent
)
milestone
=
parent
.
milestones
.
find
(
params
[
:milestone_id
])
present
milestone
,
with:
Entities
::
Milestone
end
def
create_milestone_for
(
parent
)
milestone
=
::
Milestones
::
CreateService
.
new
(
parent
,
current_user
,
declared_params
).
execute
if
milestone
.
valid?
present
milestone
,
with:
Entities
::
Milestone
else
render_api_error!
(
"Failed to create milestone
#{
milestone
.
errors
.
messages
}
"
,
400
)
end
end
def
update_milestone_for
(
parent
)
milestone
=
parent
.
milestones
.
find
(
params
.
delete
(
:milestone_id
))
milestone_params
=
declared_params
(
include_missing:
false
)
milestone
=
::
Milestones
::
UpdateService
.
new
(
parent
,
current_user
,
milestone_params
).
execute
(
milestone
)
if
milestone
.
valid?
present
milestone
,
with:
Entities
::
Milestone
else
render_api_error!
(
"Failed to update milestone
#{
milestone
.
errors
.
messages
}
"
,
400
)
end
end
def
milestone_issuables_for
(
parent
,
type
)
milestone
=
parent
.
milestones
.
find
(
params
[
:milestone_id
])
finder_klass
,
entity
=
get_finder_and_entity
(
type
)
params
=
build_finder_params
(
milestone
,
parent
)
issuables
=
finder_klass
.
new
(
current_user
,
params
).
execute
present
paginate
(
issuables
),
with:
entity
,
current_user:
current_user
end
def
build_finder_params
(
milestone
,
parent
)
finder_params
=
{
milestone_title:
milestone
.
title
,
sort:
'label_priority'
}
if
parent
.
is_a?
(
Group
)
finder_params
.
merge
(
group_id:
parent
.
id
)
else
finder_params
.
merge
(
project_id:
parent
.
id
)
end
end
def
get_finder_and_entity
(
type
)
if
type
==
:issue
[
IssuesFinder
,
Entities
::
IssueBasic
]
else
[
MergeRequestsFinder
,
Entities
::
MergeRequestBasic
]
end
end
end
end
end
end
This diff is collapsed.
Click to expand it.
lib/api/milestones.rb
→
lib/api/
project_
milestones.rb
View file @
c5c9dce2
module
API
module
API
class
Milestones
<
Grape
::
API
class
Project
Milestones
<
Grape
::
API
include
PaginationParams
include
PaginationParams
include
MilestoneResponses
before
{
authenticate!
}
before
do
authenticate!
helpers
do
def
filter_milestones_state
(
milestones
,
state
)
case
state
when
'active'
then
milestones
.
active
when
'closed'
then
milestones
.
closed
else
milestones
end
end
params
:optional_params
do
optional
:description
,
type:
String
,
desc:
'The description of the milestone'
optional
:due_date
,
type:
String
,
desc:
'The due date of the milestone. The ISO 8601 date format (%Y-%m-%d)'
optional
:start_date
,
type:
String
,
desc:
'The start date of the milestone. The ISO 8601 date format (%Y-%m-%d)'
end
end
end
params
do
params
do
...
@@ -28,21 +15,12 @@ module API
...
@@ -28,21 +15,12 @@ module API
success
Entities
::
Milestone
success
Entities
::
Milestone
end
end
params
do
params
do
optional
:state
,
type:
String
,
values:
%w[active closed all]
,
default:
'all'
,
use
:list_params
desc:
'Return "active", "closed", or "all" milestones'
optional
:iids
,
type:
Array
[
Integer
],
desc:
'The IIDs of the milestones'
optional
:search
,
type:
String
,
desc:
'The search criteria for the title or description of the milestone'
use
:pagination
end
end
get
":id/milestones"
do
get
":id/milestones"
do
authorize!
:read_milestone
,
user_project
authorize!
:read_milestone
,
user_project
milestones
=
user_project
.
milestones
list_milestones_for
(
user_project
)
milestones
=
filter_milestones_state
(
milestones
,
params
[
:state
])
milestones
=
filter_by_iid
(
milestones
,
params
[
:iids
])
if
params
[
:iids
].
present?
milestones
=
filter_by_search
(
milestones
,
params
[
:search
])
if
params
[
:search
]
present
paginate
(
milestones
),
with:
Entities
::
Milestone
end
end
desc
'Get a single project milestone'
do
desc
'Get a single project milestone'
do
...
@@ -54,8 +32,7 @@ module API
...
@@ -54,8 +32,7 @@ module API
get
":id/milestones/:milestone_id"
do
get
":id/milestones/:milestone_id"
do
authorize!
:read_milestone
,
user_project
authorize!
:read_milestone
,
user_project
milestone
=
user_project
.
milestones
.
find
(
params
[
:milestone_id
])
get_milestone_for
(
user_project
)
present
milestone
,
with:
Entities
::
Milestone
end
end
desc
'Create a new project milestone'
do
desc
'Create a new project milestone'
do
...
@@ -68,38 +45,19 @@ module API
...
@@ -68,38 +45,19 @@ module API
post
":id/milestones"
do
post
":id/milestones"
do
authorize!
:admin_milestone
,
user_project
authorize!
:admin_milestone
,
user_project
milestone
=
::
Milestones
::
CreateService
.
new
(
user_project
,
current_user
,
declared_params
).
execute
create_milestone_for
(
user_project
)
if
milestone
.
valid?
present
milestone
,
with:
Entities
::
Milestone
else
render_api_error!
(
"Failed to create milestone
#{
milestone
.
errors
.
messages
}
"
,
400
)
end
end
end
desc
'Update an existing project milestone'
do
desc
'Update an existing project milestone'
do
success
Entities
::
Milestone
success
Entities
::
Milestone
end
end
params
do
params
do
requires
:milestone_id
,
type:
Integer
,
desc:
'The ID of a project milestone'
use
:update_params
optional
:title
,
type:
String
,
desc:
'The title of the milestone'
optional
:state_event
,
type:
String
,
values:
%w[close activate]
,
desc:
'The state event of the milestone '
use
:optional_params
at_least_one_of
:title
,
:description
,
:due_date
,
:state_event
end
end
put
":id/milestones/:milestone_id"
do
put
":id/milestones/:milestone_id"
do
authorize!
:admin_milestone
,
user_project
authorize!
:admin_milestone
,
user_project
milestone
=
user_project
.
milestones
.
find
(
params
.
delete
(
:milestone_id
))
milestone_params
=
declared_params
(
include_missing:
false
)
update_milestone_for
(
user_project
)
milestone
=
::
Milestones
::
UpdateService
.
new
(
user_project
,
current_user
,
milestone_params
).
execute
(
milestone
)
if
milestone
.
valid?
present
milestone
,
with:
Entities
::
Milestone
else
render_api_error!
(
"Failed to update milestone
#{
milestone
.
errors
.
messages
}
"
,
400
)
end
end
end
desc
'Get all issues for a single project milestone'
do
desc
'Get all issues for a single project milestone'
do
...
@@ -112,16 +70,7 @@ module API
...
@@ -112,16 +70,7 @@ module API
get
":id/milestones/:milestone_id/issues"
do
get
":id/milestones/:milestone_id/issues"
do
authorize!
:read_milestone
,
user_project
authorize!
:read_milestone
,
user_project
milestone
=
user_project
.
milestones
.
find
(
params
[
:milestone_id
])
milestone_issuables_for
(
user_project
,
:issue
)
finder_params
=
{
project_id:
user_project
.
id
,
milestone_title:
milestone
.
title
,
sort:
'label_priority'
}
issues
=
IssuesFinder
.
new
(
current_user
,
finder_params
).
execute
present
paginate
(
issues
),
with:
Entities
::
IssueBasic
,
current_user:
current_user
,
project:
user_project
end
end
desc
'Get all merge requests for a single project milestone'
do
desc
'Get all merge requests for a single project milestone'
do
...
@@ -135,19 +84,7 @@ module API
...
@@ -135,19 +84,7 @@ module API
get
':id/milestones/:milestone_id/merge_requests'
do
get
':id/milestones/:milestone_id/merge_requests'
do
authorize!
:read_milestone
,
user_project
authorize!
:read_milestone
,
user_project
milestone
=
user_project
.
milestones
.
find
(
params
[
:milestone_id
])
milestone_issuables_for
(
user_project
,
:merge_request
)
finder_params
=
{
project_id:
user_project
.
id
,
milestone_title:
milestone
.
title
,
sort:
'label_priority'
}
merge_requests
=
MergeRequestsFinder
.
new
(
current_user
,
finder_params
).
execute
present
paginate
(
merge_requests
),
with:
Entities
::
MergeRequestBasic
,
current_user:
current_user
,
project:
user_project
end
end
end
end
end
end
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/group_milestones_spec.rb
0 → 100644
View file @
c5c9dce2
require
'spec_helper'
describe
API
::
GroupMilestones
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:group
)
{
create
(
:group
,
:private
)
}
let
(
:project
)
{
create
(
:empty_project
,
namespace:
group
)
}
let!
(
:group_member
)
{
create
(
:group_member
,
group:
group
,
user:
user
)
}
let!
(
:closed_milestone
)
{
create
(
:closed_milestone
,
group:
group
,
title:
'version1'
,
description:
'closed milestone'
)
}
let!
(
:milestone
)
{
create
(
:milestone
,
group:
group
,
title:
'version2'
,
description:
'open milestone'
)
}
it_behaves_like
'group and project milestones'
,
"/groups/:id/milestones"
do
let
(
:route
)
{
"/groups/
#{
group
.
id
}
/milestones"
}
end
def
setup_for_group
context_group
.
update
(
visibility_level:
Gitlab
::
VisibilityLevel
::
PUBLIC
)
context_group
.
add_developer
(
user
)
public_project
.
update
(
namespace:
context_group
)
context_group
.
reload
end
end
This diff is collapsed.
Click to expand it.
spec/requests/api/project_milestones_spec.rb
0 → 100644
View file @
c5c9dce2
require
'spec_helper'
describe
API
::
ProjectMilestones
do
let
(
:user
)
{
create
(
:user
)
}
let!
(
:project
)
{
create
(
:empty_project
,
namespace:
user
.
namespace
)
}
let!
(
:closed_milestone
)
{
create
(
:closed_milestone
,
project:
project
,
title:
'version1'
,
description:
'closed milestone'
)
}
let!
(
:milestone
)
{
create
(
:milestone
,
project:
project
,
title:
'version2'
,
description:
'open milestone'
)
}
before
do
project
.
team
<<
[
user
,
:developer
]
end
it_behaves_like
'group and project milestones'
,
"/projects/:id/milestones"
do
let
(
:route
)
{
"/projects/
#{
project
.
id
}
/milestones"
}
end
describe
'PUT /projects/:id/milestones/:milestone_id to test observer on close'
do
it
'creates an activity event when an milestone is closed'
do
expect
(
Event
).
to
receive
(
:create
)
put
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
),
state_event:
'close'
end
end
end
This diff is collapsed.
Click to expand it.
spec/
requests/api/milestones_spec
.rb
→
spec/
support/api/milestones_shared_examples
.rb
View file @
c5c9dce2
require
'spec_helper'
shared_examples_for
'group and project milestones'
do
|
route_definition
|
let
(
:resource_route
)
{
"
#{
route
}
/
#{
milestone
.
id
}
"
}
describe
API
::
Milestones
do
let
(
:user
)
{
create
(
:user
)
}
let!
(
:project
)
{
create
(
:empty_project
,
namespace:
user
.
namespace
)
}
let!
(
:closed_milestone
)
{
create
(
:closed_milestone
,
project:
project
,
title:
'version1'
,
description:
'closed milestone'
)
}
let!
(
:milestone
)
{
create
(
:milestone
,
project:
project
,
title:
'version2'
,
description:
'open milestone'
)
}
let
(
:label_1
)
{
create
(
:label
,
title:
'label_1'
,
project:
project
,
priority:
1
)
}
let
(
:label_1
)
{
create
(
:label
,
title:
'label_1'
,
project:
project
,
priority:
1
)
}
let
(
:label_2
)
{
create
(
:label
,
title:
'label_2'
,
project:
project
,
priority:
2
)
}
let
(
:label_2
)
{
create
(
:label
,
title:
'label_2'
,
project:
project
,
priority:
2
)
}
let
(
:label_3
)
{
create
(
:label
,
title:
'label_3'
,
project:
project
)
}
let
(
:label_3
)
{
create
(
:label
,
title:
'label_3'
,
project:
project
)
}
let
(
:merge_request
)
{
create
(
:merge_request
,
source_project:
project
)
}
let
(
:another_merge_request
)
{
create
(
:merge_request
,
:simple
,
source_project:
project
)
}
before
do
describe
"GET
#{
route_definition
}
"
do
project
.
team
<<
[
user
,
:developer
]
it
'returns milestones list'
do
end
get
api
(
route
,
user
)
describe
'GET /projects/:id/milestones'
do
it
'returns project milestones'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -24,13 +17,13 @@ describe API::Milestones do
...
@@ -24,13 +17,13 @@ describe API::Milestones do
end
end
it
'returns a 401 error if user not authenticated'
do
it
'returns a 401 error if user not authenticated'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
)
get
api
(
route
)
expect
(
response
).
to
have_http_status
(
401
)
expect
(
response
).
to
have_http_status
(
401
)
end
end
it
'returns an array of active milestones'
do
it
'returns an array of active milestones'
do
get
api
(
"
/projects/
#{
project
.
id
}
/milestones
?state=active"
,
user
)
get
api
(
"
#{
route
}
/
?state=active"
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -40,7 +33,7 @@ describe API::Milestones do
...
@@ -40,7 +33,7 @@ describe API::Milestones do
end
end
it
'returns an array of closed milestones'
do
it
'returns an array of closed milestones'
do
get
api
(
"
/projects/
#{
project
.
id
}
/milestones
?state=closed"
,
user
)
get
api
(
"
#{
route
}
/
?state=closed"
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -50,9 +43,9 @@ describe API::Milestones do
...
@@ -50,9 +43,9 @@ describe API::Milestones do
end
end
it
'returns an array of milestones specified by iids'
do
it
'returns an array of milestones specified by iids'
do
other_milestone
=
create
(
:milestone
,
project:
project
)
other_milestone
=
create
(
:milestone
,
project:
try
(
:project
),
group:
try
(
:group
)
)
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
iids:
[
closed_milestone
.
iid
,
other_milestone
.
iid
]
get
api
(
route
,
user
),
iids:
[
closed_milestone
.
iid
,
other_milestone
.
iid
]
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
).
to
be_an
Array
...
@@ -61,25 +54,15 @@ describe API::Milestones do
...
@@ -61,25 +54,15 @@ describe API::Milestones do
end
end
it
'does not return any milestone if none found'
do
it
'does not return any milestone if none found'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
iids:
[
Milestone
.
maximum
(
:iid
).
succ
]
get
api
(
route
,
user
),
iids:
[
Milestone
.
maximum
(
:iid
).
succ
]
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
length
).
to
eq
(
0
)
expect
(
json_response
.
length
).
to
eq
(
0
)
end
end
end
describe
'GET /projects/:id/milestones/:milestone_id'
do
it
'returns a milestone by iids array'
do
it
'returns a project milestone by id'
do
get
api
(
"
#{
route
}
?iids=
#{
closed_milestone
.
iid
}
"
,
user
)
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'title'
]).
to
eq
(
milestone
.
title
)
expect
(
json_response
[
'iid'
]).
to
eq
(
milestone
.
iid
)
end
it
'returns a project milestone by iids array'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones?iids=
#{
closed_milestone
.
iid
}
"
,
user
)
expect
(
response
.
status
).
to
eq
200
expect
(
response
.
status
).
to
eq
200
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -89,8 +72,8 @@ describe API::Milestones do
...
@@ -89,8 +72,8 @@ describe API::Milestones do
expect
(
json_response
.
first
[
'id'
]).
to
eq
closed_milestone
.
id
expect
(
json_response
.
first
[
'id'
]).
to
eq
closed_milestone
.
id
end
end
it
'returns a
project
milestone by searching for title'
do
it
'returns a milestone by searching for title'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
search:
'version2'
get
api
(
route
,
user
),
search:
'version2'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -99,8 +82,8 @@ describe API::Milestones do
...
@@ -99,8 +82,8 @@ describe API::Milestones do
expect
(
json_response
.
first
[
'id'
]).
to
eq
milestone
.
id
expect
(
json_response
.
first
[
'id'
]).
to
eq
milestone
.
id
end
end
it
'returns a
project
milestones by searching for description'
do
it
'returns a milestones by searching for description'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
search:
'open'
get
api
(
route
,
user
),
search:
'open'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -110,9 +93,17 @@ describe API::Milestones do
...
@@ -110,9 +93,17 @@ describe API::Milestones do
end
end
end
end
describe
'GET /projects/:id/milestones/:milestone_id'
do
describe
"GET
#{
route_definition
}
/:milestone_id"
do
it
'returns a project milestone by id'
do
it
'returns a milestone by id'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
)
get
api
(
resource_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'title'
]).
to
eq
(
milestone
.
title
)
expect
(
json_response
[
'iid'
]).
to
eq
(
milestone
.
iid
)
end
it
'returns a milestone by id'
do
get
api
(
resource_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'title'
]).
to
eq
(
milestone
.
title
)
expect
(
json_response
[
'title'
]).
to
eq
(
milestone
.
title
)
...
@@ -120,29 +111,29 @@ describe API::Milestones do
...
@@ -120,29 +111,29 @@ describe API::Milestones do
end
end
it
'returns 401 error if user not authenticated'
do
it
'returns 401 error if user not authenticated'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
)
get
api
(
resource_route
)
expect
(
response
).
to
have_http_status
(
401
)
expect
(
response
).
to
have_http_status
(
401
)
end
end
it
'returns a 404 error if milestone id not found'
do
it
'returns a 404 error if milestone id not found'
do
get
api
(
"
/projects/
#{
project
.
id
}
/milestones
/1234"
,
user
)
get
api
(
"
#{
route
}
/1234"
,
user
)
expect
(
response
).
to
have_http_status
(
404
)
expect
(
response
).
to
have_http_status
(
404
)
end
end
end
end
describe
'POST /projects/:id/milestones'
do
describe
"POST
#{
route_definition
}
"
do
it
'creates a new
project
milestone'
do
it
'creates a new milestone'
do
post
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
title:
'new milestone'
post
api
(
route
,
user
),
title:
'new milestone'
expect
(
response
).
to
have_http_status
(
201
)
expect
(
response
).
to
have_http_status
(
201
)
expect
(
json_response
[
'title'
]).
to
eq
(
'new milestone'
)
expect
(
json_response
[
'title'
]).
to
eq
(
'new milestone'
)
expect
(
json_response
[
'description'
]).
to
be_nil
expect
(
json_response
[
'description'
]).
to
be_nil
end
end
it
'creates a new
project
milestone with description and dates'
do
it
'creates a new milestone with description and dates'
do
post
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
post
api
(
route
,
user
),
title:
'new milestone'
,
description:
'release'
,
due_date:
'2013-03-02'
,
start_date:
'2013-02-02'
title:
'new milestone'
,
description:
'release'
,
due_date:
'2013-03-02'
,
start_date:
'2013-02-02'
expect
(
response
).
to
have_http_status
(
201
)
expect
(
response
).
to
have_http_status
(
201
)
...
@@ -152,20 +143,20 @@ describe API::Milestones do
...
@@ -152,20 +143,20 @@ describe API::Milestones do
end
end
it
'returns a 400 error if title is missing'
do
it
'returns a 400 error if title is missing'
do
post
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
)
post
api
(
route
,
user
)
expect
(
response
).
to
have_http_status
(
400
)
expect
(
response
).
to
have_http_status
(
400
)
end
end
it
'returns a 400 error if params are invalid (duplicate title)'
do
it
'returns a 400 error if params are invalid (duplicate title)'
do
post
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
post
api
(
route
,
user
),
title:
milestone
.
title
,
description:
'release'
,
due_date:
'2013-03-02'
title:
milestone
.
title
,
description:
'release'
,
due_date:
'2013-03-02'
expect
(
response
).
to
have_http_status
(
400
)
expect
(
response
).
to
have_http_status
(
400
)
end
end
it
'creates a new
project
with reserved html characters'
do
it
'creates a new
milestone
with reserved html characters'
do
post
api
(
"/projects/
#{
project
.
id
}
/milestones"
,
user
),
title:
'foo & bar 1.1 -> 2.2'
post
api
(
route
,
user
),
title:
'foo & bar 1.1 -> 2.2'
expect
(
response
).
to
have_http_status
(
201
)
expect
(
response
).
to
have_http_status
(
201
)
expect
(
json_response
[
'title'
]).
to
eq
(
'foo & bar 1.1 -> 2.2'
)
expect
(
json_response
[
'title'
]).
to
eq
(
'foo & bar 1.1 -> 2.2'
)
...
@@ -173,9 +164,9 @@ describe API::Milestones do
...
@@ -173,9 +164,9 @@ describe API::Milestones do
end
end
end
end
describe
'PUT /projects/:id/milestones/:milestone_id'
do
describe
"PUT
#{
route_definition
}
/:milestone_id"
do
it
'updates a
project
milestone'
do
it
'updates a milestone'
do
put
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
),
put
api
(
resource_route
,
user
),
title:
'updated title'
title:
'updated title'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
...
@@ -185,23 +176,21 @@ describe API::Milestones do
...
@@ -185,23 +176,21 @@ describe API::Milestones do
it
'removes a due date if nil is passed'
do
it
'removes a due date if nil is passed'
do
milestone
.
update!
(
due_date:
"2016-08-05"
)
milestone
.
update!
(
due_date:
"2016-08-05"
)
put
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
),
due_date:
nil
put
api
(
resource_route
,
user
),
due_date:
nil
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'due_date'
]).
to
be_nil
expect
(
json_response
[
'due_date'
]).
to
be_nil
end
end
it
'returns a 404 error if milestone id not found'
do
it
'returns a 404 error if milestone id not found'
do
put
api
(
"
/projects/
#{
project
.
id
}
/milestones
/1234"
,
user
),
put
api
(
"
#{
route
}
/1234"
,
user
),
title:
'updated title'
title:
'updated title'
expect
(
response
).
to
have_http_status
(
404
)
expect
(
response
).
to
have_http_status
(
404
)
end
end
end
describe
'PUT /projects/:id/milestones/:milestone_id to close milestone'
do
it
'closes milestone'
do
it
'updates a project milestone'
do
put
api
(
resource_route
,
user
),
put
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
),
state_event:
'close'
state_event:
'close'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
...
@@ -209,21 +198,14 @@ describe API::Milestones do
...
@@ -209,21 +198,14 @@ describe API::Milestones do
end
end
end
end
describe
'PUT /projects/:id/milestones/:milestone_id to test observer on close'
do
describe
"GET
#{
route_definition
}
/:milestone_id/issues"
do
it
'creates an activity event when an milestone is closed'
do
let
(
:issues_route
)
{
"
#{
route
}
/
#{
milestone
.
id
}
/issues"
}
expect
(
Event
).
to
receive
(
:create
)
put
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
"
,
user
),
state_event:
'close'
end
end
describe
'GET /projects/:id/milestones/:milestone_id/issues'
do
before
do
before
do
milestone
.
issues
<<
create
(
:issue
,
project:
project
)
milestone
.
issues
<<
create
(
:issue
,
project:
project
)
end
end
it
'returns
project
issues for a particular milestone'
do
it
'returns issues for a particular milestone'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
user
)
get
api
(
issues_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -231,12 +213,12 @@ describe API::Milestones do
...
@@ -231,12 +213,12 @@ describe API::Milestones do
expect
(
json_response
.
first
[
'milestone'
][
'title'
]).
to
eq
(
milestone
.
title
)
expect
(
json_response
.
first
[
'milestone'
][
'title'
]).
to
eq
(
milestone
.
title
)
end
end
it
'returns
project
issues sorted by label priority'
do
it
'returns issues sorted by label priority'
do
issue_1
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_3
])
issue_1
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_3
])
issue_2
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_1
])
issue_2
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_1
])
issue_3
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_2
])
issue_3
=
create
(
:labeled_issue
,
project:
project
,
milestone:
milestone
,
labels:
[
label_2
])
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
user
)
get
api
(
issues_route
,
user
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
issue_2
.
id
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
issue_2
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
issue_3
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
issue_3
.
id
)
...
@@ -244,44 +226,58 @@ describe API::Milestones do
...
@@ -244,44 +226,58 @@ describe API::Milestones do
end
end
it
'matches V4 response schema for a list of issues'
do
it
'matches V4 response schema for a list of issues'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
user
)
get
api
(
issues_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
match_response_schema
(
'public_api/v4/issues'
)
expect
(
response
).
to
match_response_schema
(
'public_api/v4/issues'
)
end
end
it
'returns a 401 error if user not authenticated'
do
it
'returns a 401 error if user not authenticated'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
)
get
api
(
issues_route
)
expect
(
response
).
to
have_http_status
(
401
)
expect
(
response
).
to
have_http_status
(
401
)
end
end
describe
'confidential issues'
do
describe
'confidential issues'
do
let
(
:public_project
)
{
create
(
:empty_project
,
:public
)
}
let!
(
:public_project
)
{
create
(
:empty_project
,
:public
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
public_project
)
}
let!
(
:context_group
)
{
try
(
:group
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
public_project
)
}
let!
(
:milestone
)
do
let
(
:confidential_issue
)
{
create
(
:issue
,
confidential:
true
,
project:
public_project
)
}
context_group
?
create
(
:milestone
,
group:
context_group
)
:
create
(
:milestone
,
project:
public_project
)
end
let!
(
:issue
)
{
create
(
:issue
,
project:
public_project
)
}
let!
(
:confidential_issue
)
{
create
(
:issue
,
confidential:
true
,
project:
public_project
)
}
let!
(
:issues_route
)
do
if
context_group
"
#{
route
}
/
#{
milestone
.
id
}
/issues"
else
"/projects/
#{
public_project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
end
end
before
do
before
do
# Add public project to the group in context
setup_for_group
if
context_group
public_project
.
team
<<
[
user
,
:developer
]
public_project
.
team
<<
[
user
,
:developer
]
milestone
.
issues
<<
issue
<<
confidential_issue
milestone
.
issues
<<
issue
<<
confidential_issue
end
end
it
'returns confidential issues to team members'
do
it
'returns confidential issues to team members'
do
get
api
(
"/projects/
#{
public_project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
user
)
get
api
(
issues_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
size
).
to
eq
(
2
)
# 2 for projects, 3 for group(which has another project with an issue)
expect
(
json_response
.
size
).
to
be_between
(
2
,
3
)
expect
(
json_response
.
map
{
|
issue
|
issue
[
'id'
]
}).
to
include
(
issue
.
id
,
confidential_issue
.
id
)
expect
(
json_response
.
map
{
|
issue
|
issue
[
'id'
]
}).
to
include
(
issue
.
id
,
confidential_issue
.
id
)
end
end
it
'does not return confidential issues to team members with guest role'
do
it
'does not return confidential issues to team members with guest role'
do
member
=
create
(
:user
)
member
=
create
(
:user
)
project
.
team
<<
[
member
,
:guest
]
p
ublic_p
roject
.
team
<<
[
member
,
:guest
]
get
api
(
"/projects/
#{
public_project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
member
)
get
api
(
issues_route
,
member
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -291,7 +287,7 @@ describe API::Milestones do
...
@@ -291,7 +287,7 @@ describe API::Milestones do
end
end
it
'does not return confidential issues to regular users'
do
it
'does not return confidential issues to regular users'
do
get
api
(
"/projects/
#{
public_project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
create
(
:user
))
get
api
(
issues_route
,
create
(
:user
))
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
@@ -304,30 +300,30 @@ describe API::Milestones do
...
@@ -304,30 +300,30 @@ describe API::Milestones do
issue
.
labels
<<
label_2
issue
.
labels
<<
label_2
confidential_issue
.
labels
<<
label_1
confidential_issue
.
labels
<<
label_1
get
api
(
"/projects/
#{
public_project
.
id
}
/milestones/
#{
milestone
.
id
}
/issues"
,
user
)
get
api
(
issues_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
size
).
to
eq
(
2
)
# 2 for projects, 3 for group(which has another project with an issue)
expect
(
json_response
.
size
).
to
be_between
(
2
,
3
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
confidential_issue
.
id
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
confidential_issue
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
issue
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
issue
.
id
)
end
end
end
end
end
end
describe
'GET /projects/:id/milestones/:milestone_id/merge_requests'
do
describe
"GET
#{
route_definition
}
/:milestone_id/merge_requests"
do
let
(
:merge_request
)
{
create
(
:merge_request
,
source_project:
project
)
}
let
(
:merge_requests_route
)
{
"
#{
route
}
/
#{
milestone
.
id
}
/merge_requests"
}
let
(
:another_merge_request
)
{
create
(
:merge_request
,
:simple
,
source_project:
project
)
}
before
do
before
do
milestone
.
merge_requests
<<
merge_request
milestone
.
merge_requests
<<
merge_request
end
end
it
'returns
project
merge_requests for a particular milestone'
do
it
'returns merge_requests for a particular milestone'
do
# eager-load another_merge_request
# eager-load another_merge_request
another_merge_request
another_merge_request
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/merge_requests"
,
user
)
get
api
(
merge_requests_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
).
to
be_an
Array
...
@@ -336,12 +332,12 @@ describe API::Milestones do
...
@@ -336,12 +332,12 @@ describe API::Milestones do
expect
(
json_response
.
first
[
'milestone'
][
'title'
]).
to
eq
(
milestone
.
title
)
expect
(
json_response
.
first
[
'milestone'
][
'title'
]).
to
eq
(
milestone
.
title
)
end
end
it
'returns
project
merge_requests sorted by label priority'
do
it
'returns merge_requests sorted by label priority'
do
merge_request_1
=
create
(
:labeled_merge_request
,
source_branch:
'branch_1'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_2
])
merge_request_1
=
create
(
:labeled_merge_request
,
source_branch:
'branch_1'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_2
])
merge_request_2
=
create
(
:labeled_merge_request
,
source_branch:
'branch_2'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_1
])
merge_request_2
=
create
(
:labeled_merge_request
,
source_branch:
'branch_2'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_1
])
merge_request_3
=
create
(
:labeled_merge_request
,
source_branch:
'branch_3'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_3
])
merge_request_3
=
create
(
:labeled_merge_request
,
source_branch:
'branch_3'
,
source_project:
project
,
milestone:
milestone
,
labels:
[
label_3
])
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/merge_requests"
,
user
)
get
api
(
merge_requests_route
,
user
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
merge_request_2
.
id
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
merge_request_2
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
merge_request_1
.
id
)
expect
(
json_response
.
second
[
'id'
]).
to
eq
(
merge_request_1
.
id
)
...
@@ -349,20 +345,22 @@ describe API::Milestones do
...
@@ -349,20 +345,22 @@ describe API::Milestones do
end
end
it
'returns a 404 error if milestone id not found'
do
it
'returns a 404 error if milestone id not found'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/1234/merge_requests"
,
user
)
not_found_route
=
"
#{
route
}
/1234/merge_requests"
get
api
(
not_found_route
,
user
)
expect
(
response
).
to
have_http_status
(
404
)
expect
(
response
).
to
have_http_status
(
404
)
end
end
it
'returns a 404 if the user has no access to the milestone'
do
it
'returns a 404 if the user has no access to the milestone'
do
new_user
=
create
:user
new_user
=
create
:user
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/merge_requests"
,
new_user
)
get
api
(
merge_requests_route
,
new_user
)
expect
(
response
).
to
have_http_status
(
404
)
expect
(
response
).
to
have_http_status
(
404
)
end
end
it
'returns a 401 error if user not authenticated'
do
it
'returns a 401 error if user not authenticated'
do
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/merge_requests"
)
get
api
(
merge_requests_route
)
expect
(
response
).
to
have_http_status
(
401
)
expect
(
response
).
to
have_http_status
(
401
)
end
end
...
@@ -372,7 +370,7 @@ describe API::Milestones do
...
@@ -372,7 +370,7 @@ describe API::Milestones do
another_merge_request
.
labels
<<
label_1
another_merge_request
.
labels
<<
label_1
merge_request
.
labels
<<
label_2
merge_request
.
labels
<<
label_2
get
api
(
"/projects/
#{
project
.
id
}
/milestones/
#{
milestone
.
id
}
/merge_requests"
,
user
)
get
api
(
merge_requests_route
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
response
).
to
include_pagination_headers
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment