56 lines
1.8 KiB
Ruby
56 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.shared_examples 'resolving an issuable in GraphQL' do |type|
|
|
subject { mutation.resolve_issuable(type: type, parent_path: parent.full_path, iid: issuable.iid) }
|
|
|
|
context 'when user has access' do
|
|
before do
|
|
parent.add_developer(user)
|
|
end
|
|
|
|
it 'resolves issuable by iid' do
|
|
result = type == :merge_request ? subject.sync : subject
|
|
expect(result).to eq(issuable)
|
|
end
|
|
|
|
it 'uses the correct Resolver to resolve issuable' do
|
|
resolver_class = "Resolvers::#{type.to_s.classify.pluralize}Resolver".constantize
|
|
resolve_method = type == :epic ? :resolve_group : :resolve_project
|
|
resolved_parent = mutation.send(resolve_method, full_path: parent.full_path)
|
|
|
|
allow(mutation).to receive(resolve_method)
|
|
.with(full_path: parent.full_path)
|
|
.and_return(resolved_parent)
|
|
|
|
expect(resolver_class).to receive(:new)
|
|
.with(object: resolved_parent, context: context, field: nil)
|
|
.and_call_original
|
|
|
|
subject
|
|
end
|
|
|
|
it 'uses correct Resolver to resolve issuable parent' do
|
|
resolver_class = type == :epic ? 'Resolvers::GroupResolver' : 'Resolvers::ProjectResolver'
|
|
|
|
expect(resolver_class.constantize).to receive(:new)
|
|
.with(object: nil, context: context, field: nil)
|
|
.and_call_original
|
|
|
|
subject
|
|
end
|
|
|
|
it 'returns nil if issuable is not found' do
|
|
result = mutation.resolve_issuable(type: type, parent_path: parent.full_path, iid: "100")
|
|
result = type == :merge_request ? result.sync : result
|
|
|
|
expect(result).to be_nil
|
|
end
|
|
|
|
it 'returns nil if parent path is not present' do
|
|
result = mutation.resolve_issuable(type: type, parent_path: "", iid: issuable.iid)
|
|
|
|
expect(result).to be_nil
|
|
end
|
|
end
|
|
end
|