shopify_api 7.0.2 → 7.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 +4 -4
- data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +1027 -0
- data/CHANGELOG.md +7 -0
- data/README.md +30 -0
- data/Rakefile +1 -1
- data/lib/shopify_api.rb +2 -1
- data/lib/shopify_api/api_version.rb +17 -0
- data/lib/shopify_api/defined_versions.rb +1 -0
- data/lib/shopify_api/paginated_collection.rb +57 -0
- data/lib/shopify_api/pagination_link_headers.rb +33 -0
- data/lib/shopify_api/resources.rb +2 -1
- data/lib/shopify_api/resources/array_base.rb +13 -0
- data/lib/shopify_api/resources/base.rb +24 -21
- data/lib/shopify_api/resources/collect.rb +1 -0
- data/lib/shopify_api/resources/collection_listing.rb +10 -1
- data/lib/shopify_api/resources/customer_saved_search.rb +2 -0
- data/lib/shopify_api/resources/event.rb +1 -0
- data/lib/shopify_api/resources/metafield.rb +1 -0
- data/lib/shopify_api/resources/product.rb +2 -0
- data/lib/shopify_api/resources/product_listing.rb +8 -1
- data/lib/shopify_api/version.rb +1 -1
- data/shopify_api.gemspec +1 -1
- data/test/api_version_test.rb +14 -0
- data/test/base_test.rb +12 -6
- data/test/blog_test.rb +1 -1
- data/test/collection_listing_test.rb +38 -0
- data/test/collection_publication_test.rb +1 -1
- data/test/customer_test.rb +2 -2
- data/test/discount_code_test.rb +2 -2
- data/test/draft_order_test.rb +4 -4
- data/test/fixtures/collection_listing_product_ids2.json +1 -0
- data/test/fixtures/product_listing_product_ids.json +1 -1
- data/test/fixtures/product_listing_product_ids2.json +1 -0
- data/test/lib/webmock_extensions/last_request.rb +16 -0
- data/test/metafield_test.rb +1 -1
- data/test/pagination_test.rb +229 -0
- data/test/price_rule_test.rb +1 -1
- data/test/product_listing_test.rb +59 -2
- data/test/product_publication_test.rb +1 -1
- data/test/product_test.rb +1 -1
- data/test/recurring_application_charge_test.rb +3 -4
- data/test/shop_test.rb +1 -1
- data/test/tax_service_test.rb +2 -1
- data/test/test_helper.rb +83 -83
- metadata +12 -5
data/test/blog_test.rb
CHANGED
@@ -3,6 +3,6 @@ class BlogTest < Test::Unit::TestCase
|
|
3
3
|
test "blog creation" do
|
4
4
|
fake "blogs", :method => :post, :status => 202, :body => load_fixture('blog')
|
5
5
|
blog = ShopifyAPI::Blog.create(:title => "Test Blog")
|
6
|
-
assert_equal '{"blog":{"title":"Test Blog"}}',
|
6
|
+
assert_equal '{"blog":{"title":"Test Blog"}}', WebMock.last_request.body
|
7
7
|
end
|
8
8
|
end
|
@@ -38,4 +38,42 @@ class CollectionListingTest < Test::Unit::TestCase
|
|
38
38
|
|
39
39
|
assert_equal [1, 2], collection_listing.product_ids
|
40
40
|
end
|
41
|
+
|
42
|
+
def test_get_collection_listing_product_ids_multi_page_with_cursor
|
43
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-07')
|
44
|
+
ShopifyAPI::Base.api_version = version.to_s
|
45
|
+
|
46
|
+
collection_listing = ShopifyAPI::CollectionListing.new(collection_id: 1)
|
47
|
+
|
48
|
+
url = "https://this-is-my-test-shop.myshopify.com/admin/api/2019-07/collection_listings/1/product_ids.json"
|
49
|
+
|
50
|
+
next_page_info = "notarealpageinfobutthatsokay"
|
51
|
+
next_page_url = "#{url}?page_info=#{next_page_info}"
|
52
|
+
link_header = "<#{next_page_url}>; rel=\"next\""
|
53
|
+
|
54
|
+
fake(
|
55
|
+
"collection_listings/1/product_ids",
|
56
|
+
method: :get,
|
57
|
+
status: 201,
|
58
|
+
url: url,
|
59
|
+
body: load_fixture('collection_listing_product_ids'),
|
60
|
+
link: link_header,
|
61
|
+
)
|
62
|
+
|
63
|
+
product_ids = collection_listing.product_ids
|
64
|
+
assert_equal [1, 2], product_ids
|
65
|
+
assert product_ids.next_page?
|
66
|
+
|
67
|
+
fake(
|
68
|
+
"collection_listings/1/product_ids",
|
69
|
+
method: :get,
|
70
|
+
status: 201,
|
71
|
+
url: next_page_url,
|
72
|
+
body: load_fixture('collection_listing_product_ids2'),
|
73
|
+
link: link_header,
|
74
|
+
)
|
75
|
+
|
76
|
+
next_page = product_ids.fetch_next_page
|
77
|
+
assert_equal [3, 4], next_page
|
78
|
+
end
|
41
79
|
end
|
data/test/customer_test.rb
CHANGED
@@ -30,7 +30,7 @@ class CustomerTest < Test::Unit::TestCase
|
|
30
30
|
|
31
31
|
customer_invite_response = @customer.send_invite
|
32
32
|
|
33
|
-
assert_equal '{"customer_invite":{}}',
|
33
|
+
assert_equal '{"customer_invite":{}}', WebMock.last_request.body
|
34
34
|
assert_kind_of ShopifyAPI::CustomerInvite, customer_invite_response
|
35
35
|
assert_equal customer_invite['customer_invite']['to'], customer_invite_response.to
|
36
36
|
end
|
@@ -43,7 +43,7 @@ class CustomerTest < Test::Unit::TestCase
|
|
43
43
|
|
44
44
|
customer_invite_response = @customer.send_invite(ShopifyAPI::CustomerInvite.new(customer_invite['customer_invite']))
|
45
45
|
|
46
|
-
assert_equal customer_invite, ActiveSupport::JSON.decode(
|
46
|
+
assert_equal customer_invite, ActiveSupport::JSON.decode(WebMock.last_request.body)
|
47
47
|
assert_kind_of ShopifyAPI::CustomerInvite, customer_invite_response
|
48
48
|
assert_equal customer_invite['customer_invite']['to'], customer_invite_response.to
|
49
49
|
end
|
data/test/discount_code_test.rb
CHANGED
@@ -30,7 +30,7 @@ class DiscountCodeTest < Test::Unit::TestCase
|
|
30
30
|
discount_code.code = "SUMMERSALE10"
|
31
31
|
discount_code.save
|
32
32
|
|
33
|
-
assert_equal '{"discount_code":{"code":"SUMMERSALE10"}}',
|
33
|
+
assert_equal '{"discount_code":{"code":"SUMMERSALE10"}}', WebMock.last_request.body
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_update_discount_code
|
@@ -41,7 +41,7 @@ class DiscountCodeTest < Test::Unit::TestCase
|
|
41
41
|
fake 'price_rules/102586120/discount_codes/1002091923', method: :put, status: 200, body: ActiveSupport::JSON.encode(discount_code_response)
|
42
42
|
|
43
43
|
@discount_code.save
|
44
|
-
|
44
|
+
|
45
45
|
assert_equal discount_code_response['discount_code']['code'], @discount_code.code
|
46
46
|
end
|
47
47
|
|
data/test/draft_order_test.rb
CHANGED
@@ -39,7 +39,7 @@ class DraftOrderTest < Test::Unit::TestCase
|
|
39
39
|
|
40
40
|
draft_order = ShopifyAPI::DraftOrder.create(line_items: [{ quantity: 1, variant_id: 39072856 }])
|
41
41
|
|
42
|
-
assert_equal '{"draft_order":{"line_items":[{"quantity":1,"variant_id":39072856}]}}',
|
42
|
+
assert_equal '{"draft_order":{"line_items":[{"quantity":1,"variant_id":39072856}]}}', WebMock.last_request.body
|
43
43
|
assert_equal 39072856, draft_order.line_items.first.variant_id
|
44
44
|
end
|
45
45
|
|
@@ -69,7 +69,7 @@ class DraftOrderTest < Test::Unit::TestCase
|
|
69
69
|
|
70
70
|
draft_order_invoice_response = @draft_order.send_invoice
|
71
71
|
|
72
|
-
assert_equal '{"draft_order_invoice":{}}',
|
72
|
+
assert_equal '{"draft_order_invoice":{}}', WebMock.last_request.body
|
73
73
|
assert_kind_of ShopifyAPI::DraftOrderInvoice, draft_order_invoice_response
|
74
74
|
assert_equal draft_order_invoice['draft_order_invoice']['to'], draft_order_invoice_response.to
|
75
75
|
end
|
@@ -81,7 +81,7 @@ class DraftOrderTest < Test::Unit::TestCase
|
|
81
81
|
|
82
82
|
draft_order_invoice_response = @draft_order.send_invoice(ShopifyAPI::DraftOrderInvoice.new(draft_order_invoice['draft_order_invoice']))
|
83
83
|
|
84
|
-
assert_equal draft_order_invoice, ActiveSupport::JSON.decode(
|
84
|
+
assert_equal draft_order_invoice, ActiveSupport::JSON.decode(WebMock.last_request.body)
|
85
85
|
assert_kind_of ShopifyAPI::DraftOrderInvoice, draft_order_invoice_response
|
86
86
|
assert_equal draft_order_invoice['draft_order_invoice']['to'], draft_order_invoice_response.to
|
87
87
|
end
|
@@ -96,7 +96,7 @@ class DraftOrderTest < Test::Unit::TestCase
|
|
96
96
|
|
97
97
|
field = @draft_order.add_metafield(ShopifyAPI::Metafield.new(namespace: 'contact', key: 'email', value: '123@example.com', value_type: 'string'))
|
98
98
|
|
99
|
-
assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"contact","key":"email","value":"123@example.com","value_type":"string"}}'), ActiveSupport::JSON.decode(
|
99
|
+
assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"contact","key":"email","value":"123@example.com","value_type":"string"}}'), ActiveSupport::JSON.decode(WebMock.last_request.body)
|
100
100
|
assert !field.new_record?
|
101
101
|
assert_equal 'contact', field.namespace
|
102
102
|
assert_equal 'email', field.key
|
@@ -0,0 +1 @@
|
|
1
|
+
[3, 4]
|
@@ -1 +1 @@
|
|
1
|
-
[
|
1
|
+
[4, 3]
|
@@ -0,0 +1 @@
|
|
1
|
+
[2, 1]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LastRequest
|
4
|
+
def last_request
|
5
|
+
@last_request
|
6
|
+
end
|
7
|
+
|
8
|
+
def last_request=(request_signature)
|
9
|
+
@last_request = request_signature
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
WebMock.extend(LastRequest)
|
14
|
+
WebMock.after_request do |request_signature, response|
|
15
|
+
WebMock.last_request = request_signature
|
16
|
+
end
|
data/test/metafield_test.rb
CHANGED
@@ -24,7 +24,7 @@ class MetafieldTest < Test::Unit::TestCase
|
|
24
24
|
blog = ShopifyAPI::Blog.find(1008414260)
|
25
25
|
metafield = blog.add_metafield(ShopifyAPI::Metafield.new(:namespace => "summaries", :key => "First Summary", :value => "Make commerce better", :value_type => "string"))
|
26
26
|
|
27
|
-
assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"summaries","key":"First Summary","value":"Make commerce better","value_type":"string"}}'), ActiveSupport::JSON.decode(
|
27
|
+
assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"summaries","key":"First Summary","value":"Make commerce better","value_type":"string"}}'), ActiveSupport::JSON.decode(WebMock.last_request.body)
|
28
28
|
assert !metafield.new_record?
|
29
29
|
end
|
30
30
|
|
@@ -0,0 +1,229 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PaginationTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
super
|
6
|
+
|
7
|
+
@version = ShopifyAPI::ApiVersion::Release.new('2019-10')
|
8
|
+
ShopifyAPI::Base.api_version = @version.to_s
|
9
|
+
@next_page_info = "eyJkaXJlY3Rpb24iOiJuZXh0IiwibGFzdF9pZCI6NDQwMDg5NDIzLCJsYXN0X3ZhbHVlIjoiNDQwMDg5NDIzIn0%3D"
|
10
|
+
@previous_page_info = "eyJsYXN0X2lkIjoxMDg4MjgzMDksImxhc3RfdmFsdWUiOiIxMDg4MjgzMDkiLCJkaXJlY3Rpb24iOiJuZXh0In0%3D"
|
11
|
+
|
12
|
+
@next_link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?page_info=#{@next_page_info}>; rel=\"next\""
|
13
|
+
@previous_link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?page_info=#{@previous_page_info}>; rel=\"previous\""
|
14
|
+
end
|
15
|
+
|
16
|
+
test "navigates using next and previous link headers with no original params" do
|
17
|
+
link_header ="#{@previous_link_header}, #{@next_link_header}"
|
18
|
+
|
19
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => link_header
|
20
|
+
orders = ShopifyAPI::Order.all
|
21
|
+
|
22
|
+
fake(
|
23
|
+
'orders',
|
24
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?page_info=#{@next_page_info}",
|
25
|
+
method: :get,
|
26
|
+
status: 200,
|
27
|
+
body: load_fixture('orders')
|
28
|
+
)
|
29
|
+
next_page = orders.fetch_next_page
|
30
|
+
assert_equal 450789469, next_page.first.id
|
31
|
+
|
32
|
+
fake(
|
33
|
+
'orders',
|
34
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?page_info=#{@previous_page_info}",
|
35
|
+
method: :get,
|
36
|
+
status: 200,
|
37
|
+
body: load_fixture('orders').gsub("450789469", "1122334455")
|
38
|
+
)
|
39
|
+
|
40
|
+
previous_page = orders.fetch_previous_page
|
41
|
+
assert_equal 1122334455, previous_page.first.id
|
42
|
+
end
|
43
|
+
|
44
|
+
test "uses all passed in querystring parameters" do
|
45
|
+
params = "page_info=#{@next_page_info}&limit=50&fields=#{CGI.escape('id,created_at')}"
|
46
|
+
@next_link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?#{params}>; rel=\"next\""
|
47
|
+
fake(
|
48
|
+
'orders',
|
49
|
+
method: :get,
|
50
|
+
status: 200,
|
51
|
+
api_version: @version,
|
52
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?fields=id%2Cupdated_at&limit=100",
|
53
|
+
body: load_fixture('orders'),
|
54
|
+
link: @next_link_header
|
55
|
+
)
|
56
|
+
orders = ShopifyAPI::Order.where(fields: 'id,updated_at', limit: 100)
|
57
|
+
|
58
|
+
fake(
|
59
|
+
'orders',
|
60
|
+
method: :get,
|
61
|
+
status: 200,
|
62
|
+
api_version: @version,
|
63
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?fields=id%2Ccreated_at&limit=50&page_info=#{@next_page_info}",
|
64
|
+
body: load_fixture('orders')
|
65
|
+
)
|
66
|
+
next_page = orders.fetch_next_page
|
67
|
+
assert_equal 450789469, next_page.first.id
|
68
|
+
end
|
69
|
+
|
70
|
+
test "returns empty next page if just the previous page is present" do
|
71
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @previous_link_header
|
72
|
+
orders = ShopifyAPI::Order.all
|
73
|
+
|
74
|
+
next_page = orders.fetch_next_page
|
75
|
+
assert_empty next_page
|
76
|
+
end
|
77
|
+
|
78
|
+
test "returns an empty previous page if just the next page is present" do
|
79
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @next_link_header
|
80
|
+
orders = ShopifyAPI::Order.all
|
81
|
+
|
82
|
+
next_page = orders.fetch_previous_page
|
83
|
+
assert_empty next_page
|
84
|
+
end
|
85
|
+
|
86
|
+
test "#next_page? returns true if next page is present" do
|
87
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @next_link_header
|
88
|
+
orders = ShopifyAPI::Order.all
|
89
|
+
|
90
|
+
assert orders.next_page?
|
91
|
+
end
|
92
|
+
|
93
|
+
test "#next_page? returns false if next page is not present" do
|
94
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @previous_link_header
|
95
|
+
orders = ShopifyAPI::Order.all
|
96
|
+
|
97
|
+
refute orders.next_page?
|
98
|
+
end
|
99
|
+
|
100
|
+
test "#previous_page? returns true if previous page is present" do
|
101
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @previous_link_header
|
102
|
+
orders = ShopifyAPI::Order.all
|
103
|
+
|
104
|
+
assert orders.previous_page?
|
105
|
+
end
|
106
|
+
|
107
|
+
test "#previous_page? returns false if next page is not present" do
|
108
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => @next_link_header
|
109
|
+
orders = ShopifyAPI::Order.all
|
110
|
+
|
111
|
+
refute orders.previous_page?
|
112
|
+
end
|
113
|
+
|
114
|
+
test "pagination handles no link headers" do
|
115
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders')
|
116
|
+
orders = ShopifyAPI::Order.all
|
117
|
+
|
118
|
+
refute orders.next_page?
|
119
|
+
refute orders.previous_page?
|
120
|
+
assert_empty orders.fetch_next_page
|
121
|
+
assert_empty orders.fetch_previous_page
|
122
|
+
end
|
123
|
+
|
124
|
+
test "raises on invalid pagination links" do
|
125
|
+
link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?page_info=#{@next_page_info}>;"
|
126
|
+
fake 'orders', :method => :get, :status => 200, api_version: @version, :body => load_fixture('orders'), :link => link_header
|
127
|
+
|
128
|
+
assert_raises ShopifyAPI::InvalidPaginationLinksError do
|
129
|
+
ShopifyAPI::Order.all
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
test "raises on an older API version" do
|
134
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-04')
|
135
|
+
ShopifyAPI::Base.api_version = version.to_s
|
136
|
+
|
137
|
+
fake 'orders', :method => :get, :status => 200, api_version: version, :body => load_fixture('orders')
|
138
|
+
orders = ShopifyAPI::Order.all
|
139
|
+
|
140
|
+
assert_raises NotImplementedError do
|
141
|
+
orders.fetch_next_page
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
test "raises on 2019-07 API version for models that don't support new pagination yet" do
|
146
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-07')
|
147
|
+
ShopifyAPI::Base.api_version = version.to_s
|
148
|
+
|
149
|
+
fake 'orders', :method => :get, :status => 200, api_version: version, :body => load_fixture('orders')
|
150
|
+
orders = ShopifyAPI::Order.all
|
151
|
+
|
152
|
+
assert_raises NotImplementedError do
|
153
|
+
orders.fetch_next_page
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
test "new pagination works on 2019-07 API version for select models" do
|
158
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-07')
|
159
|
+
ShopifyAPI::Base.api_version = version.to_s
|
160
|
+
|
161
|
+
fake 'events', :method => :get, :status => 200, api_version: version, :body => load_fixture('events')
|
162
|
+
events = ShopifyAPI::Event.all
|
163
|
+
|
164
|
+
assert_empty events.fetch_next_page
|
165
|
+
assert_empty events.fetch_previous_page
|
166
|
+
end
|
167
|
+
|
168
|
+
test "does not raise on the unstable version" do
|
169
|
+
version = ShopifyAPI::ApiVersion::Unstable.new
|
170
|
+
ShopifyAPI::Base.api_version = version.to_s
|
171
|
+
@next_link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/unstable/orders.json?page_info=#{@next_page_info}>; rel=\"next\""
|
172
|
+
|
173
|
+
link_header ="#{@previous_link_header}, #{@next_link_header}"
|
174
|
+
|
175
|
+
fake 'orders', :method => :get, :status => 200, api_version: version, :body => load_fixture('orders'), :link => link_header
|
176
|
+
orders = ShopifyAPI::Order.all
|
177
|
+
|
178
|
+
fake(
|
179
|
+
'orders',
|
180
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/unstable/orders.json?page_info=#{@next_page_info}",
|
181
|
+
method: :get,
|
182
|
+
status: 200,
|
183
|
+
body: load_fixture('orders')
|
184
|
+
)
|
185
|
+
assert_nothing_raised do
|
186
|
+
next_page = orders.fetch_next_page
|
187
|
+
assert_equal 450789469, next_page.first.id
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
test "allows for multiple concurrent API collection objects" do
|
192
|
+
first_request_params = "page_info=#{@next_page_info}&limit=5"
|
193
|
+
fake(
|
194
|
+
'orders',
|
195
|
+
method: :get,
|
196
|
+
status: 200,
|
197
|
+
api_version: @version,
|
198
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?limit=5",
|
199
|
+
body: load_fixture('orders'),
|
200
|
+
link: "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?#{first_request_params}>; rel=\"next\""
|
201
|
+
)
|
202
|
+
orders = ShopifyAPI::Order.where(limit: 5)
|
203
|
+
|
204
|
+
second_request_params = "page_info=#{@next_page_info}&limit=5"
|
205
|
+
fake(
|
206
|
+
'orders',
|
207
|
+
method: :get,
|
208
|
+
status: 200,
|
209
|
+
api_version: @version,
|
210
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?limit=10",
|
211
|
+
body: load_fixture('orders'),
|
212
|
+
link: "<https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?#{second_request_params}>; rel=\"next\""
|
213
|
+
)
|
214
|
+
|
215
|
+
orders2 = ShopifyAPI::Order.where(limit: 10)
|
216
|
+
|
217
|
+
fake(
|
218
|
+
'orders',
|
219
|
+
method: :get,
|
220
|
+
status: 200,
|
221
|
+
api_version: @version,
|
222
|
+
url: "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/orders.json?limit=5&page_info=#{@next_page_info}",
|
223
|
+
body: load_fixture('orders')
|
224
|
+
)
|
225
|
+
next_page = orders.fetch_next_page
|
226
|
+
assert_equal 450789469, next_page.first.id
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
data/test/price_rule_test.rb
CHANGED
@@ -42,7 +42,7 @@ class PriceRuleTest < Test::Unit::TestCase
|
|
42
42
|
starts_at: "2017-01-19T00:00:00Z"
|
43
43
|
)
|
44
44
|
|
45
|
-
assert_equal '{"price_rule":{"target_type":"line_item","allocation_method":"across","value_type":"fixed_amount","value":-10.0,"customer_selection":"all","starts_at":"2017-01-19T00:00:00Z"}}',
|
45
|
+
assert_equal '{"price_rule":{"target_type":"line_item","allocation_method":"across","value_type":"fixed_amount","value":-10.0,"customer_selection":"all","starts_at":"2017-01-19T00:00:00Z"}}', WebMock.last_request.body
|
46
46
|
assert_equal -10, price_rule.value
|
47
47
|
end
|
48
48
|
|
@@ -34,7 +34,64 @@ class ProductListingTest < Test::Unit::TestCase
|
|
34
34
|
|
35
35
|
product_ids = ShopifyAPI::ProductListing.product_ids
|
36
36
|
assert_equal 2, product_ids.count
|
37
|
-
assert_equal
|
38
|
-
assert_equal
|
37
|
+
assert_equal 4, product_ids.first
|
38
|
+
assert_equal 3, product_ids.last
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_get_product_listing_product_ids_multi_page_with_cursor
|
42
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-10')
|
43
|
+
ShopifyAPI::Base.api_version = version.to_s
|
44
|
+
|
45
|
+
url = "https://this-is-my-test-shop.myshopify.com/admin/api/2019-10/product_listings/product_ids.json"
|
46
|
+
|
47
|
+
next_page_info = "notarealpageinfobutthatsokay"
|
48
|
+
next_page_url = "#{url}?page_info=#{next_page_info}"
|
49
|
+
link_header = "<#{next_page_url}>; rel=\"next\""
|
50
|
+
|
51
|
+
fake(
|
52
|
+
"product_listings/product_ids",
|
53
|
+
method: :get,
|
54
|
+
status: 201,
|
55
|
+
url: url,
|
56
|
+
body: load_fixture('product_listing_product_ids'),
|
57
|
+
link: link_header,
|
58
|
+
)
|
59
|
+
|
60
|
+
product_ids = ShopifyAPI::ProductListing.product_ids
|
61
|
+
assert_equal [4, 3], product_ids
|
62
|
+
assert product_ids.next_page?
|
63
|
+
|
64
|
+
fake(
|
65
|
+
"product_listings/product_ids",
|
66
|
+
method: :get,
|
67
|
+
status: 201,
|
68
|
+
url: next_page_url,
|
69
|
+
body: load_fixture('product_listing_product_ids2'),
|
70
|
+
link: link_header,
|
71
|
+
)
|
72
|
+
|
73
|
+
next_page = product_ids.fetch_next_page
|
74
|
+
assert_equal [2, 1], next_page
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_get_product_listing_product_ids_multi_page_with_cursor_fails_on_older_api_version
|
78
|
+
version = ShopifyAPI::ApiVersion::Release.new('2019-07')
|
79
|
+
ShopifyAPI::Base.api_version = version.to_s
|
80
|
+
|
81
|
+
url = "https://this-is-my-test-shop.myshopify.com/admin/api/2019-07/product_listings/product_ids.json"
|
82
|
+
|
83
|
+
fake(
|
84
|
+
"product_listings/product_ids",
|
85
|
+
method: :get,
|
86
|
+
status: 201,
|
87
|
+
url: url,
|
88
|
+
body: load_fixture('product_listing_product_ids'),
|
89
|
+
)
|
90
|
+
|
91
|
+
product_ids = ShopifyAPI::ProductListing.product_ids
|
92
|
+
assert_equal [4, 3], product_ids
|
93
|
+
assert_raises NotImplementedError do
|
94
|
+
product_ids.next_page?
|
95
|
+
end
|
39
96
|
end
|
40
97
|
end
|