diff options
Diffstat (limited to 'spec/graphql/resolvers/board_list_issues_resolver_spec.rb')
-rw-r--r-- | spec/graphql/resolvers/board_list_issues_resolver_spec.rb | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/spec/graphql/resolvers/board_list_issues_resolver_spec.rb b/spec/graphql/resolvers/board_list_issues_resolver_spec.rb index 6ffc8b045e9..26040f4ec1a 100644 --- a/spec/graphql/resolvers/board_list_issues_resolver_spec.rb +++ b/spec/graphql/resolvers/board_list_issues_resolver_spec.rb @@ -17,21 +17,38 @@ RSpec.describe Resolvers::BoardListIssuesResolver do # auth is handled by the parent object context 'when authorized' do - let!(:issue1) { create(:issue, project: project, labels: [label], relative_position: 10) } - let!(:issue2) { create(:issue, project: project, labels: [label, label2], relative_position: 12) } - let!(:issue3) { create(:issue, project: project, labels: [label, label3], relative_position: 10) } + let!(:issue1) { create(:issue, project: project, labels: [label], relative_position: 10, milestone: started_milestone) } + let!(:issue2) { create(:issue, project: project, labels: [label, label2], relative_position: 12, milestone: started_milestone) } + let!(:issue3) { create(:issue, project: project, labels: [label, label3], relative_position: 10, milestone: future_milestone) } + let!(:issue4) { create(:issue, project: project, labels: [label], relative_position: nil) } - it 'returns the issues in the correct order' do + let(:wildcard_started) { 'STARTED' } + let(:filters) { { milestone_title: ["started"], milestone_wildcard_id: wildcard_started } } + + it 'raises a mutually exclusive filter error when milstone wildcard and title are provided' do + expect do + resolve_board_list_issues(args: { filters: filters }) + end.to raise_error(Gitlab::Graphql::Errors::ArgumentError) + end + + it 'returns issues in the correct order with non-nil relative positions', :aggregate_failures do # by relative_position and then ID - issues = resolve_board_list_issues + result = resolve_board_list_issues - expect(issues.map(&:id)).to eq [issue3.id, issue1.id, issue2.id] + expect(result.map(&:id)).to eq [issue3.id, issue1.id, issue2.id, issue4.id] + expect(result.map(&:relative_position)).not_to include(nil) end it 'finds only issues matching filters' do result = resolve_board_list_issues(args: { filters: { label_name: [label.title], not: { label_name: [label2.title] } } }) - expect(result).to match_array([issue1, issue3]) + expect(result).to match_array([issue1, issue3, issue4]) + end + + it 'finds only issues filtered by milestone wildcard' do + result = resolve_board_list_issues(args: { filters: { milestone_wildcard_id: wildcard_started } }) + + expect(result).to match_array([issue1, issue2]) end it 'finds only issues matching search param' do @@ -49,7 +66,7 @@ RSpec.describe Resolvers::BoardListIssuesResolver do it 'accepts assignee wildcard id NONE' do result = resolve_board_list_issues(args: { filters: { assignee_wildcard_id: 'NONE' } }) - expect(result).to match_array([issue1, issue2, issue3]) + expect(result).to match_array([issue1, issue2, issue3, issue4]) end it 'accepts assignee wildcard id ANY' do @@ -71,6 +88,9 @@ RSpec.describe Resolvers::BoardListIssuesResolver do let(:board_parent) { user_project } let(:project) { user_project } + let_it_be(:started_milestone) { create(:milestone, project: user_project, title: 'started milestone', start_date: 1.day.ago, due_date: 1.day.from_now) } + let_it_be(:future_milestone) { create(:milestone, project: user_project, title: 'future milestone', start_date: 1.day.from_now) } + it_behaves_like 'group and project board list issues resolver' end @@ -84,11 +104,14 @@ RSpec.describe Resolvers::BoardListIssuesResolver do let(:board_parent) { group } let!(:project) { create(:project, :private, group: group) } + let_it_be(:started_milestone) { create(:milestone, group: group, title: 'started milestone', start_date: 1.day.ago, due_date: 1.day.from_now) } + let_it_be(:future_milestone) { create(:milestone, group: group, title: 'future milestone', start_date: 1.day.from_now) } + it_behaves_like 'group and project board list issues resolver' end end def resolve_board_list_issues(args: {}, current_user: user) - resolve(described_class, obj: list, args: args, ctx: { current_user: current_user }) + resolve(described_class, obj: list, args: args, ctx: { current_user: current_user }).items end end |