spec/graphql/execution/lazy_spec.rb in graphql-1.5.15 vs spec/graphql/execution/lazy_spec.rb in graphql-1.6.0
- old
+ new
@@ -1,120 +1,14 @@
# frozen_string_literal: true
require "spec_helper"
describe GraphQL::Execution::Lazy do
- class Wrapper
- def initialize(item = nil, &block)
- if block
- @block = block
- else
- @item = item
- end
- end
+ include LazyHelpers
- def item
- if @block
- @item = @block.call()
- @block = nil
- end
- @item
- end
- end
-
- class SumAll
- attr_reader :own_value
- attr_accessor :value
-
- def initialize(ctx, own_value)
- @own_value = own_value
- @all = ctx[:__sum_all__] ||= []
- @all << self
- end
-
- def value
- @value ||= begin
- total_value = @all.map(&:own_value).reduce(&:+)
- @all.each { |v| v.value = total_value}
- @all.clear
- total_value
- end
- @value
- end
- end
-
- LazySum = GraphQL::ObjectType.define do
- name "LazySum"
- field :value, types.Int do
- resolve ->(o, a, c) { o == 13 ? nil : o }
- end
- field :nestedSum, !LazySum do
- argument :value, !types.Int
- resolve ->(o, args, c) {
- if args[:value] == 13
- Wrapper.new(nil)
- else
- SumAll.new(c, o + args[:value])
- end
- }
- end
-
- field :nullableNestedSum, LazySum do
- argument :value, types.Int
- resolve ->(o, args, c) {
- if args[:value] == 13
- Wrapper.new(nil)
- else
- SumAll.new(c, o + args[:value])
- end
- }
- end
- end
-
- LazyQuery = GraphQL::ObjectType.define do
- name "Query"
- field :int, !types.Int do
- argument :value, !types.Int
- argument :plus, types.Int, default_value: 0
- resolve ->(o, a, c) { Wrapper.new(a[:value] + a[:plus])}
- end
-
- field :nestedSum, !LazySum do
- argument :value, !types.Int
- resolve ->(o, args, c) { SumAll.new(c, args[:value]) }
- end
-
- field :nullableNestedSum, LazySum do
- argument :value, types.Int
- resolve ->(o, args, c) {
- if args[:value] == 13
- Wrapper.new { raise GraphQL::ExecutionError.new("13 is unlucky") }
- else
- SumAll.new(c, args[:value])
- end
- }
- end
-
- field :listSum, types[LazySum] do
- argument :values, types[types.Int]
- resolve ->(o, args, c) { args[:values] }
- end
- end
-
- LazySchema = GraphQL::Schema.define do
- query(LazyQuery)
- mutation(LazyQuery)
- lazy_resolve(Wrapper, :item)
- lazy_resolve(SumAll, :value)
- end
-
- def run_query(query_str)
- LazySchema.execute(query_str)
- end
-
describe "resolving" do
it "calls value handlers" do
- res = run_query('{ int(value: 2, plus: 1)}')
+ res = run_query('{ int(value: 2, plus: 1) }')
assert_equal 3, res["data"]["int"]
end
it "can do nested lazy values" do
res = run_query %|
@@ -232,19 +126,19 @@
assert_equal [2, 4, 6], res["data"].values.map { |d| d["value"] }
end
end
describe "LazyMethodMap" do
- class SubWrapper < Wrapper; end
+ class SubWrapper < LazyHelpers::Wrapper; end
let(:map) { GraphQL::Execution::Lazy::LazyMethodMap.new }
it "finds methods for classes and subclasses" do
- map.set(Wrapper, :item)
- map.set(SumAll, :value)
- b = Wrapper.new(1)
- sub_b = Wrapper.new(2)
- s = SumAll.new({}, 3)
+ map.set(LazyHelpers::Wrapper, :item)
+ map.set(LazyHelpers::SumAll, :value)
+ b = LazyHelpers::Wrapper.new(1)
+ sub_b = LazyHelpers::Wrapper.new(2)
+ s = LazyHelpers::SumAll.new({}, 3)
assert_equal(:item, map.get(b))
assert_equal(:item, map.get(sub_b))
assert_equal(:value, map.get(s))
end
end