diff options
Diffstat (limited to 'spec/requests/api/issues/issues_spec.rb')
-rw-r--r-- | spec/requests/api/issues/issues_spec.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/spec/requests/api/issues/issues_spec.rb b/spec/requests/api/issues/issues_spec.rb index 519bea22501..b638a65d65e 100644 --- a/spec/requests/api/issues/issues_spec.rb +++ b/spec/requests/api/issues/issues_spec.rb @@ -28,6 +28,7 @@ RSpec.describe API::Issues do updated_at: 3.hours.ago, closed_at: 1.hour.ago end + let!(:confidential_issue) do create :issue, :confidential, @@ -37,6 +38,7 @@ RSpec.describe API::Issues do created_at: generate(:past_time), updated_at: 2.hours.ago end + let!(:issue) do create :issue, author: user, @@ -48,6 +50,7 @@ RSpec.describe API::Issues do title: issue_title, description: issue_description end + let_it_be(:label) do create(:label, title: 'label', color: '#FFAABB', project: project) end @@ -384,6 +387,60 @@ RSpec.describe API::Issues do end end + context 'filtering by due date' do + # This date chosen because it is the beginning of a week + near the beginning of a month + let_it_be(:frozen_time) { DateTime.parse('2020-08-03 12:00') } + + let_it_be(:issue2) { create(:issue, project: project, author: user, due_date: frozen_time + 3.days) } + let_it_be(:issue3) { create(:issue, project: project, author: user, due_date: frozen_time + 10.days) } + let_it_be(:issue4) { create(:issue, project: project, author: user, due_date: frozen_time + 34.days) } + let_it_be(:issue5) { create(:issue, project: project, author: user, due_date: frozen_time - 8.days) } + + before do + travel_to(frozen_time) + end + + after do + travel_back + end + + it 'returns them all when argument is empty' do + get api('/issues?due_date=', user) + + expect_paginated_array_response(issue5.id, issue4.id, issue3.id, issue2.id, issue.id, closed_issue.id) + end + + it 'returns issues without due date' do + get api('/issues?due_date=0', user) + + expect_paginated_array_response(issue.id, closed_issue.id) + end + + it 'returns issues due for this week' do + get api('/issues?due_date=week', user) + + expect_paginated_array_response(issue2.id) + end + + it 'returns issues due for this month' do + get api('/issues?due_date=month', user) + + expect_paginated_array_response(issue3.id, issue2.id) + end + + it 'returns issues that are due previous two weeks and next month' do + get api('/issues?due_date=next_month_and_previous_two_weeks', user) + + expect_paginated_array_response(issue5.id, issue4.id, issue3.id, issue2.id) + end + + it 'returns issues that are overdue' do + get api('/issues?due_date=overdue', user) + + expect_paginated_array_response(issue5.id) + end + end + context 'filter by labels or label_name param' do context 'N+1' do let(:label_b) { create(:label, title: 'foo', project: project) } @@ -807,6 +864,7 @@ RSpec.describe API::Issues do target_project: private_mrs_project, description: "closes #{issue.to_reference(private_mrs_project)}") end + let!(:merge_request2) do create(:merge_request, :simple, |