artemis 1.0.0 → 1.1.0

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: 67885289ab96c6ee04586b1c448bfa3832ecdb6b8ce2b28726d988a24801aee4
4
- data.tar.gz: 788127f71e696536fd2f6e2076f97f2bb8af6d9374af5760782da12c85005660
3
+ metadata.gz: f28739ac0d67a5efdcce9e904d0650665a65c7f88bf00c1db9bcda5434a94757
4
+ data.tar.gz: db90cbdf7503158c27be28bf2cd3f942901d99d7894c3ac3a981981d02936d37
5
5
  SHA512:
6
- metadata.gz: e4099922005bf7f838d9e6147253b8403b9381fa5ea7c29a1317045b64c8cbe08e2bcc8ea0060ff60da41b7fba9325f47cce079ae1c8d217d0d47dcfee437c5f
7
- data.tar.gz: f633c25ba1ddbe8bcec167425f4f48b9ed8d6f94bac6048dc75c9a68bb13745af76b4572bb1b4e3a869bbf542a0928c8a0235e9ee835726e52325085e089d42b
6
+ metadata.gz: dfdfe631667b33fd2253353a8aa7f772a36d74f4301d2e75c453669a4670b2f459abe224fc2b34c0df3b5fa1364d6ad1c687b1656a1bd2dd9458895cc56c8bfa
7
+ data.tar.gz: 751ed648e9e331b329b6dccb3503db458cad3cf7cdabbe0d27bf009262231b943e6c677d9ec97710b6dada3aa979c0b26a6bd7a7637689b45e0e7911c7c6c419
@@ -75,7 +75,7 @@ jobs:
75
75
  env:
76
76
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
77
77
  steps:
78
- - uses: actions/checkout@v3
78
+ - uses: actions/checkout@v4
79
79
  - name: Install curl
80
80
  run: sudo apt-get install curl libcurl4-openssl-dev
81
81
  - name: Set up Ruby
@@ -92,7 +92,7 @@ jobs:
92
92
  env:
93
93
  BUNDLE_GEMFILE: gemfiles/rails_edge.gemfile
94
94
  steps:
95
- - uses: actions/checkout@v3
95
+ - uses: actions/checkout@v4
96
96
  - name: Install curl
97
97
  run: sudo apt-get install curl libcurl4-openssl-dev
98
98
  - name: Set up Ruby
@@ -116,7 +116,7 @@ jobs:
116
116
  env:
117
117
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
118
118
  steps:
119
- - uses: actions/checkout@v3
119
+ - uses: actions/checkout@v4
120
120
  - name: Install curl
121
121
  run: sudo apt-get install curl libcurl4-openssl-dev
122
122
  - name: Set up Ruby
@@ -141,7 +141,7 @@ jobs:
141
141
  # env:
142
142
  # BUNDLE_GEMFILE: ${{ matrix.gemfile }}
143
143
  # steps:
144
- # - uses: actions/checkout@v3
144
+ # - uses: actions/checkout@v4
145
145
  # - name: Set up Ruby
146
146
  # uses: ruby/setup-ruby@v1
147
147
  # with:
data/Appraisals CHANGED
@@ -17,6 +17,13 @@ appraise "graphql_2_0" do
17
17
  gem "graphql", "< 2.1"
18
18
  end
19
19
 
20
+ appraise "rails_72" do
21
+ gem "rails", '~> 7.2.0'
22
+ gem "railties", '~> 7.2.0'
23
+ gem "activesupport", '~> 7.2.0'
24
+ gem "rackup"
25
+ end
26
+
20
27
  appraise "rails_71" do
21
28
  gem "rails", '~> 7.1.0'
22
29
  gem "railties", '~> 7.1.0'
data/CHANGELOG.md CHANGED
@@ -1,14 +1,38 @@
1
- ## v1.0.0
1
+ ## v1.1.0
2
+
3
+ _<sup>Unreleased</sup>_
4
+
5
+ #### ⭐️ New Features
6
+
7
+ - Add support for Ruby 3.3. (e05756768c1535babccfca71f32d5218dd4da626)
8
+
9
+ ## [v1.0.2](https://github.com/yuki24/artemis/tree/v1.0.2)
10
+
11
+ _<sup>released at 2024-05-02 02:41:10 UTC</sup>_
12
+
13
+ #### 🐞 Bug Fixes
14
+
15
+ - Fixes a bug where abstract client classes are not loaded correctly ([#93](https://github.com/yuki24/artemis/issues/93), `494d30b`)
16
+
17
+ ## [v1.0.1](https://github.com/yuki24/artemis/tree/v1.0.1)
18
+
19
+ _<sup>released at 2024-05-02 02:40:54 UTC</sup>_
20
+
21
+ > Yanked due to inconsistent commit history.
22
+
23
+ ## [v1.0.0](https://github.com/yuki24/artemis/tree/v1.0.0)
24
+
25
+ _<sup>released at 2024-02-05 06:16:35 UTC</sup>_
2
26
 
3
27
  #### 🚨 Breaking Changes
4
28
 
5
29
  - Drop support for Ruby 2.6. For those of you looking to use Artemis on Ruby 2.6, please use the `artemis` version
6
- `0.9.0` and the `graphql-client` version `0.17.0`.
30
+ `0.9.0` and the `graphql-client` version `0.17.0`. ([#90](https://github.com/yuki24/artemis/pull/90))
7
31
 
8
32
  #### ⭐️ New Features
9
33
 
10
- - Add support for Ruby 3.3.
11
- - Add support for the latest versinos of the `graphql` gem.
34
+ - Add support for Ruby 3.3. ([#91](https://github.com/yuki24/artemis/pull/91))
35
+ - Add support for the latest versions of the `graphql` gem. ([#92](https://github.com/yuki24/artemis/pull/92))
12
36
 
13
37
  #### 🐞 Bug Fixes
14
38
 
data/Gemfile CHANGED
@@ -9,3 +9,4 @@ gem 'pry'
9
9
  gem 'pry-byebug', platforms: :mri
10
10
  gem 'curb', '>= 0.9.6' if RUBY_ENGINE == 'ruby'
11
11
  gem 'webrick' if RUBY_VERSION >= '3.0.0'
12
+ gem 'minitest', '< 5.25.0'
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
@@ -24,5 +24,4 @@ Gem::Specification.new do |spec|
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
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 7.1.0"
10
11
  gem "railties", "~> 7.1.0"
11
12
  gem "activesupport", "~> 7.1.0"
@@ -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 "minitest", "5.10.3"
9
10
  gem "rails", "~> 5.0.0"
10
11
  gem "railties", "~> 5.0.0"
11
12
  gem "activesupport", "~> 5.0.0"
12
- gem "minitest", "5.10.3"
13
13
 
14
14
  gemspec path: "../"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 5.1.0"
10
11
  gem "railties", "~> 5.1.0"
11
12
  gem "activesupport", "~> 5.1.0"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 5.2.0"
10
11
  gem "railties", "~> 5.2.0"
11
12
  gem "activesupport", "~> 5.2.0"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 6.0.0"
10
11
  gem "railties", "~> 6.0.0"
11
12
  gem "activesupport", "~> 6.0.0"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 6.1.0"
10
11
  gem "railties", "~> 6.1.0"
11
12
  gem "activesupport", "~> 6.1.0"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 7.0.0"
10
11
  gem "railties", "~> 7.0.0"
11
12
  gem "activesupport", "~> 7.0.0"
@@ -6,6 +6,7 @@ gem "pry"
6
6
  gem "pry-byebug", platforms: :mri
7
7
  gem "curb", ">= 0.9.6"
8
8
  gem "webrick"
9
+ gem "minitest", "< 5.25.0"
9
10
  gem "rails", "~> 7.1.0"
10
11
  gem "railties", "~> 7.1.0"
11
12
  gem "activesupport", "~> 7.1.0"
@@ -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 "minitest", "< 5.25.0"
10
+ gem "rails", "~> 7.2.0"
11
+ gem "railties", "~> 7.2.0"
12
+ gem "activesupport", "~> 7.2.0"
13
+ gem "rackup"
14
+
15
+ gemspec path: "../"
@@ -12,6 +12,7 @@ gem "pry"
12
12
  gem "pry-byebug", platforms: :mri
13
13
  gem "curb", ">= 0.9.6"
14
14
  gem "webrick"
15
+ gem "minitest", "< 5.25.0"
15
16
  gem "rackup"
16
17
 
17
18
  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 = "1.0.0"
2
+ VERSION = "1.1.0"
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: 1.0.0
4
+ version: 1.1.0
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: 2024-02-05 00:00:00.000000000 Z
12
+ date: 2024-08-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -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
@@ -170,6 +156,7 @@ files:
170
156
  - gemfiles/rails_61.gemfile
171
157
  - gemfiles/rails_70.gemfile
172
158
  - gemfiles/rails_71.gemfile
159
+ - gemfiles/rails_72.gemfile
173
160
  - gemfiles/rails_edge.gemfile
174
161
  - lib/artemis.rb
175
162
  - lib/artemis/adapters.rb
@@ -198,22 +185,6 @@ files:
198
185
  - lib/generators/artemis/query/templates/fixture.yml
199
186
  - lib/generators/artemis/query/templates/query.graphql
200
187
  - lib/tasks/artemis.rake
201
- - spec/adapters_spec.rb
202
- - spec/autoloading_spec.rb
203
- - spec/callbacks_spec.rb
204
- - spec/client_spec.rb
205
- - spec/endpoint_spec.rb
206
- - spec/fixtures/github.rb
207
- - spec/fixtures/github/_repository_fields.graphql
208
- - spec/fixtures/github/repository.graphql
209
- - spec/fixtures/github/schema.json
210
- - spec/fixtures/github/user.graphql
211
- - spec/fixtures/github/user_repositories.graphql
212
- - spec/fixtures/responses/github/repository.yml
213
- - spec/fixtures/responses/github/user.json
214
- - spec/fixtures/responses/spotify_client/artist.yml
215
- - spec/spec_helper.rb
216
- - spec/test_helper_spec.rb
217
188
  - tmp/.gitkeep
218
189
  homepage: https://github.com/yuki24/artemis
219
190
  licenses:
@@ -234,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
205
  - !ruby/object:Gem::Version
235
206
  version: '0'
236
207
  requirements: []
237
- rubygems_version: 3.5.3
208
+ rubygems_version: 3.5.11
238
209
  signing_key:
239
210
  specification_version: 4
240
211
  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