Commit c4ab6953 authored by Mario Celi's avatar Mario Celi

Board issue filters support negated current iteration

- Support negated IterationIdWildcard for board issue filters
- Move negated_board_issue_input_type into it's own file
parent f20ea92b
......@@ -7,10 +7,10 @@ module BoardIssueFilterable
def issue_filters(args)
filters = args.to_h
set_filter_values(filters)
if filters[:not]
filters[:not] = filters[:not].to_h
set_filter_values(filters[:not])
end
......
......@@ -2,14 +2,12 @@
module Types
module Boards
class NegatedBoardIssueInputType < BoardIssueInputBaseType
end
class BoardIssueInputType < BoardIssueInputBaseType
graphql_name 'BoardIssueInput'
argument :not, NegatedBoardIssueInputType,
required: false,
prepare: ->(negated_args, ctx) { negated_args.to_h },
description: <<~MD
List of negated arguments.
Warning: this argument is experimental and a subject to change in future.
......
# frozen_string_literal: true
module Types
module Boards
class NegatedBoardIssueInputType < BoardIssueInputBaseType
end
end
end
Types::Boards::NegatedBoardIssueInputType.prepend_if_ee('::EE::Types::Boards::NegatedBoardIssueInputType')
# frozen_string_literal: true
module EE
module Types
module Boards
module NegatedBoardIssueInputType
extend ActiveSupport::Concern
prepended do
argument :iteration_wildcard_id, ::Types::Boards::NegatedIterationWildcardIdEnum,
required: false,
description: 'Filter by iteration ID wildcard.'
end
end
end
end
end
# frozen_string_literal: true
module Types
module Boards
class NegatedIterationWildcardIdEnum < BaseEnum
graphql_name 'NegatedIterationWildcardId'
description 'Negated Iteration ID wildcard values'
value 'CURRENT', 'Current iteration.'
end
end
end
......@@ -46,9 +46,11 @@ RSpec.describe Resolvers::BoardListIssuesResolver do
end
context 'filtering by iteration' do
let_it_be(:iteration) { create(:iteration, group: group) }
let_it_be(:iteration) { create(:iteration, group: group, start_date: 1.week.ago, due_date: 2.days.ago) }
let_it_be(:current_iteration) { create(:iteration, :started, group: group, start_date: Date.today, due_date: 1.day.from_now) }
let_it_be(:issue_with_iteration) { create(:issue, project: project, labels: [label], iteration: iteration) }
let_it_be(:issue_without_iteration) { create(:issue, project: project, labels: [label]) }
let_it_be(:issue_with_current_iteration) { create(:issue, project: project, labels: [label], iteration: current_iteration) }
it 'accepts iteration title' do
result = resolve_board_list_issues({ filters: { iteration_title: iteration.title } })
......@@ -61,6 +63,14 @@ RSpec.describe Resolvers::BoardListIssuesResolver do
expect(result).to contain_exactly(issue_without_iteration)
end
context 'filterning by negated iteration' do
it 'accepts iteration wildcard id' do
result = resolve_board_list_issues({ filters: { not: { iteration_wildcard_id: 'CURRENT' } } })
expect(result).to contain_exactly(issue_without_iteration, issue_with_iteration)
end
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment