From ab261efc36e2e1694e326256ec41127568295e37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jarka=20Ko=C5=A1anov=C3=A1?= <jarka@gitlab.com>
Date: Thu, 1 Nov 2018 07:27:11 +0100
Subject: [PATCH] Filter epics by state in API

---
 doc/api/epics.md                                    |  2 ++
 ee/changelogs/unreleased/7615-api-status-filter.yml |  5 +++++
 ee/lib/api/epics.rb                                 |  2 ++
 ee/spec/requests/api/epics_spec.rb                  | 13 +++++++++++++
 4 files changed, 22 insertions(+)
 create mode 100644 ee/changelogs/unreleased/7615-api-status-filter.yml

diff --git a/doc/api/epics.md b/doc/api/epics.md
index 730ea126b78..67e3e39aa29 100644
--- a/doc/api/epics.md
+++ b/doc/api/epics.md
@@ -26,6 +26,7 @@ Gets all epics of the requested group and its subgroups.
 GET /groups/:id/epics
 GET /groups/:id/epics?author_id=5
 GET /groups/:id/epics?labels=bug,reproduced
+GET /groups/:id/epics?state=opened
 ```
 
 | Attribute           | Type             | Required   | Description                                                                            |
@@ -36,6 +37,7 @@ GET /groups/:id/epics?labels=bug,reproduced
 | `order_by`          | string           | no         | Return epics ordered by `created_at` or `updated_at` fields. Default is `created_at`                                                               |
 | `sort`              | string           | no         | Return epics sorted in `asc` or `desc` order. Default is `desc`                                                                                    |
 | `search`            | string           | no         | Search epics against their `title` and `description`                                                                                               |
+| `state`             | string           | no         | Search epics against their `state`, possible filters: `opened`, `closed` and `all`, default: `all`                                                 |
 
 ```bash
 curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/1/epics
diff --git a/ee/changelogs/unreleased/7615-api-status-filter.yml b/ee/changelogs/unreleased/7615-api-status-filter.yml
new file mode 100644
index 00000000000..26d6d2a3a7a
--- /dev/null
+++ b/ee/changelogs/unreleased/7615-api-status-filter.yml
@@ -0,0 +1,5 @@
+---
+title: Filter epics by state in API
+merge_request: 8179
+author:
+type: added
diff --git a/ee/lib/api/epics.rb b/ee/lib/api/epics.rb
index 5b27031b67f..9361b58cc00 100644
--- a/ee/lib/api/epics.rb
+++ b/ee/lib/api/epics.rb
@@ -58,6 +58,8 @@ module API
         optional :sort, type: String, values: %w[asc desc], default: 'desc',
                         desc: 'Return epics sorted in `asc` or `desc` order.'
         optional :search, type: String, desc: 'Search epics for text present in the title or description'
+        optional :state, type: String, values: %w[opened closed all], default: 'all',
+                         desc: 'Return opened, closed, or all epics'
         optional :author_id, type: Integer, desc: 'Return epics which are authored by the user with the given ID'
         optional :labels, type: String, desc: 'Comma-separated list of label names'
       end
diff --git a/ee/spec/requests/api/epics_spec.rb b/ee/spec/requests/api/epics_spec.rb
index b47071e7544..3306ea25c8c 100644
--- a/ee/spec/requests/api/epics_spec.rb
+++ b/ee/spec/requests/api/epics_spec.rb
@@ -92,6 +92,7 @@ describe API::Epics do
       let!(:epic) do
         create(:epic,
                group: group,
+               state: :closed,
                created_at: 3.days.ago,
                updated_at: 2.days.ago)
       end
@@ -135,6 +136,18 @@ describe API::Epics do
         expect_array_response([epic2.id])
       end
 
+      it 'returns epics matching given status' do
+        get api(url, user), state: :opened
+
+        expect_array_response([epic2.id])
+      end
+
+      it 'returns all epics when state set to all' do
+        get api(url, user), state: :all
+
+        expect_array_response([epic2.id, epic.id])
+      end
+
       it 'sorts by created_at descending by default' do
         get api(url, user)
 
-- 
2.30.9