artemis 0.9.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fcf01b2987aaf247cee4afa02982fd582208ea0b48f3042ed207e7bb5ed6fdd8
4
- data.tar.gz: 4eea51e39bbe709d579d08a409d09c2a95495590ab99609834d0af735cc0c46a
3
+ metadata.gz: 48a7d1c38990ead32932786f4a3981d3e7a8db1914ffac704bd14fec1511e9a6
4
+ data.tar.gz: 6a3150492d60d3f94baff965a514b2392c0bdfc9c34d51cca540b7156cf4b1ba
5
5
  SHA512:
6
- metadata.gz: a0f862a4301a613dfe0fadefe9bdbad4170f2b6af1ef6f5db859fb13d40dc0065a1d93d37cab4f44790c90c1b624bf62d4b7777ebaa67e38028be0816d14d19d
7
- data.tar.gz: 0b197e80bf6ffe84c489423804d8b67fa18f37c57679015308598284090d5ab9adcdea587a27c6e49312c741642e5fe03675a594e6b66695af08dc344fb76db3
6
+ metadata.gz: 594a2346bfc01cf7d8ca53c7359693f4e43e38dea0a5e65d36faf51851a55665839436078b7d1aaf6a20441edb949e24f0f406c0612928f00c850e552d4e829d
7
+ data.tar.gz: 9a19609908348342985afa0ef74e40133b1ea647fed58279b8c11efbc27e257e1086290932c3af2c0083c40cd0d5baa8b746929533c3d8f2a58d05ce1de4c0ab
@@ -2,18 +2,17 @@ name: build
2
2
 
3
3
  on:
4
4
  - push
5
- - pull_request
6
5
 
7
6
  jobs:
8
7
  mri:
9
8
  strategy:
10
9
  matrix:
11
10
  ruby_version:
11
+ - '3.3'
12
12
  - '3.2'
13
13
  - '3.1'
14
14
  - '3.0'
15
15
  - '2.7'
16
- - '2.6'
17
16
  gemfile:
18
17
  - gemfiles/rails_71.gemfile
19
18
  - gemfiles/rails_70.gemfile
@@ -22,7 +21,18 @@ jobs:
22
21
  - gemfiles/rails_52.gemfile
23
22
  - gemfiles/rails_51.gemfile
24
23
  - gemfiles/rails_50.gemfile
24
+ - gemfiles/graphql_2_0.gemfile
25
25
  exclude:
26
+ - ruby_version: '3.3'
27
+ gemfile: gemfiles/rails_61.gemfile
28
+ - ruby_version: '3.3'
29
+ gemfile: gemfiles/rails_60.gemfile
30
+ - ruby_version: '3.3'
31
+ gemfile: gemfiles/rails_52.gemfile
32
+ - ruby_version: '3.3'
33
+ gemfile: gemfiles/rails_51.gemfile
34
+ - ruby_version: '3.3'
35
+ gemfile: gemfiles/rails_50.gemfile
26
36
  - ruby_version: '3.2'
27
37
  gemfile: gemfiles/rails_61.gemfile
28
38
  - ruby_version: '3.2'
@@ -49,6 +59,8 @@ jobs:
49
59
  gemfile: gemfiles/rails_51.gemfile
50
60
  - ruby_version: '3.0'
51
61
  gemfile: gemfiles/rails_50.gemfile
62
+ - ruby_version: '3.0'
63
+ gemfile: gemfiles/graphql_2_0.gemfile
52
64
  - ruby_version: '2.7'
53
65
  gemfile: gemfiles/rails_71.gemfile
54
66
  - ruby_version: '2.7'
@@ -57,10 +69,8 @@ jobs:
57
69
  gemfile: gemfiles/rails_51.gemfile
58
70
  - ruby_version: '2.7'
59
71
  gemfile: gemfiles/rails_50.gemfile
60
- - ruby_version: '2.6'
61
- gemfile: gemfiles/rails_71.gemfile
62
- - ruby_version: '2.6'
63
- gemfile: gemfiles/rails_70.gemfile
72
+ - ruby_version: '2.7'
73
+ gemfile: gemfiles/graphql_2_0.gemfile
64
74
  runs-on: ubuntu-22.04
65
75
  env:
66
76
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
@@ -88,7 +98,7 @@ jobs:
88
98
  - name: Set up Ruby
89
99
  uses: ruby/setup-ruby@v1
90
100
  with:
91
- ruby-version: 3.2
101
+ ruby-version: 3.3
92
102
  bundler-cache: true
93
103
  - run: bundle exec rake || echo "Rails edge test is done."
94
104
 
data/Appraisals CHANGED
@@ -8,10 +8,19 @@ appraise "rails_edge" do
8
8
  gem "rackup"
9
9
  end
10
10
 
11
+ appraise "graphql_2_0" do
12
+ gem "rails", '~> 7.1.0'
13
+ gem "railties", '~> 7.1.0'
14
+ gem "activesupport", '~> 7.1.0'
15
+ gem "rackup"
16
+
17
+ gem "graphql", "< 2.1"
18
+ end
19
+
11
20
  appraise "rails_71" do
12
- gem "rails", '~> 7.1.0.beta1'
13
- gem "railties", '~> 7.1.0.beta1'
14
- gem "activesupport", '~> 7.1.0.beta1'
21
+ gem "rails", '~> 7.1.0'
22
+ gem "railties", '~> 7.1.0'
23
+ gem "activesupport", '~> 7.1.0'
15
24
  gem "rackup"
16
25
  end
17
26
 
@@ -28,9 +37,9 @@ appraise "rails_61" do
28
37
  end
29
38
 
30
39
  appraise "rails_60" do
31
- gem "rails", '~> 6.0.0.rc1'
32
- gem "railties", '~> 6.0.0.rc1'
33
- gem "activesupport", '~> 6.0.0.rc1'
40
+ gem "rails", '~> 6.0.0'
41
+ gem "railties", '~> 6.0.0'
42
+ gem "activesupport", '~> 6.0.0'
34
43
  end
35
44
 
36
45
  appraise "rails_52" do
data/CHANGELOG.md CHANGED
@@ -1,12 +1,40 @@
1
- ## v0.9.0
1
+ ## v1.0.2
2
+
3
+ #### 🐞 Bug Fixes
4
+
5
+ - Fixes a bug where abstract client classes are not loaded correctly (#93, `494d30b`)
6
+
7
+ ## v1.0.1
8
+
9
+ > Yanked due to inconsistent commit history.
10
+
11
+ ## v1.0.0
12
+
13
+ #### 🚨 Breaking Changes
14
+
15
+ - Drop support for Ruby 2.6. For those of you looking to use Artemis on Ruby 2.6, please use the `artemis` version
16
+ `0.9.0` and the `graphql-client` version `0.17.0`.
17
+
18
+ #### ⭐️ New Features
19
+
20
+ - Add support for Ruby 3.3.
21
+ - Add support for the latest versinos of the `graphql` gem.
22
+
23
+ #### 🐞 Bug Fixes
24
+
25
+ - No bug fixes.
26
+
27
+ ## [v0.9.0](https://github.com/yuki24/artemis/tree/v0.9.0)
28
+
29
+ _<sup>released at 2023-09-18 01:08:34 UTC</sup>_
2
30
 
3
31
  #### New Features
4
32
 
5
- - Rails 7.1.0.beta1 is now officially supported
33
+ - Rails 7.1.0.beta1 is now officially supported ([<tt>f25ba29</tt>](https://github.com/yuki24/artemis/commit/f25ba296f15b26ffba7e4ec0f5b4cbeb061c97a1))
6
34
 
7
35
  #### Fixes
8
36
 
9
- - Fixes an issue where `graphql` gem `2.1.0` may not work with `graphql-client` (`b144ee2f`)
37
+ - Fixes an issue where `graphql` gem `2.1.0` may not work with `graphql-client` ([<tt>b144ee2</tt>](https://github.com/yuki24/artemis/commit/b144ee2fbca2c23b4aaed8236f6fc07f65d8239d))
10
38
 
11
39
  ## [v0.8.0](https://github.com/yuki24/artemis/tree/v0.8.0)
12
40
 
@@ -39,7 +67,6 @@ _<sup>released at 2021-09-03 04:17:55 UTC</sup>_
39
67
 
40
68
  #### Fixes
41
69
 
42
- - ~~Generate fixture YAML files on `rails g artemis:query queryName` ([#78](https://github.com/yuki24/artemis/pull/78))~~ Removed due to a bug for now.
43
70
  - Address warnings from Ruby 2.7 ([<tt>408adcb</tt>](https://github.com/yuki24/artemis/commit/408adcb3f39912f7afb7b3690a52f1d593662b7b))
44
71
  - Avoid crashing when config/graphql.yml does not exist ([@dlackty](https://github.com/dlackty), [#76](https://github.com/yuki24/artemis/pull/76))
45
72
 
@@ -107,5 +134,5 @@ _<sup>released at 2018-10-30 02:09:59 UTC</sup>_
107
134
 
108
135
  _<sup>released at 2018-10-16 20:57:51 UTC</sup>_
109
136
 
110
- First release of Artemis! <g-emoji class="g-emoji" alias="tada" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f389.png">&#127881;</g-emoji>
137
+ First release of Artemis! 🎉
111
138
 
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rake/testtask"
3
- require 'rspec/core/rake_task'
4
3
 
5
4
  TESTS_IN_ISOLATION = ['test/railtie_test.rb', 'test/rake_tasks_test.rb']
6
5
 
@@ -16,6 +15,4 @@ Rake::TestTask.new('test:isolated') do |t|
16
15
  t.warning = false
17
16
  end
18
17
 
19
- RSpec::Core::RakeTask.new(:spec)
20
-
21
- task default: ['spec', 'test', 'test:isolated']
18
+ task default: ['test', 'test:isolated']
data/artemis.gemspec CHANGED
@@ -17,12 +17,11 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.add_dependency "activesupport", ">= 4.0.0"
19
19
  spec.add_dependency "railties", ">= 4.0.0"
20
- spec.add_dependency "graphql", "< 2.1"
20
+ spec.add_dependency "graphql"
21
21
  spec.add_dependency "graphql-client", ">= 0.13.0"
22
22
 
23
23
  spec.add_development_dependency "appraisal", ">= 2.2"
24
24
  spec.add_development_dependency "bundler", ">= 1.16"
25
25
  spec.add_development_dependency "net-http-persistent", ">= 3.0"
26
26
  spec.add_development_dependency "rake", ">= 10.0"
27
- spec.add_development_dependency "rspec", ">= 3.8"
28
27
  end
data/bin/console CHANGED
@@ -4,9 +4,9 @@ require "bundler/setup"
4
4
  require "artemis"
5
5
 
6
6
  Artemis::Client.query_paths = [File.join(__dir__, '../spec/fixtures')]
7
- Artemis::GraphQLEndpoint.register!(:metaphysics, adapter: :test, url: '', schema_path: 'spec/fixtures/metaphysics/schema.json')
8
- Artemis::GraphQLEndpoint.lookup(:metaphysics).load_schema!
9
- require_relative '../spec/fixtures/metaphysics'
7
+ Artemis::GraphQLEndpoint.register!(:github, adapter: :test, url: '', schema_path: 'spec/fixtures/github/schema.json')
8
+ Artemis::GraphQLEndpoint.lookup(:github).load_schema!
9
+ require_relative '../spec/fixtures/github'
10
10
 
11
11
  require "pry"
12
12
  Pry.start
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "pry-byebug", platforms: :mri
7
+ gem "curb", ">= 0.9.6"
8
+ gem "webrick"
9
+ gem "rails", "~> 7.1.0"
10
+ gem "railties", "~> 7.1.0"
11
+ gem "activesupport", "~> 7.1.0"
12
+ gem "rackup"
13
+ gem "graphql", "< 2.1"
14
+
15
+ gemspec path: "../"
@@ -6,8 +6,8 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
- gem "rails", "~> 6.0.0.rc1"
10
- gem "railties", "~> 6.0.0.rc1"
11
- gem "activesupport", "~> 6.0.0.rc1"
9
+ gem "rails", "~> 6.0.0"
10
+ gem "railties", "~> 6.0.0"
11
+ gem "activesupport", "~> 6.0.0"
12
12
 
13
13
  gemspec path: "../"
@@ -6,9 +6,9 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
- gem "rails", "~> 7.1.0.beta1"
10
- gem "railties", "~> 7.1.0.beta1"
11
- gem "activesupport", "~> 7.1.0.beta1"
9
+ gem "rails", "~> 7.1.0"
10
+ gem "railties", "~> 7.1.0"
11
+ gem "activesupport", "~> 7.1.0"
12
12
  gem "rackup"
13
13
 
14
14
  gemspec path: "../"
@@ -31,7 +31,9 @@ module Artemis
31
31
  end
32
32
 
33
33
  initializer 'graphql.client.set_reloader', after: 'graphql.client.set_query_paths' do |app|
34
- if !config.respond_to?(:autoloader) || config.autoloader != :zeitwerk
34
+ not_on_zeitwerk = !defined?(Zeitwerk) || (app.config.respond_to?(:autoloader) && app.config.autoloader != :zeitwerk)
35
+
36
+ if not_on_zeitwerk
35
37
  files_to_watch = Artemis::Client.query_paths.map {|path| [path, config.artemis.graphql_extentions] }.to_h
36
38
 
37
39
  app.reloaders << ActiveSupport::FileUpdateChecker.new([], files_to_watch) do
@@ -58,14 +60,10 @@ module Artemis
58
60
  end
59
61
 
60
62
  initializer 'graphql.client.preload', after: 'graphql.client.load_config' do |app|
61
- if app.config.eager_load && app.config.cache_classes
62
- Artemis::GraphQLEndpoint.registered_services.each do |endpoint_name|
63
- begin
64
- require_dependency endpoint_name # Rails 7.0+ requires this.
65
- rescue LoadError
66
- # no-op...
67
- end
63
+ not_on_zeitwerk = !defined?(Zeitwerk) || (app.config.respond_to?(:autoloader) && app.config.autoloader != :zeitwerk)
68
64
 
65
+ if app.config.eager_load && app.config.cache_classes && not_on_zeitwerk
66
+ Artemis::GraphQLEndpoint.registered_services.each do |endpoint_name|
69
67
  endpoint_name.camelize.constantize.preload!
70
68
  end
71
69
  end
@@ -1,3 +1,3 @@
1
1
  module Artemis
2
- VERSION = "0.9.0"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artemis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Allured
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-18 00:00:00.000000000 Z
12
+ date: 2024-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -43,16 +43,16 @@ dependencies:
43
43
  name: graphql
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "<"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '2.1'
48
+ version: '0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "<"
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '2.1'
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: graphql-client
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -123,20 +123,6 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '10.0'
126
- - !ruby/object:Gem::Dependency
127
- name: rspec
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '3.8'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '3.8'
140
126
  description: GraphQL client on Rails + Convention over Configuration = ❤️
141
127
  email:
142
128
  - jon.allured@gmail.com
@@ -162,6 +148,7 @@ files:
162
148
  - doc/CHANGELOG.md.erb
163
149
  - doc/changelog_generator.rb
164
150
  - gemfiles/.bundle/config
151
+ - gemfiles/graphql_2_0.gemfile
165
152
  - gemfiles/rails_50.gemfile
166
153
  - gemfiles/rails_51.gemfile
167
154
  - gemfiles/rails_52.gemfile
@@ -197,22 +184,6 @@ files:
197
184
  - lib/generators/artemis/query/templates/fixture.yml
198
185
  - lib/generators/artemis/query/templates/query.graphql
199
186
  - lib/tasks/artemis.rake
200
- - spec/adapters_spec.rb
201
- - spec/autoloading_spec.rb
202
- - spec/callbacks_spec.rb
203
- - spec/client_spec.rb
204
- - spec/endpoint_spec.rb
205
- - spec/fixtures/github.rb
206
- - spec/fixtures/github/_repository_fields.graphql
207
- - spec/fixtures/github/repository.graphql
208
- - spec/fixtures/github/schema.json
209
- - spec/fixtures/github/user.graphql
210
- - spec/fixtures/github/user_repositories.graphql
211
- - spec/fixtures/responses/github/repository.yml
212
- - spec/fixtures/responses/github/user.json
213
- - spec/fixtures/responses/spotify_client/artist.yml
214
- - spec/spec_helper.rb
215
- - spec/test_helper_spec.rb
216
187
  - tmp/.gitkeep
217
188
  homepage: https://github.com/yuki24/artemis
218
189
  licenses:
@@ -233,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
204
  - !ruby/object:Gem::Version
234
205
  version: '0'
235
206
  requirements: []
236
- rubygems_version: 3.4.19
207
+ rubygems_version: 3.5.9
237
208
  signing_key:
238
209
  specification_version: 4
239
210
  summary: GraphQL on Rails
@@ -1,278 +0,0 @@
1
- require 'json'
2
- require 'rack'
3
- require 'webrick'
4
-
5
- RACK_SERVER = begin
6
- require 'rackup/handler/webrick'
7
- Rackup::Handler::WEBrick
8
- rescue LoadError
9
- Rack::Handler::WEBrick
10
- end
11
-
12
- describe 'Adapters' do
13
- FakeServer = ->(env) {
14
- case env['PATH_INFO']
15
- when '/slow_server'
16
- sleep 2.1
17
-
18
- [200, {}, ['{}']]
19
- when '/500'
20
- [500, {}, ['Server error']]
21
- when '/test_multi_domain'
22
- body = {
23
- data: {
24
- body: "Endpoint switched.",
25
- headers: env.select {|key, val| key.match("^HTTP.*|^CONTENT.*|^AUTHORIZATION.*") }
26
- .collect {|key, val| [key.gsub(/^HTTP_/, ''), val.downcase] }
27
- .to_h,
28
- },
29
- errors: [],
30
- extensions: {}
31
- }.to_json
32
-
33
- [200, {}, [body]]
34
- else
35
- request_body = JSON.parse(env['rack.input'].read)
36
-
37
- response_body = if request_body['_json']
38
- request_body['_json'].map do |query|
39
- {
40
- data: {
41
- body: query,
42
- headers: env.select {|key, val| key.match("^HTTP.*|^CONTENT.*|^AUTHORIZATION.*") }
43
- .collect {|key, val| [key.gsub(/^HTTP_/, ''), val.downcase] }
44
- .to_h,
45
- },
46
- errors: [],
47
- extensions: {}
48
- }
49
- end.to_json
50
- else
51
- {
52
- data: {
53
- body: request_body,
54
- headers: env.select {|key, val| key.match("^HTTP.*|^CONTENT.*|^AUTHORIZATION.*") }
55
- .collect {|key, val| [key.gsub(/^HTTP_/, ''), val.downcase] }
56
- .to_h,
57
- },
58
- errors: [],
59
- extensions: {}
60
- }.to_json
61
- end
62
-
63
- [200, {}, [response_body]]
64
- end
65
- }
66
-
67
- before :all do
68
- Artemis::Adapters::AbstractAdapter.send(:attr_writer, :uri, :timeout)
69
-
70
- @server_thread = Thread.new do
71
- RACK_SERVER.run(FakeServer, Port: 8000, Logger: WEBrick::Log.new('/dev/null'), AccessLog: [])
72
- end
73
-
74
- loop do
75
- begin
76
- TCPSocket.open('localhost', 8000)
77
- break
78
- rescue Errno::ECONNREFUSED
79
- # no-op
80
- end
81
- end
82
- end
83
-
84
- after :all do
85
- RACK_SERVER.shutdown
86
- @server_thread.terminate
87
- end
88
-
89
- shared_examples 'an adapter' do
90
- describe '#initialize' do
91
- it 'requires an url' do
92
- expect do
93
- adapter.class.new(nil, service_name: nil, timeout: 2, pool_size: 5)
94
- end.to raise_error(ArgumentError, "url is required (given `nil')")
95
- end
96
- end
97
-
98
- describe '#execute' do
99
- it 'makes an actual HTTP request' do
100
- response = adapter.execute(
101
- document: GraphQL::Client::IntrospectionDocument,
102
- operation_name: 'IntrospectionQuery',
103
- variables: { id: 'yayoi-kusama' },
104
- context: { user_id: 1 }
105
- )
106
-
107
- expect(response['data']['body']['query']).to eq(GraphQL::Client::IntrospectionDocument.to_query_string)
108
- expect(response['data']['body']['variables']).to eq('id' => 'yayoi-kusama')
109
- expect(response['data']['body']['operationName']).to eq('IntrospectionQuery')
110
- expect(response['data']['headers']['CONTENT_TYPE']).to eq('application/json')
111
- expect(response['data']['headers']['ACCEPT']).to eq('application/json')
112
- expect(response['errors']).to eq([])
113
- expect(response['extensions']).to eq({})
114
- end
115
-
116
- it 'raises an error when it receives a server error' do
117
- adapter.uri = URI.parse('http://localhost:8000/500')
118
-
119
- expect do
120
- adapter.execute(document: GraphQL::Client::IntrospectionDocument, operation_name: 'IntrospectionQuery')
121
- end.to raise_error(Artemis::GraphQLServerError, "Received server error status 500: Server error")
122
- end
123
-
124
- it 'allows for overriding timeout' do
125
- adapter.uri = URI.parse('http://localhost:8000/slow_server')
126
-
127
- expect do
128
- adapter.execute(document: GraphQL::Client::IntrospectionDocument, operation_name: 'IntrospectionQuery')
129
- end.to raise_error(timeout_error)
130
- end
131
- end
132
-
133
- describe '#multiplex' do
134
- it 'makes an HTTP request with multiple queries' do
135
- response = adapter.multiplex(
136
- [
137
- {
138
- query: GraphQL::Client::IntrospectionDocument.to_query_string,
139
- operationName: 'IntrospectionQuery',
140
- variables: {
141
- id: 'yayoi-kusama'
142
- },
143
- },
144
- ],
145
- context: {
146
- user_id: 1
147
- }
148
- )
149
-
150
- introspection_query = response[0]
151
-
152
- expect(introspection_query['data']['body']['query']).to eq(GraphQL::Client::IntrospectionDocument.to_query_string)
153
- expect(introspection_query['data']['body']['variables']).to eq('id' => 'yayoi-kusama')
154
- expect(introspection_query['data']['body']['operationName']).to eq('IntrospectionQuery')
155
- expect(introspection_query['data']['headers']['CONTENT_TYPE']).to eq('application/json')
156
- expect(introspection_query['data']['headers']['ACCEPT']).to eq('application/json')
157
- expect(introspection_query['errors']).to eq([])
158
- expect(introspection_query['extensions']).to eq({})
159
- end
160
-
161
- it 'raises an error when it receives a server error' do
162
- adapter.uri = URI.parse('http://localhost:8000/500')
163
-
164
- expect do
165
- adapter.multiplex([])
166
- end.to raise_error(Artemis::GraphQLServerError, "Received server error status 500: Server error")
167
- end
168
-
169
- it 'allows for overriding timeout' do
170
- adapter.uri = URI.parse('http://localhost:8000/slow_server')
171
-
172
- expect do
173
- adapter.multiplex([])
174
- end.to raise_error(timeout_error)
175
- end
176
- end
177
- end
178
-
179
- describe Artemis::Adapters::NetHttpAdapter do
180
- let(:adapter) { Artemis::Adapters::NetHttpAdapter.new('http://localhost:8000', service_name: nil, timeout: 0.5, pool_size: 5) }
181
- let(:timeout_error) { Net::ReadTimeout }
182
-
183
- it_behaves_like 'an adapter'
184
- end
185
-
186
- describe Artemis::Adapters::NetHttpPersistentAdapter do
187
- let(:adapter) { Artemis::Adapters::NetHttpPersistentAdapter.new('http://localhost:8000', service_name: nil, timeout: 0.5, pool_size: 5) }
188
- let(:timeout_error) { Net::ReadTimeout }
189
-
190
- it_behaves_like 'an adapter'
191
- end
192
-
193
- describe Artemis::Adapters::MultiDomainAdapter do
194
- let(:adapter) { Artemis::Adapters::MultiDomainAdapter.new('ignored', service_name: nil, timeout: 0.5, pool_size: 5, adapter_options: { adapter: :net_http }) }
195
-
196
- it 'makes an actual HTTP request' do
197
- response = adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/test_multi_domain' })
198
-
199
- expect(response['data']['body']).to eq("Endpoint switched.")
200
- expect(response['errors']).to eq([])
201
- expect(response['extensions']).to eq({})
202
- end
203
-
204
- it 'can make a multiplex (the graphql feature, not HTTP/2) request' do
205
- response = adapter.multiplex(
206
- [
207
- {
208
- query: GraphQL::Client::IntrospectionDocument.to_query_string,
209
- operationName: 'IntrospectionQuery',
210
- variables: {
211
- id: 'yayoi-kusama'
212
- },
213
- },
214
- ],
215
- context: {
216
- url: 'http://localhost:8000/test_multi_domain'
217
- }
218
- )
219
-
220
- expect(response['data']['body']).to eq("Endpoint switched.")
221
- expect(response['errors']).to eq([])
222
- expect(response['extensions']).to eq({})
223
- end
224
-
225
- it 'can make a multiplex request with custom HTTP headers' do
226
- response = adapter.multiplex(
227
- [
228
- {
229
- query: GraphQL::Client::IntrospectionDocument.to_query_string,
230
- operationName: 'IntrospectionQuery',
231
- },
232
- ],
233
- context: {
234
- headers: {
235
- Authorization: "Token token",
236
- },
237
- url: 'http://localhost:8000/test_multi_domain'
238
- }
239
- )
240
-
241
- expect(response['data']['headers']['AUTHORIZATION']).to eq("token token")
242
- end
243
-
244
- it 'raises an error when adapter_options.adapter is set to :multi domain' do
245
- expect do
246
- Artemis::Adapters::MultiDomainAdapter.new('ignored', service_name: nil, timeout: 0.5, pool_size: 5, adapter_options: { adapter: :multi_domain })
247
- end.to raise_error(ArgumentError, 'You can not use the :multi_domain adapter with the :multi_domain adapter.')
248
- end
249
-
250
- it 'raises an error when context.url is not specified' do
251
- expect do
252
- adapter.execute(document: GraphQL::Client::IntrospectionDocument)
253
- end.to raise_error(ArgumentError, 'The MultiDomain adapter requires a url on every request. Please specify a ' \
254
- 'url with a context: Client.with_context(url: "https://awesomeshop.domain.conm")')
255
- end
256
-
257
- it 'raises an error when it receives a server error' do
258
- expect do
259
- adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/500' })
260
- end.to raise_error(Artemis::GraphQLServerError, "Received server error status 500: Server error")
261
- end
262
-
263
- it 'allows for overriding timeout' do
264
- expect do
265
- adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/slow_server' })
266
- end.to raise_error(Net::ReadTimeout)
267
- end
268
- end
269
-
270
- if RUBY_ENGINE == 'ruby'
271
- describe Artemis::Adapters::CurbAdapter do
272
- let(:adapter) { Artemis::Adapters::CurbAdapter.new('http://localhost:8000', service_name: nil, timeout: 2, pool_size: 5) }
273
- let(:timeout_error) { Curl::Err::TimeoutError }
274
-
275
- it_behaves_like 'an adapter'
276
- end
277
- end
278
- end