summaryrefslogtreecommitdiff
path: root/spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb')
-rw-r--r--spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb b/spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb
new file mode 100644
index 00000000000..ef1b18f0a11
--- /dev/null
+++ b/spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Resolvers::Projects::ForkTargetsResolver do
+ include GraphqlHelpers
+
+ let_it_be(:group) { create(:group, path: 'namespace-group') }
+ let_it_be(:another_group) { create(:group, path: 'namespace-another-group') }
+ let_it_be(:project) { create(:project, :private, group: group) }
+ let_it_be(:user) { create(:user, username: 'namespace-user', maintainer_projects: [project]) }
+
+ let(:args) { { search: 'namespace' } }
+
+ describe '#resolve' do
+ before_all do
+ group.add_owner(user)
+ another_group.add_owner(user)
+ end
+
+ it 'returns forkable namespaces' do
+ expect_next_instance_of(ForkTargetsFinder) do |finder|
+ expect(finder).to receive(:execute).with(args).and_call_original
+ end
+
+ expect(resolve_targets(args).items).to match_array([user.namespace, project.namespace, another_group])
+ end
+ end
+
+ context 'when a user cannot fork the project' do
+ let(:user) { create(:user) }
+
+ it 'does not return results' do
+ project.add_guest(user)
+
+ expect(resolve_targets(args)).to be_nil
+ end
+ end
+
+ def resolve_targets(args, opts = {})
+ field_options = described_class.field_options.merge(
+ owner: resolver_parent,
+ name: 'field_value'
+ ).merge(opts)
+
+ field = ::Types::BaseField.new(**field_options)
+ resolve_field(field, project, args: args, ctx: { current_user: user }, object_type: resolver_parent)
+ end
+end