diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-04 21:12:46 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-04 21:12:46 +0300 |
commit | 8a0a54ab92c509c6b480059a5f2730869c99d454 (patch) | |
tree | fd963a83cd9991663b525e485cae8af8b0851b88 /spec/graphql/resolvers | |
parent | e9ab4187093f05b873b32045295eeb580c97cdce (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/graphql/resolvers')
-rw-r--r-- | spec/graphql/resolvers/issues_resolver_spec.rb | 97 |
1 files changed, 90 insertions, 7 deletions
diff --git a/spec/graphql/resolvers/issues_resolver_spec.rb b/spec/graphql/resolvers/issues_resolver_spec.rb index 3a7c778da62..9897e697009 100644 --- a/spec/graphql/resolvers/issues_resolver_spec.rb +++ b/spec/graphql/resolvers/issues_resolver_spec.rb @@ -26,7 +26,14 @@ RSpec.describe Resolvers::IssuesResolver do expect(described_class).to have_nullable_graphql_type(Types::IssueType.connection_type) end + shared_context 'filtering for 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) } + end + context "with a project" do + let(:obj) { project } + before_all do project.add_developer(current_user) project.add_reporter(reporter) @@ -222,6 +229,42 @@ RSpec.describe Resolvers::IssuesResolver do end end + context 'confidential issues' do + include_context 'filtering for confidential issues' + + 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, confidential_issue1) + end + + it 'returns only the non-confidential issues for the project when filter is set to false' do + expect(resolve_issues({ confidential: false })).to contain_exactly(issue1, issue2) + end + + it "returns only the confidential issues for the project when filter is set to true" do + expect(resolve_issues({ confidential: true })).to contain_exactly(confidential_issue1) + end + end + + context "when user is not allowed to see confidential issues" do + before do + project.add_guest(current_user) + end + + it 'returns all viewable issues by default' do + expect(resolve_issues).to contain_exactly(issue1, issue2) + end + + it 'does not return the confidential issues when filter is set to false' do + expect(resolve_issues({ confidential: false })).to contain_exactly(issue1, issue2) + 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 + context 'when searching issues' do it 'returns correct issues' do expect(resolve_issues(search: 'foo')).to contain_exactly(issue2) @@ -519,32 +562,72 @@ RSpec.describe Resolvers::IssuesResolver do end context "with a group" do + let(:obj) { group } + before do group.add_developer(current_user) end 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 'returns issues without the specified issue_type' do - result = resolve(described_class, obj: group, ctx: { current_user: current_user }, args: { not: { types: ['issue'] } }) + expect(resolve_issues({ not: { types: ['issue'] } })).to contain_exactly(issue1) + end - expect(result).to contain_exactly(issue1) + context "confidential issues" do + include_context 'filtering for confidential issues' + + 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 end end context "when passing a non existent, batch loaded project" do - let(:project) do + let!(:project) do BatchLoader::GraphQL.for("non-existent-path").batch do |_fake_paths, loader, _| loader.call("non-existent-path", nil) end end + let(:obj) { project } + it "returns nil without breaking" do expect(resolve_issues(iids: ["don't", "break"])).to be_empty end @@ -565,6 +648,6 @@ RSpec.describe Resolvers::IssuesResolver do end def resolve_issues(args = {}, context = { current_user: current_user }) - resolve(described_class, obj: project, args: args, ctx: context) + resolve(described_class, obj: obj, args: args, ctx: context) end end |