diff options
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/gitlab/graphql/authorize/instrumentation_spec.rb | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/spec/lib/gitlab/graphql/authorize/instrumentation_spec.rb b/spec/lib/gitlab/graphql/authorize/instrumentation_spec.rb index 69f53fce715..cf3a8bcc8b4 100644 --- a/spec/lib/gitlab/graphql/authorize/instrumentation_spec.rb +++ b/spec/lib/gitlab/graphql/authorize/instrumentation_spec.rb @@ -15,7 +15,7 @@ describe Gitlab::Graphql::Authorize::Instrumentation do object = double(:object) abilities.each do |ability| - spy_ability_check_for(ability, object) + spy_ability_check_for(ability, object, passed: true) end expect(checker.call(object)).to eq(object) @@ -26,18 +26,42 @@ describe Gitlab::Graphql::Authorize::Instrumentation do abilities.each do |ability| objects.each do |object| - spy_ability_check_for(ability, object) + spy_ability_check_for(ability, object, passed: true) end end expect(checker.call(objects)).to eq(objects) end - def spy_ability_check_for(ability, object) + context 'when some objects would not pass the check' do + it 'returns nil when it is single object' do + disallowed = double(:object) + + spy_ability_check_for(abilities.first, disallowed, passed: false) + + expect(checker.call(disallowed)).to be_nil + end + + it 'returns only objects which passed when there are more than one' do + allowed = double(:allowed) + disallowed = double(:disallowed) + + spy_ability_check_for(abilities.first, disallowed, passed: false) + + abilities.each do |ability| + spy_ability_check_for(ability, allowed, passed: true) + end + + expect(checker.call([disallowed, allowed])) + .to contain_exactly(allowed) + end + end + + def spy_ability_check_for(ability, object, passed: true) expect(Ability) .to receive(:allowed?) .with(current_user, ability, object) - .and_return(true) + .and_return(passed) end end end |