Skip to content

Commit ef633d2

Browse files
committed
add since and until params to issuables
1 parent 0037cf6 commit ef633d2

File tree

8 files changed

+87
-3
lines changed

8 files changed

+87
-3
lines changed

app/finders/issuable_finder.rb

+13
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def execute
4141
items = by_iids(items)
4242
items = by_milestone(items)
4343
items = by_label(items)
44+
items = by_created_at(items)
4445

4546
# Filtering by project HAS TO be the last because we use the project IDs yielded by the issuable query thus far
4647
items = by_project(items)
@@ -402,6 +403,18 @@ def by_non_archived(items)
402403
params[:non_archived].present? ? items.non_archived : items
403404
end
404405

406+
def by_created_at(items)
407+
if params[:created_after].present?
408+
items = items.where(items.klass.arel_table[:created_at].gteq(params[:created_after]))
409+
end
410+
411+
if params[:created_before].present?
412+
items = items.where(items.klass.arel_table[:created_at].lteq(params[:created_before]))
413+
end
414+
415+
items
416+
end
417+
405418
def current_user_related?
406419
params[:scope] == 'created-by-me' || params[:scope] == 'authored' || params[:scope] == 'assigned-to-me'
407420
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: Added "created_after" and "created_before" params to issuables
3+
merge_request: 12151
4+
author: Kyle Bishop @kybishop

doc/api/issues.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ GET /projects/:id/issues?search=issue+title+or+description
221221
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
222222
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
223223
| `search` | string | no | Search project issues against their `title` and `description` |
224-
224+
| `created_after` | datetime | no | Return issues created after the given time (inclusive) |
225+
| `created_before` | datetime | no | Return issues created before the given time (inclusive) |
225226

226227
```bash
227228
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/issues

doc/api/merge_requests.md

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ Parameters:
2626
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
2727
| `milestone` | string | no | Return merge requests for a specific milestone |
2828
| `labels` | string | no | Return merge requests matching a comma separated list of labels |
29+
| `created_after` | datetime | no | Return merge requests created after the given time (inclusive) |
30+
| `created_before` | datetime | no | Return merge requests created before the given time (inclusive) |
2931

3032
```json
3133
[

lib/api/issues.rb

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ def find_issues(args = {})
2727
optional :milestone, type: String, desc: 'Return issues for a specific milestone'
2828
optional :iids, type: Array[Integer], desc: 'The IID array of issues'
2929
optional :search, type: String, desc: 'Search issues for text present in the title or description'
30+
optional :created_after, type: DateTime, desc: 'Return issues created after the specified time'
31+
optional :created_before, type: DateTime, desc: 'Return issues created before the specified time'
3032
use :pagination
3133
end
3234

lib/api/merge_requests.rb

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ def find_merge_requests(args = {})
7272
optional :iids, type: Array[Integer], desc: 'The IID array of merge requests'
7373
optional :milestone, type: String, desc: 'Return merge requests for a specific milestone'
7474
optional :labels, type: String, desc: 'Comma-separated list of label names'
75+
optional :created_after, type: DateTime, desc: 'Return merge requests created after the specified time'
76+
optional :created_before, type: DateTime, desc: 'Return merge requests created before the specified time'
7577
use :pagination
7678
end
7779
get ":id/merge_requests" do

spec/finders/issues_finder_spec.rb

+20-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
set(:project2) { create(:empty_project) }
88
set(:milestone) { create(:milestone, project: project1) }
99
set(:label) { create(:label, project: project2) }
10-
set(:issue1) { create(:issue, author: user, assignees: [user], project: project1, milestone: milestone, title: 'gitlab') }
10+
set(:issue1) { create(:issue, author: user, assignees: [user], project: project1, milestone: milestone, title: 'gitlab', created_at: 1.week.ago) }
1111
set(:issue2) { create(:issue, author: user, assignees: [user], project: project2, description: 'gitlab') }
12-
set(:issue3) { create(:issue, author: user2, assignees: [user2], project: project2, title: 'tanuki', description: 'tanuki') }
12+
set(:issue3) { create(:issue, author: user2, assignees: [user2], project: project2, title: 'tanuki', description: 'tanuki', created_at: 1.week.from_now) }
1313

1414
describe '#execute' do
1515
set(:closed_issue) { create(:issue, author: user2, assignees: [user2], project: project2, state: 'closed') }
@@ -213,6 +213,24 @@
213213
end
214214
end
215215

216+
context 'filtering by created_at' do
217+
context 'through created_after' do
218+
let(:params) { { created_after: issue3.created_at } }
219+
220+
it 'returns issues created on or after the given date' do
221+
expect(issues).to contain_exactly(issue3)
222+
end
223+
end
224+
225+
context 'through created_before' do
226+
let(:params) { { created_before: issue1.created_at + 1.second } }
227+
228+
it 'returns issues created on or before the given date' do
229+
expect(issues).to contain_exactly(issue1)
230+
end
231+
end
232+
end
233+
216234
context 'when the user is unauthorized' do
217235
let(:search_user) { nil }
218236

spec/finders/merge_requests_finder_spec.rb

+42
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,47 @@
4646

4747
expect(merge_requests).to contain_exactly(merge_request1)
4848
end
49+
50+
context 'with created_after and created_before params' do
51+
let(:project4) { create(:empty_project, forked_from_project: project1) }
52+
53+
let!(:new_merge_request) do
54+
create(:merge_request,
55+
:simple,
56+
author: user,
57+
created_at: 1.week.from_now,
58+
source_project: project4,
59+
target_project: project1)
60+
end
61+
62+
let!(:old_merge_request) do
63+
create(:merge_request,
64+
:simple,
65+
author: user,
66+
created_at: 1.week.ago,
67+
source_project: project4,
68+
target_project: project4)
69+
end
70+
71+
before do
72+
project4.add_master(user)
73+
end
74+
75+
it 'filters by created_after' do
76+
params = { project_id: project1.id, created_after: new_merge_request.created_at }
77+
78+
merge_requests = described_class.new(user, params).execute
79+
80+
expect(merge_requests).to contain_exactly(new_merge_request)
81+
end
82+
83+
it 'filters by created_before' do
84+
params = { project_id: project4.id, created_before: old_merge_request.created_at + 1.second }
85+
86+
merge_requests = described_class.new(user, params).execute
87+
88+
expect(merge_requests).to contain_exactly(old_merge_request)
89+
end
90+
end
4991
end
5092
end

0 commit comments

Comments
 (0)