-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathspec_helper.rb
208 lines (174 loc) · 4.95 KB
/
spec_helper.rb
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# frozen_string_literal: true
require 'rubygems'
require 'bundler'
require 'simplecov'
require 'simplecov-lcov'
SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
SimpleCov.formatters = [
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::LcovFormatter
]
SimpleCov.start do
enable_coverage :branch
add_filter "spec/"
add_group "Generators", "lib/generators"
add_group "Execution", [/analysis/, /language/, /execution/, /static_validation/, /pagination/, /subscriptions/, /query/, /tracing/, /introspection/, /dataloader/, /backtrace/]
add_group "Helpers", [/rake_task/, /testing/, /rubocop/]
add_group "Definition", [/types/, /relay/, /schema/]
end
Bundler.require
# Print full backtrace for failures:
ENV["BACKTRACE"] = "1"
require "graphql"
if ENV["GRAPHQL_CPARSER"]
USING_C_PARSER = true
puts "Opting in to GraphQL::CParser"
require "graphql-c_parser"
else
USING_C_PARSER = false
end
if ENV["GRAPHQL_REJECT_NUMBERS_FOLLOWED_BY_NAMES"]
puts "Opting into GraphQL.reject_numbers_followed_by_names"
GraphQL.reject_numbers_followed_by_names = true
puts "Opting into GraphQL::Schema::Visibility::Profile"
GraphQL::Schema.use(GraphQL::Schema::Visibility, migration_errors: true)
ADD_WARDEN = false
else
ADD_WARDEN = true
end
require "rake"
require "graphql/rake_task"
require "benchmark"
require "pry"
require "minitest/autorun"
require "minitest/focus"
require "minitest/reporters"
require "graphql/batch"
running_in_rubymine = ENV["RM_INFO"]
unless running_in_rubymine
Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
end
# Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new(color: true)
Minitest::Spec.make_my_diffs_pretty!
module CheckWardenShape
DEFAULT_SHAPE = GraphQL::Schema::Warden.new(context: {}, schema: GraphQL::Schema).instance_variables
class CheckShape
def initialize(warden)
@warden = warden
end
def call(_obj_id)
ivars = @warden.instance_variables
if ivars != DEFAULT_SHAPE
raise <<-ERR
Object Shape Failed (#{@warden.class}):
- Expected: #{DEFAULT_SHAPE.inspect}
- Actual: #{ivars.inspect}
ERR
# else # To make sure it's running properly:
# puts "OK Warden #{@warden.object_id}"
end
end
end
def prepare_ast
super
setup_finalizer
end
private
def setup_finalizer
if !@finalizer_defined
@finalizer_defined = true
if warden.is_a?(GraphQL::Schema::Warden)
ObjectSpace.define_finalizer(self, CheckShape.new(warden))
end
end
end
end
GraphQL::Query.prepend(CheckWardenShape)
# Filter out Minitest backtrace while allowing backtrace from other libraries
# to be shown.
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
# Can be used as a GraphQL::Schema::Warden for some purposes, but allows nothing
module NothingWarden
def self.enum_values(enum_type)
[]
end
end
# Use this when a schema requires a `resolve_type` hook
# but you know it won't be called
NO_OP_RESOLVE_TYPE = ->(type, obj, ctx) {
raise "this should never be called"
}
def testing_rails?
defined?(::Rails)
end
def testing_mongoid?
defined?(::Mongoid)
end
if testing_rails?
require "integration/rails/spec_helper"
end
if testing_mongoid?
require "integration/mongoid/star_trek/data"
require "integration/mongoid/star_trek/schema"
end
# Load support files
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
require f
end
def star_trek_query(string, variables={}, context: {})
StarTrek::Schema.execute(string, variables: variables, context: context)
end
def star_wars_query(string, variables={}, context: {})
StarWars::Schema.execute(string, variables: variables, context: context)
end
def with_bidirectional_pagination
prev_value = GraphQL::Relay::ConnectionType.bidirectional_pagination
GraphQL::Relay::ConnectionType.bidirectional_pagination = true
yield
ensure
GraphQL::Relay::ConnectionType.bidirectional_pagination = prev_value
end
module TestTracing
class << self
def clear
traces.clear
end
def with_trace
clear
yield
traces
end
def traces
@traces ||= []
end
def trace(key, data)
data[:key] = key
data[:path] ||= data.key?(:context) ? data[:context].path : nil
result = yield
data[:result] = result
traces << data
result
end
end
end
if !USING_C_PARSER && defined?(GraphQL::CParser::Parser)
raise "Load error: didn't opt in to C parser but GraphQL::CParser::Parser was defined"
end
def assert_warns(warning, printing = "")
return_val = nil
stdout, stderr = capture_io { return_val = yield }
assert_equal warning, stderr, "It produced the expected stderr"
assert_equal stdout, printing, "It produced the expected stdout"
return_val
end
module Minitest
class Test
def self.it_dataloads(message, &block)
it(message) do
GraphQL::Dataloader.with_dataloading do |d|
self.instance_exec(d, &block)
end
end
end
end
end