summaryrefslogtreecommitdiff
path: root/spec/support/graphql/resolver_factories.rb
blob: 3c5aad34e8ba948cb817eed2af3f9e7779ceaf2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# frozen_string_literal: true

module Graphql
  module ResolverFactories
    def new_resolver(resolved_value = 'Resolved value', method: :resolve)
      case method
      when :resolve
        simple_resolver(resolved_value)
      when :find_object
        find_object_resolver(resolved_value)
      else
        raise "Cannot build a resolver for #{method}"
      end
    end

    private

    def simple_resolver(resolved_value = 'Resolved value', base_class: Resolvers::BaseResolver)
      Class.new(base_class) do
        define_method :resolve do |**_args|
          resolved_value
        end
      end
    end

    def find_object_resolver(resolved_value = 'Found object')
      Class.new(Resolvers::BaseResolver) do
        include ::Gitlab::Graphql::Authorize::AuthorizeResource

        def resolve(**args)
          authorized_find!(**args)
        end

        define_method :find_object do |**_args|
          resolved_value
        end
      end
    end
  end
end