Skip to content

Commit a82a554

Browse files
committed
Updates from PR review
1 parent b0806a1 commit a82a554

File tree

5 files changed

+198
-92
lines changed

5 files changed

+198
-92
lines changed

lib/shopify_api/resources/fulfillment.rb

+22-8
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,32 @@ def order_id
66
@prefix_options[:order_id]
77
end
88

9-
def cancel; load_attributes_from_response(post(:cancel, {}, only_id)); end
9+
def cancel(using_fulfillment_orders: false)
10+
if using_fulfillment_orders
11+
fulfillmentV2 = FulfillmentV2.new(attributes)
12+
result = fulfillmentV2.cancel
13+
load(fulfillmentV2.attributes, false, true)
14+
result
15+
else
16+
load_attributes_from_response(post(:cancel, {}, only_id))
17+
end
18+
end
19+
1020
def complete; load_attributes_from_response(post(:complete, {}, only_id)); end
1121
def open; load_attributes_from_response(post(:open, {}, only_id)); end
1222

23+
def create
24+
fulfillmentV2 = FulfillmentV2.new(attributes)
25+
result = fulfillmentV2.create
26+
load(fulfillmentV2.attributes, false, true)
27+
result
28+
end
29+
1330
def update_tracking(tracking_info:, notify_customer:)
14-
body = {
15-
fulfillment: {
16-
tracking_info: tracking_info,
17-
notify_customer: notify_customer
18-
}
19-
}
20-
load_attributes_from_response(post(:update_tracking, {}, body.to_json))
31+
fulfillmentV2 = FulfillmentV2.new(attributes)
32+
result = fulfillmentV2.update_tracking(tracking_info: tracking_info, notify_customer: notify_customer)
33+
load(fulfillmentV2.attributes, false, true)
34+
result
2135
end
2236
end
2337
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module ShopifyAPI
2+
class FulfillmentV2 < Base
3+
self.element_name = 'fulfillment'
4+
5+
def update_tracking(tracking_info:, notify_customer:)
6+
body = {
7+
fulfillment: {
8+
tracking_info: tracking_info,
9+
notify_customer: notify_customer
10+
}
11+
}
12+
load_attributes_from_response(post(:update_tracking, {}, body.to_json))
13+
end
14+
15+
def cancel
16+
load_attributes_from_response(post(:cancel, {}, only_id))
17+
end
18+
end
19+
end

test/fulfillment_order_fulfillment_test.rb

-84
This file was deleted.

test/fulfillment_test.rb

+75
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ def setup
3333
assert fulfillment.cancel
3434
assert_equal 'cancelled', fulfillment.status
3535
end
36+
37+
should "be able to cancel fulfillment that uses fulfiment orders" do
38+
fake_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))['fulfillment']
39+
fake_fulfillment['status'] = 'cancelled'
40+
fake "fulfillments/#{fake_fulfillment['id']}/cancel", method: :post,
41+
body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
42+
43+
fulfillment = ShopifyAPI::Fulfillment.new(id: fake_fulfillment['id'])
44+
assert fulfillment.cancel(using_fulfillment_orders: true)
45+
assert_equal 'cancelled', fulfillment.status
46+
end
3647
end
3748

3849
context "#open" do
@@ -56,6 +67,70 @@ def setup
5667
assert_equal 450789469, fulfillment.order_id
5768
end
5869
end
70+
71+
context "#create" do
72+
should "be able to create a fulfillment order fulfillment" do
73+
create_fulfillment_attributes = {
74+
message: "The message for this FO fulfillment",
75+
notify_customer: true,
76+
tracking_info: {
77+
number: "XSDFHYR23475",
78+
url: "https://tracking.example.com/XSDFHYR23475",
79+
company: "TFTC - the fulfillment/tracking company"
80+
},
81+
line_items_by_fulfillment_order: [
82+
{
83+
fulfillment_order_id: 3,
84+
fulfillment_order_line_items: [{ id: 2, quantity: 1 }]
85+
}
86+
]
87+
}
88+
request_body = { fulfillment: create_fulfillment_attributes }
89+
response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
90+
fake "fulfillments", :method => :post,
91+
request_body: ActiveSupport::JSON.encode(request_body),
92+
body: ActiveSupport::JSON.encode(response_body)
93+
94+
fulfillment = ShopifyAPI::Fulfillment.new(create_fulfillment_attributes)
95+
assert fulfillment.save
96+
assert_equal 346743624, fulfillment.id
97+
end
98+
end
99+
100+
context "#update_tracking" do
101+
should "be able to update tracking info for a fulfillment" do
102+
tracking_info = {
103+
number: 'JSDHFHAG',
104+
url: 'https://example.com/fulfillment_tracking/JSDHFHAG',
105+
company: 'ACME co',
106+
}
107+
fake_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))['fulfillment']
108+
fake_fulfillment['tracking_number'] = tracking_info[:number]
109+
fake_fulfillment['tracking_numbers'] = [tracking_info[:number]]
110+
fake_fulfillment['tracking_url'] = tracking_info[:url]
111+
fake_fulfillment['tracking_urls'] = [tracking_info[:url]]
112+
fake_fulfillment['tracking_company'] = tracking_info[:company]
113+
114+
request_body = {
115+
fulfillment: {
116+
tracking_info: tracking_info,
117+
notify_customer: true
118+
}
119+
}
120+
fake "fulfillments/#{fake_fulfillment['id']}/update_tracking", method: :post,
121+
request_body: ActiveSupport::JSON.encode(request_body),
122+
body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
123+
124+
fulfillment = ShopifyAPI::Fulfillment.new(id: fake_fulfillment['id'])
125+
assert fulfillment.update_tracking(tracking_info: tracking_info, notify_customer: true)
126+
127+
assert_equal tracking_info[:number], fulfillment.tracking_number
128+
assert_equal [tracking_info[:number]], fulfillment.tracking_numbers
129+
assert_equal tracking_info[:url], fulfillment.tracking_url
130+
assert_equal [tracking_info[:url]], fulfillment.tracking_urls
131+
assert_equal tracking_info[:company], fulfillment.tracking_company
132+
end
133+
end
59134
end
60135

61136
end

test/fulfillment_v2_test.rb

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
require 'test_helper'
2+
3+
class FulfillmentV2Test < Test::Unit::TestCase
4+
context "FulfillmentV2" do
5+
context "#create" do
6+
should "be able to create a fulfillment order fulfillment" do
7+
create_fulfillment_attributes = {
8+
message: "The message for this FO fulfillment",
9+
notify_customer: true,
10+
tracking_info: {
11+
number: "XSDFHYR23475",
12+
url: "https://tracking.example.com/XSDFHYR23475",
13+
company: "TFTC - the fulfillment/tracking company"
14+
},
15+
line_items_by_fulfillment_order: [
16+
{
17+
fulfillment_order_id: 3,
18+
fulfillment_order_line_items: [{ id: 2, quantity: 1 }]
19+
}
20+
]
21+
}
22+
request_body = { fulfillment: create_fulfillment_attributes }
23+
response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
24+
fake "fulfillments", :method => :post,
25+
:request_body => ActiveSupport::JSON.encode(request_body),
26+
:body => ActiveSupport::JSON.encode(response_body)
27+
28+
fulfillment = ShopifyAPI::FulfillmentV2.new(create_fulfillment_attributes)
29+
assert fulfillment.save
30+
assert_equal 346743624, fulfillment.id
31+
end
32+
end
33+
34+
context "#update_tracking" do
35+
should "be able to update tracking info for a fulfillment" do
36+
tracking_info = {
37+
number: 'JSDHFHAG',
38+
url: 'https://example.com/fulfillment_tracking/JSDHFHAG',
39+
company: 'ACME co',
40+
}
41+
fake_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))['fulfillment']
42+
fake_fulfillment['tracking_number'] = tracking_info[:number]
43+
fake_fulfillment['tracking_numbers'] = [tracking_info[:number]]
44+
fake_fulfillment['tracking_url'] = tracking_info[:url]
45+
fake_fulfillment['tracking_urls'] = [tracking_info[:url]]
46+
fake_fulfillment['tracking_company'] = tracking_info[:company]
47+
48+
request_body = {
49+
fulfillment: {
50+
tracking_info: tracking_info,
51+
notify_customer: true
52+
}
53+
}
54+
fake "fulfillments/#{fake_fulfillment['id']}/update_tracking", method: :post,
55+
request_body: ActiveSupport::JSON.encode(request_body),
56+
body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
57+
58+
fulfillment = ShopifyAPI::FulfillmentV2.new(id: fake_fulfillment['id'])
59+
assert fulfillment.update_tracking(tracking_info: tracking_info, notify_customer: true)
60+
61+
assert_equal tracking_info[:number], fulfillment.tracking_number
62+
assert_equal [tracking_info[:number]], fulfillment.tracking_numbers
63+
assert_equal tracking_info[:url], fulfillment.tracking_url
64+
assert_equal [tracking_info[:url]], fulfillment.tracking_urls
65+
assert_equal tracking_info[:company], fulfillment.tracking_company
66+
end
67+
end
68+
69+
context "#cancel" do
70+
should "be able to cancel a fulfillment" do
71+
fake_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))['fulfillment']
72+
fake_fulfillment['status'] = 'cancelled'
73+
fake "fulfillments/#{fake_fulfillment['id']}/cancel", method: :post,
74+
body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
75+
76+
fulfillment = ShopifyAPI::FulfillmentV2.new(id: fake_fulfillment['id'])
77+
assert fulfillment.cancel
78+
assert_equal 'cancelled', fulfillment.status
79+
end
80+
end
81+
end
82+
end

0 commit comments

Comments
 (0)