diff options
Diffstat (limited to 'spec/graphql/resolvers/group_issues_resolver_spec.rb')
-rw-r--r-- | spec/graphql/resolvers/group_issues_resolver_spec.rb | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/spec/graphql/resolvers/group_issues_resolver_spec.rb b/spec/graphql/resolvers/group_issues_resolver_spec.rb index 463cdca699b..e17429560ac 100644 --- a/spec/graphql/resolvers/group_issues_resolver_spec.rb +++ b/spec/graphql/resolvers/group_issues_resolver_spec.rb @@ -29,15 +29,72 @@ RSpec.describe Resolvers::GroupIssuesResolver do describe '#resolve' do it 'finds all group issues' do - result = resolve(described_class, obj: group, ctx: { current_user: current_user }) - - expect(result).to contain_exactly(issue1, issue2, issue3) + expect(resolve_issues).to contain_exactly(issue1, issue2, issue3) end it 'finds all group and subgroup issues' do - result = resolve(described_class, obj: group, args: { include_subgroups: true }, ctx: { current_user: current_user }) + result = resolve_issues(include_subgroups: true) expect(result).to contain_exactly(issue1, issue2, issue3, subissue1, subissue2, subissue3) end + + it 'returns issues without the specified issue_type' do + result = resolve_issues(not: { types: ['issue'] }) + + expect(result).to contain_exactly(issue1) + end + + context 'confidential issues' do + let_it_be(:confidential_issue1) { create(:issue, project: project, confidential: true) } + let_it_be(:confidential_issue2) { create(:issue, project: other_project, confidential: true) } + + context "when user is allowed to view confidential issues" do + it 'returns all viewable issues by default' do + expect(resolve_issues).to contain_exactly(issue1, issue2, issue3, confidential_issue1, confidential_issue2) + end + + context 'filtering for confidential issues' do + it 'returns only the non-confidential issues for the group when filter is set to false' do + expect(resolve_issues({ confidential: false })).to contain_exactly(issue1, issue2, issue3) + end + + it "returns only the confidential issues for the group when filter is set to true" do + expect(resolve_issues({ confidential: true })).to contain_exactly(confidential_issue1, confidential_issue2) + end + end + end + + context "when user is not allowed to see confidential issues" do + before do + group.add_guest(current_user) + end + + it 'returns all viewable issues by default' do + expect(resolve_issues).to contain_exactly(issue1, issue2, issue3) + end + + context 'filtering for confidential issues' do + it 'does not return the confidential issues when filter is set to false' do + expect(resolve_issues({ confidential: false })).to contain_exactly(issue1, issue2, issue3) + end + + it 'does not return the confidential issues when filter is set to true' do + expect(resolve_issues({ confidential: true })).to be_empty + end + end + end + end + + context 'release_tag filter' do + it 'returns an error when trying to filter by negated release_tag' do + expect do + resolve_issues(not: { release_tag: ['v1.0'] }) + end.to raise_error(Gitlab::Graphql::Errors::ArgumentError, 'releaseTag filter is not allowed when parent is a group.') + end + end + end + + def resolve_issues(args = {}, context = { current_user: current_user }) + resolve(described_class, obj: group, args: args, ctx: context) end end |