shopify_api 8.1.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +22 -10
  4. data/docs/graphql.md +191 -0
  5. data/lib/shopify_api.rb +2 -0
  6. data/lib/shopify_api/api_version.rb +1 -1
  7. data/lib/shopify_api/graphql.rb +79 -0
  8. data/lib/shopify_api/graphql/http_client.rb +22 -0
  9. data/lib/shopify_api/graphql/railtie.rb +17 -0
  10. data/lib/shopify_api/graphql/task.rake +100 -0
  11. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +16 -0
  12. data/lib/shopify_api/resources/base.rb +8 -0
  13. data/lib/shopify_api/resources/fulfillment.rb +34 -0
  14. data/lib/shopify_api/resources/fulfillment_order.rb +137 -0
  15. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +4 -0
  16. data/lib/shopify_api/resources/fulfillment_v2.rb +20 -0
  17. data/lib/shopify_api/resources/order.rb +7 -0
  18. data/lib/shopify_api/session.rb +3 -3
  19. data/lib/shopify_api/version.rb +1 -1
  20. data/test/assigned_fulfillment_order_test.rb +77 -0
  21. data/test/base_test.rb +14 -0
  22. data/test/fixtures/assigned_fulfillment_orders.json +78 -0
  23. data/test/fixtures/fulfillment_order.json +38 -0
  24. data/test/fixtures/fulfillment_order_locations_for_move.json +18 -0
  25. data/test/fixtures/fulfillment_orders.json +78 -0
  26. data/test/fixtures/fulfillments.json +53 -0
  27. data/test/fixtures/graphql/2019-10.json +1083 -0
  28. data/test/fixtures/graphql/dummy_schema.rb +16 -0
  29. data/test/fixtures/graphql/unstable.json +1083 -0
  30. data/test/fulfillment_order_test.rb +462 -0
  31. data/test/fulfillment_order_test_helper.rb +7 -0
  32. data/test/fulfillment_test.rb +164 -1
  33. data/test/fulfillment_v2_test.rb +62 -0
  34. data/test/graphql/http_client_test.rb +26 -0
  35. data/test/graphql_test.rb +147 -0
  36. data/test/order_test.rb +50 -0
  37. data/test/session_test.rb +26 -13
  38. data/test/test_helper.rb +4 -1
  39. metadata +25 -3
  40. data/lib/shopify_api/resources/graphql.rb +0 -22
data/test/session_test.rb CHANGED
@@ -150,20 +150,21 @@ class SessionTest < Test::Unit::TestCase
150
150
  assert_equal(ShopifyAPI::ApiVersion.new(handle: '2019-01'), ShopifyAPI::Base.api_version)
151
151
  end
152
152
 
153
- test "create_permission_url returns correct url with single scope no redirect uri" do
154
- ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
153
+ test "create_permission_url requires redirect_uri" do
154
+ ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
155
155
  session = ShopifyAPI::Session.new(
156
156
  domain: 'http://localhost.myshopify.com',
157
157
  token: 'any-token',
158
158
  api_version: any_api_version
159
159
  )
160
160
  scope = ["write_products"]
161
- permission_url = session.create_permission_url(scope)
162
- assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products", permission_url
161
+ assert_raises(ArgumentError) do
162
+ session.create_permission_url(scope)
163
+ end
163
164
  end
164
165
 
165
166
  test "create_permission_url returns correct url with single scope and redirect uri" do
166
- ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
167
+ ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
167
168
  session = ShopifyAPI::Session.new(
168
169
  domain: 'http://localhost.myshopify.com',
169
170
  token: 'any-token',
@@ -174,28 +175,40 @@ class SessionTest < Test::Unit::TestCase
174
175
  assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products&redirect_uri=http://my_redirect_uri.com", permission_url
175
176
  end
176
177
 
177
- test "create_permission_url returns correct url with dual scope no redirect uri" do
178
- ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
178
+ test "create_permission_url returns correct url with dual scope" do
179
+ ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
179
180
  session = ShopifyAPI::Session.new(
180
181
  domain: 'http://localhost.myshopify.com',
181
182
  token: 'any-token',
182
183
  api_version: any_api_version
183
184
  )
184
185
  scope = ["write_products","write_customers"]
185
- permission_url = session.create_permission_url(scope)
186
- assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products,write_customers", permission_url
186
+ permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com")
187
+ assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products,write_customers&redirect_uri=http://my_redirect_uri.com", permission_url
188
+ end
189
+
190
+ test "create_permission_url returns correct url with no scope" do
191
+ ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
192
+ session = ShopifyAPI::Session.new(
193
+ domain: 'http://localhost.myshopify.com',
194
+ token: 'any-token',
195
+ api_version: any_api_version
196
+ )
197
+ scope = []
198
+ permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com")
199
+ assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=&redirect_uri=http://my_redirect_uri.com", permission_url
187
200
  end
188
201
 
189
- test "create_permission_url returns correct url with no scope no redirect uri" do
190
- ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
202
+ test "create_permission_url returns correct url with state" do
203
+ ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
191
204
  session = ShopifyAPI::Session.new(
192
205
  domain: 'http://localhost.myshopify.com',
193
206
  token: 'any-token',
194
207
  api_version: any_api_version
195
208
  )
196
209
  scope = []
197
- permission_url = session.create_permission_url(scope)
198
- assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=", permission_url
210
+ permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com", state: "My nonce")
211
+ assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=&redirect_uri=http://my_redirect_uri.com&state=My%20nonce", permission_url
199
212
  end
200
213
 
201
214
  test "raise exception if code invalid in request token" do
data/test/test_helper.rb CHANGED
@@ -92,6 +92,7 @@ module Test
92
92
  end
93
93
 
94
94
  def fake(endpoint, options={})
95
+ request_body = options.has_key?(:request_body) ? options.delete(:request_body) : nil
95
96
  body = options.has_key?(:body) ? options.delete(:body) : load_fixture(endpoint)
96
97
  format = options.delete(:format) || :json
97
98
  method = options.delete(:method) || :get
@@ -104,7 +105,9 @@ module Test
104
105
  "https://this-is-my-test-shop.myshopify.com#{api_version.construct_api_path("#{endpoint}#{extension}")}"
105
106
  end
106
107
 
107
- WebMock.stub_request(method, url).to_return(
108
+ stubbing = WebMock.stub_request(method, url)
109
+ stubbing = stubbing.with(body: request_body) if request_body
110
+ stubbing.to_return(
108
111
  body: body, status: status, headers: { content_type: "text/#{format}", content_length: 1 }.merge(options)
109
112
  )
110
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shopify_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.0
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-23 00:00:00.000000000 Z
11
+ date: 2020-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeresource
@@ -203,6 +203,7 @@ files:
203
203
  - Rakefile
204
204
  - bin/shopify
205
205
  - docker-compose.yml
206
+ - docs/graphql.md
206
207
  - lib/active_resource/connection_ext.rb
207
208
  - lib/active_resource/detailed_log_subscriber.rb
208
209
  - lib/active_resource/json_errors.rb
@@ -212,6 +213,10 @@ files:
212
213
  - lib/shopify_api/countable.rb
213
214
  - lib/shopify_api/disable_prefix_check.rb
214
215
  - lib/shopify_api/events.rb
216
+ - lib/shopify_api/graphql.rb
217
+ - lib/shopify_api/graphql/http_client.rb
218
+ - lib/shopify_api/graphql/railtie.rb
219
+ - lib/shopify_api/graphql/task.rake
215
220
  - lib/shopify_api/limits.rb
216
221
  - lib/shopify_api/message_enricher.rb
217
222
  - lib/shopify_api/meta.rb
@@ -230,6 +235,7 @@ files:
230
235
  - lib/shopify_api/resources/array_base.rb
231
236
  - lib/shopify_api/resources/article.rb
232
237
  - lib/shopify_api/resources/asset.rb
238
+ - lib/shopify_api/resources/assigned_fulfillment_order.rb
233
239
  - lib/shopify_api/resources/base.rb
234
240
  - lib/shopify_api/resources/billing_address.rb
235
241
  - lib/shopify_api/resources/blog.rb
@@ -254,10 +260,12 @@ files:
254
260
  - lib/shopify_api/resources/event.rb
255
261
  - lib/shopify_api/resources/fulfillment.rb
256
262
  - lib/shopify_api/resources/fulfillment_event.rb
263
+ - lib/shopify_api/resources/fulfillment_order.rb
264
+ - lib/shopify_api/resources/fulfillment_order_locations_for_move.rb
257
265
  - lib/shopify_api/resources/fulfillment_request.rb
258
266
  - lib/shopify_api/resources/fulfillment_service.rb
267
+ - lib/shopify_api/resources/fulfillment_v2.rb
259
268
  - lib/shopify_api/resources/gift_card.rb
260
- - lib/shopify_api/resources/graphql.rb
261
269
  - lib/shopify_api/resources/image.rb
262
270
  - lib/shopify_api/resources/inventory_item.rb
263
271
  - lib/shopify_api/resources/inventory_level.rb
@@ -319,6 +327,7 @@ files:
319
327
  - test/application_credit_test.rb
320
328
  - test/article_test.rb
321
329
  - test/asset_test.rb
330
+ - test/assigned_fulfillment_order_test.rb
322
331
  - test/base_test.rb
323
332
  - test/blog_test.rb
324
333
  - test/carrier_service_test.rb
@@ -350,6 +359,7 @@ files:
350
359
  - test/fixtures/articles.json
351
360
  - test/fixtures/asset.json
352
361
  - test/fixtures/assets.json
362
+ - test/fixtures/assigned_fulfillment_orders.json
353
363
  - test/fixtures/authors.json
354
364
  - test/fixtures/blog.json
355
365
  - test/fixtures/blogs.json
@@ -384,10 +394,17 @@ files:
384
394
  - test/fixtures/events.json
385
395
  - test/fixtures/fulfillment.json
386
396
  - test/fixtures/fulfillment_event.json
397
+ - test/fixtures/fulfillment_order.json
398
+ - test/fixtures/fulfillment_order_locations_for_move.json
399
+ - test/fixtures/fulfillment_orders.json
387
400
  - test/fixtures/fulfillment_request.json
388
401
  - test/fixtures/fulfillment_service.json
402
+ - test/fixtures/fulfillments.json
389
403
  - test/fixtures/gift_card.json
390
404
  - test/fixtures/gift_card_disabled.json
405
+ - test/fixtures/graphql/2019-10.json
406
+ - test/fixtures/graphql/dummy_schema.rb
407
+ - test/fixtures/graphql/unstable.json
391
408
  - test/fixtures/image.json
392
409
  - test/fixtures/images.json
393
410
  - test/fixtures/inventory_level.json
@@ -447,10 +464,15 @@ files:
447
464
  - test/fixtures/webhook.json
448
465
  - test/fixtures/webhooks.json
449
466
  - test/fulfillment_event_test.rb
467
+ - test/fulfillment_order_test.rb
468
+ - test/fulfillment_order_test_helper.rb
450
469
  - test/fulfillment_request_test.rb
451
470
  - test/fulfillment_service_test.rb
452
471
  - test/fulfillment_test.rb
472
+ - test/fulfillment_v2_test.rb
453
473
  - test/gift_card_test.rb
474
+ - test/graphql/http_client_test.rb
475
+ - test/graphql_test.rb
454
476
  - test/image_test.rb
455
477
  - test/inventory_level_test.rb
456
478
  - test/lib/webmock_extensions/last_request.rb
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'graphql/client'
3
- require 'graphql/client/http'
4
-
5
- module ShopifyAPI
6
- # GraphQL API.
7
- class GraphQL
8
- def initialize
9
- uri = Base.site.dup
10
- uri.path = Base.api_version.construct_graphql_path
11
- @http = ::GraphQL::Client::HTTP.new(uri.to_s) do
12
- define_method(:headers) do |_context|
13
- Base.headers
14
- end
15
- end
16
- @schema = ::GraphQL::Client.load_schema(@http)
17
- @client = ::GraphQL::Client.new(schema: @schema, execute: @http)
18
- end
19
-
20
- delegate :parse, :query, to: :@client
21
- end
22
- end