Merge branch '30195-document-search-param-on-api' into 'master'
Add "search" optional param and docs for V4 Closes #30195 See merge request !10358
This commit is contained in:
commit
50a0fd03ad
4 changed files with 231 additions and 292 deletions
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Add search optional param and docs for V4
|
||||
merge_request:
|
||||
author:
|
|
@ -26,16 +26,20 @@ GET /issues?labels=foo,bar&state=opened
|
|||
GET /issues?milestone=1.0.0
|
||||
GET /issues?milestone=1.0.0&state=opened
|
||||
GET /issues?iids[]=42&iids[]=43
|
||||
GET /issues?search=issue+title+or+description
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed`|
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `milestone` | string| no | The milestone title |
|
||||
| `iids` | Array[integer] | no | Return only the issues having the given `iid` |
|
||||
| `order_by`| string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed` |
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `milestone` | string | no | The milestone title |
|
||||
| `iids` | Array[integer] | no | Return only the issues having the given `iid` |
|
||||
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
| `search` | string | no | Search issues against their `title` and `description` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/issues
|
||||
|
@ -104,17 +108,21 @@ GET /groups/:id/issues?labels=foo,bar&state=opened
|
|||
GET /groups/:id/issues?milestone=1.0.0
|
||||
GET /groups/:id/issues?milestone=1.0.0&state=opened
|
||||
GET /groups/:id/issues?iids[]=42&iids[]=43
|
||||
GET /groups/:id/issues?search=issue+title+or+description
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `id` | integer | yes | The ID of a group |
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed`|
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `iids` | Array[integer] | no | Return only the issues having the given `iid` |
|
||||
| `milestone` | string| no | The milestone title |
|
||||
| `order_by`| string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a group |
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed` |
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `iids` | Array[integer] | no | Return only the issues having the given `iid` |
|
||||
| `milestone` | string | no | The milestone title |
|
||||
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
| `search` | string | no | Search group issues against their `title` and `description` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
|
||||
|
||||
```bash
|
||||
|
@ -184,17 +192,21 @@ GET /projects/:id/issues?labels=foo,bar&state=opened
|
|||
GET /projects/:id/issues?milestone=1.0.0
|
||||
GET /projects/:id/issues?milestone=1.0.0&state=opened
|
||||
GET /projects/:id/issues?iids[]=42&iids[]=43
|
||||
GET /projects/:id/issues?search=issue+title+or+description
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `iids` | Array[integer] | no | Return only the milestone having the given `iid` |
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed`|
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `milestone` | string| no | The milestone title |
|
||||
| `order_by`| string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `iids` | Array[integer] | no | Return only the milestone having the given `iid` |
|
||||
| `state` | string | no | Return all issues or just those that are `opened` or `closed` |
|
||||
| `labels` | string | no | Comma-separated list of label names, issues must have all labels to be returned. `No+Label` lists all issues with no labels |
|
||||
| `milestone` | string | no | The milestone title |
|
||||
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
|
||||
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
|
||||
| `search` | string | no | Search project issues against their `title` and `description` |
|
||||
|-------------+----------------+----------+-----------------------------------------------------------------------------------------------------------------------------|
|
||||
|
||||
|
||||
```bash
|
||||
|
@ -258,10 +270,12 @@ Get a single project issue.
|
|||
GET /projects/:id/issues/:issue_iid
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues/41
|
||||
|
@ -323,19 +337,23 @@ Creates a new project issue.
|
|||
POST /projects/:id/issues
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `title` | string | yes | The title of an issue |
|
||||
| `description` | string | no | The description of an issue |
|
||||
| `confidential` | boolean | no | Set an issue to be confidential. Default is `false`. |
|
||||
| `assignee_id` | integer | no | The ID of a user to assign issue |
|
||||
| `milestone_id` | integer | no | The ID of a milestone to assign issue |
|
||||
| `labels` | string | no | Comma-separated label names for an issue |
|
||||
| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) |
|
||||
| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
|
||||
| `merge_request_to_resolve_discussions_of` | integer | no | The IID of a merge request in which to resolve all issues. This will fill the issue with a default description and mark all discussions as resolved. When passing a description or title, these values will take precedence over the default values. |
|
||||
| `discussion_to_resolve` | string | no | The ID of a discussion to resolve. This will fill in the issue with a default description and mark the discussion as resolved. Use in combination with `merge_request_to_resolve_discussions_of`. |
|
||||
|-------------------------------------------+---------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
|-------------------------------------------+---------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `title` | string | yes | The title of an issue |
|
||||
| `description` | string | no | The description of an issue |
|
||||
| `confidential` | boolean | no | Set an issue to be confidential. Default is `false`. |
|
||||
| `assignee_id` | integer | no | The ID of a user to assign issue |
|
||||
| `milestone_id` | integer | no | The ID of a milestone to assign issue |
|
||||
| `labels` | string | no | Comma-separated label names for an issue |
|
||||
| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) |
|
||||
| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
|
||||
| `merge_request_to_resolve_discussions_of` | integer | no | The IID of a merge request in which to resolve all issues. This will fill the issue with a default description and mark all discussions as resolved. |
|
||||
| - | - | - | When passing a description or title, these values will take precedence over the default values. |
|
||||
| `discussion_to_resolve` | string | no | The ID of a discussion to resolve. This will fill in the issue with a default description and mark the discussion |
|
||||
| - | - | - | as resolved. Use in combination with `merge_request_to_resolve_discussions_of`. |
|
||||
|-------------------------------------------+---------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues?title=Issues%20with%20auth&labels=bug
|
||||
|
@ -383,8 +401,9 @@ closed.
|
|||
PUT /projects/:id/issues/:issue_iid
|
||||
```
|
||||
|
||||
|----------------+---------+----------+------------------------------------------------------------------------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|----------------+---------+----------+------------------------------------------------------------------------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
| `title` | string | no | The title of an issue |
|
||||
|
@ -396,6 +415,7 @@ PUT /projects/:id/issues/:issue_iid
|
|||
| `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it |
|
||||
| `updated_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) |
|
||||
| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
|
||||
|----------------+---------+----------+------------------------------------------------------------------------------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues/85?state_event=close
|
||||
|
@ -442,10 +462,12 @@ Only for admins and project owners. Soft deletes the issue in question.
|
|||
DELETE /projects/:id/issues/:issue_iid
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues/85
|
||||
|
@ -464,11 +486,13 @@ project, it will then be assigned to the issue that is being moved.
|
|||
POST /projects/:id/issues/:issue_iid/move
|
||||
```
|
||||
|
||||
|-----------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-----------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
| `to_project_id` | integer | yes | The ID of the new project |
|
||||
|-----------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues/85/move
|
||||
|
@ -520,10 +544,12 @@ is returned.
|
|||
POST /projects/:id/issues/:issue_iid/subscribe
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/subscribe
|
||||
|
@ -575,10 +601,12 @@ status code `304` is returned.
|
|||
POST /projects/:id/issues/:issue_iid/unsubscribe
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/unsubscribe
|
||||
|
@ -594,10 +622,12 @@ returned.
|
|||
POST /projects/:id/issues/:issue_iid/todo
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/todo
|
||||
|
@ -685,11 +715,13 @@ Sets an estimated time of work for this issue.
|
|||
POST /projects/:id/issues/:issue_iid/time_estimate
|
||||
```
|
||||
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
| `duration` | string | yes | The duration in human format. e.g: 3h30m |
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/time_estimate?duration=3h30m
|
||||
|
@ -714,10 +746,12 @@ Resets the estimated time for this issue to 0 seconds.
|
|||
POST /projects/:id/issues/:issue_iid/reset_time_estimate
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/reset_time_estimate
|
||||
|
@ -742,11 +776,13 @@ Adds spent time for this issue
|
|||
POST /projects/:id/issues/:issue_iid/add_spent_time
|
||||
```
|
||||
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
| `duration` | string | yes | The duration in human format. e.g: 3h30m |
|
||||
|-------------+---------+----------+------------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/add_spent_time?duration=1h
|
||||
|
@ -771,10 +807,12 @@ Resets the total spent time for this issue to 0 seconds.
|
|||
POST /projects/:id/issues/:issue_iid/reset_spent_time
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/reset_spent_time
|
||||
|
@ -797,10 +835,12 @@ Example response:
|
|||
GET /projects/:id/issues/:issue_iid/time_stats
|
||||
```
|
||||
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
| `id` | integer | yes | The ID of a project |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|-------------+---------+----------+--------------------------------------|
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/time_stats
|
||||
|
|
|
@ -26,6 +26,7 @@ module API
|
|||
desc: 'Return issues sorted in `asc` or `desc` order.'
|
||||
optional :milestone, type: String, desc: 'Return issues for a specific milestone'
|
||||
optional :iids, type: Array[Integer], desc: 'The IID array of issues'
|
||||
optional :search, type: String, desc: 'Search issues for text present in the title or description'
|
||||
use :pagination
|
||||
end
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@ describe API::Issues, api: true do
|
|||
let(:assignee) { create(:assignee) }
|
||||
let(:admin) { create(:user, :admin) }
|
||||
let!(:project) { create(:empty_project, :public, creator_id: user.id, namespace: user.namespace ) }
|
||||
let(:issue_title) { 'foo' }
|
||||
let(:issue_description) { 'closed' }
|
||||
let!(:closed_issue) do
|
||||
create :closed_issue,
|
||||
author: user,
|
||||
|
@ -38,7 +40,9 @@ describe API::Issues, api: true do
|
|||
project: project,
|
||||
milestone: milestone,
|
||||
created_at: generate(:past_time),
|
||||
updated_at: 1.hour.ago
|
||||
updated_at: 1.hour.ago,
|
||||
title: issue_title,
|
||||
description: issue_description
|
||||
end
|
||||
let!(:label) do
|
||||
create(:label, title: 'label', color: '#FFAABB', project: project)
|
||||
|
@ -61,6 +65,7 @@ describe API::Issues, api: true do
|
|||
context "when unauthenticated" do
|
||||
it "returns authentication error" do
|
||||
get api("/issues")
|
||||
|
||||
expect(response).to have_http_status(401)
|
||||
end
|
||||
end
|
||||
|
@ -69,9 +74,7 @@ describe API::Issues, api: true do
|
|||
it "returns an array of issues" do
|
||||
get api("/issues", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
expect(json_response.last).to have_key('web_url')
|
||||
end
|
||||
|
@ -79,41 +82,43 @@ describe API::Issues, api: true do
|
|||
it 'returns an array of closed issues' do
|
||||
get api('/issues?state=closed', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of opened issues' do
|
||||
get api('/issues?state=opened', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of all issues' do
|
||||
get api('/issues?state=all', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
expect(json_response.second['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for title' do
|
||||
get api("/issues?search=#{issue.title}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for description' do
|
||||
get api("/issues?search=#{issue.description}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of labeled issues' do
|
||||
get api("/issues?labels=#{label.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label.title])
|
||||
end
|
||||
|
||||
|
@ -126,29 +131,20 @@ describe API::Issues, api: true do
|
|||
|
||||
get api("/issues", user), labels: "#{label.title},#{label_b.title},#{label_c.title}"
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label_c.title, label_b.title, label.title])
|
||||
end
|
||||
|
||||
it 'returns an empty array if no issue matches labels' do
|
||||
get api('/issues?labels=foo,bar', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an array of labeled issues matching given state' do
|
||||
get api("/issues?labels=#{label.title}&state=opened", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label.title])
|
||||
expect(json_response.first['state']).to eq('opened')
|
||||
end
|
||||
|
@ -156,47 +152,32 @@ describe API::Issues, api: true do
|
|||
it 'returns unlabeled issues for "No Label" label' do
|
||||
get api("/issues", user), labels: 'No Label'
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to be_empty
|
||||
end
|
||||
|
||||
it 'returns an empty array if no issue matches labels and state filters' do
|
||||
get api("/issues?labels=#{label.title}&state=closed", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if no issue matches milestone' do
|
||||
get api("/issues?milestone=#{empty_milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if milestone does not exist' do
|
||||
get api("/issues?milestone=foo", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an array of issues in given milestone' do
|
||||
get api("/issues?milestone=#{milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
expect(json_response.second['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
@ -205,49 +186,36 @@ describe API::Issues, api: true do
|
|||
get api("/issues?milestone=#{milestone.title}"\
|
||||
'&state=closed', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of issues with no milestone' do
|
||||
get api("/issues?milestone=#{no_milestone_title}", author)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(confidential_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of issues found by iids' do
|
||||
get api('/issues', user), iids: [closed_issue.iid]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an empty array if iid does not exist' do
|
||||
get api("/issues", user), iids: [99999]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'sorts by created_at descending by default' do
|
||||
get api('/issues', user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -255,9 +223,8 @@ describe API::Issues, api: true do
|
|||
get api('/issues?sort=asc', user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
|
||||
|
@ -265,9 +232,8 @@ describe API::Issues, api: true do
|
|||
get api('/issues?order_by=updated_at', user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -275,9 +241,8 @@ describe API::Issues, api: true do
|
|||
get api('/issues?order_by=updated_at&sort=asc', user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
|
||||
|
@ -316,7 +281,9 @@ describe API::Issues, api: true do
|
|||
assignee: user,
|
||||
project: group_project,
|
||||
milestone: group_milestone,
|
||||
updated_at: 1.hour.ago
|
||||
updated_at: 1.hour.ago,
|
||||
title: issue_title,
|
||||
description: issue_description
|
||||
end
|
||||
let!(:group_label) do
|
||||
create(:label, title: 'group_lbl', color: '#FFAABB', project: group_project)
|
||||
|
@ -336,74 +303,65 @@ describe API::Issues, api: true do
|
|||
it 'returns all group issues (including opened and closed)' do
|
||||
get api(base_url, admin)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(3)
|
||||
expect_paginated_array_response(size: 3)
|
||||
end
|
||||
|
||||
it 'returns group issues without confidential issues for non project members' do
|
||||
get api("#{base_url}?state=opened", non_member)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['title']).to eq(group_issue.title)
|
||||
end
|
||||
|
||||
it 'returns group confidential issues for author' do
|
||||
get api("#{base_url}?state=opened", author)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
end
|
||||
|
||||
it 'returns group confidential issues for assignee' do
|
||||
get api("#{base_url}?state=opened", assignee)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
end
|
||||
|
||||
it 'returns group issues with confidential issues for project members' do
|
||||
get api("#{base_url}?state=opened", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
end
|
||||
|
||||
it 'returns group confidential issues for admin' do
|
||||
get api("#{base_url}?state=opened", admin)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
end
|
||||
|
||||
it 'returns an array of labeled group issues' do
|
||||
get api("#{base_url}?labels=#{group_label.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([group_label.title])
|
||||
end
|
||||
|
||||
it 'returns an array of labeled group issues where all labels match' do
|
||||
get api("#{base_url}?labels=#{group_label.title},foo,bar", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for title' do
|
||||
get api("#{base_url}?search=#{group_issue.title}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_issue.id)
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for description' do
|
||||
get api("#{base_url}?search=#{group_issue.description}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of labeled issues when all labels matches' do
|
||||
|
@ -415,65 +373,45 @@ describe API::Issues, api: true do
|
|||
|
||||
get api("#{base_url}", user), labels: "#{group_label.title},#{label_b.title},#{label_c.title}"
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label_c.title, label_b.title, group_label.title])
|
||||
end
|
||||
|
||||
it 'returns an array of issues found by iids' do
|
||||
get api(base_url, user), iids: [group_issue.iid]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an empty array if iid does not exist' do
|
||||
get api(base_url, user), iids: [99999]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if no group issue matches labels' do
|
||||
get api("#{base_url}?labels=foo,bar", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if no issue matches milestone' do
|
||||
get api("#{base_url}?milestone=#{group_empty_milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if milestone does not exist' do
|
||||
get api("#{base_url}?milestone=foo", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an array of issues in given milestone' do
|
||||
get api("#{base_url}?state=opened&milestone=#{group_milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_issue.id)
|
||||
end
|
||||
|
||||
|
@ -481,10 +419,7 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}?milestone=#{group_milestone.title}"\
|
||||
'&state=closed', user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_closed_issue.id)
|
||||
end
|
||||
|
||||
|
@ -492,9 +427,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}?milestone=#{no_milestone_title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(group_confidential_issue.id)
|
||||
end
|
||||
|
||||
|
@ -502,9 +436,8 @@ describe API::Issues, api: true do
|
|||
get api(base_url, user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -512,9 +445,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}?sort=asc", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
|
||||
|
@ -522,9 +454,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}?order_by=updated_at", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -532,9 +463,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}?order_by=updated_at&sort=asc", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
end
|
||||
|
@ -563,79 +493,55 @@ describe API::Issues, api: true do
|
|||
|
||||
get api("/projects/#{restricted_project.id}/issues", non_member)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response).to eq([])
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns project issues without confidential issues for non project members' do
|
||||
get api("#{base_url}/issues", non_member)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns project issues without confidential issues for project members with guest role' do
|
||||
get api("#{base_url}/issues", guest)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns project confidential issues for author' do
|
||||
get api("#{base_url}/issues", author)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(3)
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns project confidential issues for assignee' do
|
||||
get api("#{base_url}/issues", assignee)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(3)
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns project issues with confidential issues for project members' do
|
||||
get api("#{base_url}/issues", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(3)
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns project confidential issues for admin' do
|
||||
get api("#{base_url}/issues", admin)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(3)
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(json_response.first['title']).to eq(issue.title)
|
||||
end
|
||||
|
||||
it 'returns an array of labeled project issues' do
|
||||
get api("#{base_url}/issues?labels=#{label.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label.title])
|
||||
end
|
||||
|
||||
|
@ -648,74 +554,65 @@ describe API::Issues, api: true do
|
|||
|
||||
get api("#{base_url}/issues", user), labels: "#{label.title},#{label_b.title},#{label_c.title}"
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['labels']).to eq([label_c.title, label_b.title, label.title])
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for title' do
|
||||
get api("#{base_url}/issues?search=#{issue.title}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns issues matching given search string for description' do
|
||||
get api("#{base_url}/issues?search=#{issue.description}", user)
|
||||
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of issues found by iids' do
|
||||
get api("#{base_url}/issues", user), iids: [issue.iid]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
end
|
||||
|
||||
it 'returns an empty array if iid does not exist' do
|
||||
get api("#{base_url}/issues", user), iids: [99999]
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if not all labels matches' do
|
||||
get api("#{base_url}/issues?labels=#{label.title},foo", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if no project issue matches labels' do
|
||||
get api("#{base_url}/issues?labels=foo,bar", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if no issue matches milestone' do
|
||||
get api("#{base_url}/issues?milestone=#{empty_milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an empty array if milestone does not exist' do
|
||||
get api("#{base_url}/issues?milestone=foo", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(0)
|
||||
expect_paginated_array_response(size: 0)
|
||||
end
|
||||
|
||||
it 'returns an array of issues in given milestone' do
|
||||
get api("#{base_url}/issues?milestone=#{milestone.title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(2)
|
||||
expect_paginated_array_response(size: 2)
|
||||
expect(json_response.first['id']).to eq(issue.id)
|
||||
expect(json_response.second['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
@ -723,20 +620,14 @@ describe API::Issues, api: true do
|
|||
it 'returns an array of issues matching state in milestone' do
|
||||
get api("#{base_url}/issues?milestone=#{milestone.title}&state=closed", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(closed_issue.id)
|
||||
end
|
||||
|
||||
it 'returns an array of issues with no milestone' do
|
||||
get api("#{base_url}/issues?milestone=#{no_milestone_title}", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(1)
|
||||
expect_paginated_array_response(size: 1)
|
||||
expect(json_response.first['id']).to eq(confidential_issue.id)
|
||||
end
|
||||
|
||||
|
@ -744,9 +635,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}/issues", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -754,9 +644,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}/issues?sort=asc", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['created_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
|
||||
|
@ -764,9 +653,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}/issues?order_by=updated_at", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort.reverse)
|
||||
end
|
||||
|
||||
|
@ -774,9 +662,8 @@ describe API::Issues, api: true do
|
|||
get api("#{base_url}/issues?order_by=updated_at&sort=asc", user)
|
||||
|
||||
response_dates = json_response.map { |issue| issue['updated_at'] }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
|
||||
expect_paginated_array_response(size: 3)
|
||||
expect(response_dates).to eq(response_dates.sort)
|
||||
end
|
||||
end
|
||||
|
@ -1457,4 +1344,11 @@ describe API::Issues, api: true do
|
|||
|
||||
include_examples 'time tracking endpoints', 'issue'
|
||||
end
|
||||
|
||||
def expect_paginated_array_response(size: nil)
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(size) if size
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue