From 7b52c7cb634ef7047d30b0337fe477bcdcedf41d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 2 Mar 2020 18:07:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../concerns/mutations/resolves_issuable_spec.rb | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb (limited to 'spec/graphql') diff --git a/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb new file mode 100644 index 00000000000..064ad90f707 --- /dev/null +++ b/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Mutations::ResolvesIssuable do + let(:mutation_class) do + Class.new(Mutations::BaseMutation) do + include Mutations::ResolvesIssuable + end + end + + let(:project) { create(:project) } + let(:user) { create(:user) } + let(:context) { { current_user: user } } + let(:mutation) { mutation_class.new(object: nil, context: context) } + + shared_examples 'resolving an issuable' do |type| + context 'when user has access' do + let(:source) { type == :merge_request ? 'source_project' : 'project' } + let(:issuable) { create(type, author: user, "#{source}" => project) } + + subject { mutation.resolve_issuable(type: type, parent_path: project.full_path, iid: issuable.iid) } + + before do + project.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 + resolved_project = mutation.resolve_project(full_path: project.full_path) + + allow(mutation).to receive(:resolve_project) + .with(full_path: project.full_path) + .and_return(resolved_project) + + expect(resolver_class).to receive(:new) + .with(object: resolved_project, context: context) + .and_call_original + + subject + end + + it 'uses the ResolvesProject to resolve project' do + expect(Resolvers::ProjectResolver).to receive(:new) + .with(object: nil, context: context) + .and_call_original + + subject + end + + it 'returns nil if issuable is not found' do + result = mutation.resolve_issuable(type: type, parent_path: project.full_path, iid: "100") + result = type == :merge_request ? result.sync : result + + expect(result).to be_nil + end + end + end + + context 'with issues' do + it_behaves_like 'resolving an issuable', :issue + end + + context 'with merge requests' do + it_behaves_like 'resolving an issuable', :merge_request + end +end -- cgit v1.2.3