Skip to content

Commit

Permalink
Add fulfillment order related GET requests:
Browse files Browse the repository at this point in the history
- orders/:order_id/fulfillment_orders
- assigned_fulfillment_orders
- fulfillment_orders/:fulfillment_order_id
- fulfillment_orders/:fulfillment_order_id/fulfillments

Read FulfillmentOrder for an Order or with just an order_id
  • Loading branch information
karmakaze committed Jan 8, 2020
1 parent 79a58b6 commit b0350cb
Show file tree
Hide file tree
Showing 10 changed files with 389 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lib/shopify_api/resources/assigned_fulfillment_order.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module ShopifyAPI
class AssignedFulfillmentOrder < Base
def self.all(options = {})
assigned_fulfillment_orders = super(options)
assigned_fulfillment_orders.map { |afo| FulfillmentOrder.new(afo.attributes) }
end
end
end
16 changes: 16 additions & 0 deletions lib/shopify_api/resources/fulfillment_order.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module ShopifyAPI
class FulfillmentOrder < Base
def self.all(options = {})
order_id = options.dig(:params, :order_id)
raise ShopifyAPI::ValidationException, "'order_id' is required" if order_id.nil? || order_id == ''

order = ::ShopifyAPI::Order.new(id: order_id)
order.fulfillment_orders
end

def fulfillments(options = {})
fulfillment_hashes = get(:fulfillments, options)
fulfillment_hashes.map { |fulfillment_hash| Fulfillment.new(fulfillment_hash) }
end
end
end
5 changes: 5 additions & 0 deletions lib/shopify_api/resources/order.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ def capture(amount = "", currency: nil)
Transaction.create(capture_transaction)
end

def fulfillment_orders(options = {})
fulfillment_order_hashes = get(:fulfillment_orders, options)
fulfillment_order_hashes.map { |fulfillment_order_hash| FulfillmentOrder.new(fulfillment_order_hash) }
end

class ClientDetails < Base
end
end
Expand Down
41 changes: 41 additions & 0 deletions test/assigned_fulfillment_order_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require 'test_helper'

class AssignedFulFillmentOrderTest < Test::Unit::TestCase
context "AssignedFulfillmentOrder" do
context "#all" do
should "list assigned fulfillment orders by assigned_status" do
fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
fake 'assigned_fulfillment_orders.json?assigned_status=cancellation_requested', method: :get,
body: fulfillment_order_fixture, extension: false

assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
params: { assigned_status: 'cancellation_requested' }
)

assert_equal 2, assigned_fulfillment_orders.count
assigned_fulfillment_orders.each do |fulfillment_order|
assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
assert_equal 'in_progress', fulfillment_order.status
assert_equal 'cancellation_accepted', fulfillment_order.request_status
end
end

should "be able to list assigned fulfillment orders by location_ids" do
fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
assigned_location_id = 905684977
fake "assigned_fulfillment_orders.json?location_ids%5B%5D=#{assigned_location_id}", method: :get,
body: fulfillment_order_fixture, extension: false

assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
params: { location_ids: [assigned_location_id] }
)

assert_equal 2, assigned_fulfillment_orders.count
assigned_fulfillment_orders.each do |fulfillment_order|
assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
assert_equal assigned_location_id, fulfillment_order.assigned_location_id
end
end
end
end
end
78 changes: 78 additions & 0 deletions test/fixtures/assigned_fulfillment_orders.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
[
{
"id": 519788021,
"order_id": 450789469,
"fulfillment_service_handle": "shipwire",
"status": "in_progress",
"requires_shipping": true,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:42-04:00",
"updated_at": "2016-07-12T11:23:42-04:00",
"happened_at": "2016-07-12T11:23:42-04:00",
"assigned_location_id": 905684977,
"request_status": "cancellation_accepted",
"delivery_category": null,
"fulfillment_order_line_items": [
{
"id": 519788021,
"shop_id": 690933842,
"fulfillment_order_id": 519788021,
"line_item_id": 466157049,
"variant_id": 43729076,
"inventory_item_id": 808950810,
"inventory_commitment_id": 273471403,
"quantity": 1,
"sku": "IPOD2008GREEN",
"vendor": null,
"variant_title": "green",
"product_title": "IPod Nano - 8gb",
"pre_tax_price": 398.00,
"currency": "USD",
"properties": null,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:54-04:00",
"updated_at": "2016-07-12T11:23:54-04:00"
}
]
},
{
"id": 519788022,
"order_id": 450789469,
"fulfillment_service_handle": "manual",
"status": "in_progress",
"requires_shipping": true,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:42-04:00",
"updated_at": "2016-07-12T11:23:42-04:00",
"happened_at": "2016-07-12T11:23:42-04:00",
"assigned_location_id": 905684977,
"request_status": "cancellation_accepted",
"delivery_category": null,
"fulfillment_order_line_items": [
{
"id": 519788021,
"shop_id": 690933842,
"fulfillment_order_id": 519788021,
"line_item_id": 466157049,
"variant_id": 43729076,
"inventory_item_id": 808950810,
"inventory_commitment_id": 273471403,
"quantity": 1,
"sku": "IPOD2008RED",
"vendor": null,
"variant_title": "red",
"product_title": "IPod Nano - 8gb",
"pre_tax_price": 398.00,
"currency": "USD",
"properties": null,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:54-04:00",
"updated_at": "2016-07-12T11:23:54-04:00"
}
]
}
]
38 changes: 38 additions & 0 deletions test/fixtures/fulfillment_order.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"id": 519788021,
"order_id": 450789469,
"fulfillment_service_handle": "shipwire",
"status": "open",
"requires_shipping": true,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:42-04:00",
"updated_at": "2016-07-12T11:23:42-04:00",
"happened_at": "2016-07-12T11:23:42-04:00",
"assigned_location_id": 905684977,
"request_status": "unsubmitted",
"delivery_category": null,
"fulfillment_order_line_items": [
{
"id": 519788021,
"shop_id": 690933842,
"fulfillment_order_id": 519788021,
"line_item_id": 466157049,
"variant_id": 43729076,
"inventory_item_id": 808950810,
"inventory_commitment_id": 273471403,
"quantity": 1,
"sku": "IPOD2008GREEN",
"vendor": null,
"variant_title": "green",
"product_title": "IPod Nano - 8gb",
"pre_tax_price": 398.00,
"currency": "USD",
"properties": null,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:54-04:00",
"updated_at": "2016-07-12T11:23:54-04:00"
}
]
}
78 changes: 78 additions & 0 deletions test/fixtures/fulfillment_orders.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
[
{
"id": 519788021,
"order_id": 450789469,
"fulfillment_service_handle": "shipwire",
"status": "open",
"requires_shipping": true,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:42-04:00",
"updated_at": "2016-07-12T11:23:42-04:00",
"happened_at": "2016-07-12T11:23:42-04:00",
"assigned_location_id": 905684977,
"request_status": "unsubmitted",
"delivery_category": null,
"fulfillment_order_line_items": [
{
"id": 519788021,
"shop_id": 690933842,
"fulfillment_order_id": 519788021,
"line_item_id": 466157049,
"variant_id": 43729076,
"inventory_item_id": 808950810,
"inventory_commitment_id": 273471403,
"quantity": 1,
"sku": "IPOD2008GREEN",
"vendor": null,
"variant_title": "green",
"product_title": "IPod Nano - 8gb",
"pre_tax_price": 398.00,
"currency": "USD",
"properties": null,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:54-04:00",
"updated_at": "2016-07-12T11:23:54-04:00"
}
]
},
{
"id": 519788022,
"order_id": 450789469,
"fulfillment_service_handle": "manual",
"status": "open",
"requires_shipping": true,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:42-04:00",
"updated_at": "2016-07-12T11:23:42-04:00",
"happened_at": "2016-07-12T11:23:42-04:00",
"assigned_location_id": 905684977,
"request_status": "unsubmitted",
"delivery_category": null,
"fulfillment_order_line_items": [
{
"id": 519788021,
"shop_id": 690933842,
"fulfillment_order_id": 519788021,
"line_item_id": 466157049,
"variant_id": 43729076,
"inventory_item_id": 808950810,
"inventory_commitment_id": 273471403,
"quantity": 1,
"sku": "IPOD2008RED",
"vendor": null,
"variant_title": "red",
"product_title": "IPod Nano - 8gb",
"pre_tax_price": 398.00,
"currency": "USD",
"properties": null,
"is_not_deleted": true,
"deleted_at": null,
"created_at": "2016-07-12T11:23:54-04:00",
"updated_at": "2016-07-12T11:23:54-04:00"
}
]
}
]
53 changes: 53 additions & 0 deletions test/fixtures/fulfillments.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
[
{
"created_at": "2014-03-07T16:14:08-05:00",
"id": 255858046,
"order_id": 450789469,
"service": "manual",
"status": "failure",
"tracking_company": null,
"updated_at": "2014-03-07T16:14:08-05:00",
"tracking_number": "1Z2345",
"tracking_numbers": [
"1Z2345"
],
"tracking_url": "http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=1Z2345&TypeOfInquiryNumber=T&AcceptUPSLicenseAgreement=yes&submit=Track",
"tracking_urls": [
"http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=1Z2345&TypeOfInquiryNumber=T&AcceptUPSLicenseAgreement=yes&submit=Track"
],
"receipt": {
"testcase": true,
"authorization": "123456"
},
"line_items": [
{
"fulfillment_service": "manual",
"fulfillment_status": null,
"grams": 200,
"id": 466157049,
"price": "199.00",
"product_id": 632910392,
"quantity": 1,
"requires_shipping": true,
"sku": "IPOD2008GREEN",
"taxable": true,
"title": "IPod Nano - 8gb",
"variant_id": 39072856,
"variant_title": "green",
"vendor": null,
"name": "IPod Nano - 8gb - green",
"variant_inventory_management": "shopify",
"properties": [
{
"name": "Custom Engraving",
"value": "Happy Birthday"
}
],
"product_exists": true,
"tax_lines": [

]
}
]
}
]
58 changes: 58 additions & 0 deletions test/fulfillment_order_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
require 'test_helper'

class FulFillmentOrderTest < Test::Unit::TestCase
def setup
super
fake "fulfillment_orders/519788021", method: :get,
body: load_fixture('fulfillment_order')
end

context "FulfillmentOrder" do
context "#find" do
should "be able to find fulfillment order" do
fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
assert_equal 519788021, fulfillment_order.id
assert_equal 450789469, fulfillment_order.order_id
end
end

context "#all" do
should "be able to list fulfillment orders for an order" do
fake 'orders/450789469/fulfillment_orders', method: :get, body: load_fixture('fulfillment_orders')

fulfillment_orders = ShopifyAPI::FulfillmentOrder.all(
params: { order_id: 450789469 }
)

assert_equal [519788021, 519788022], fulfillment_orders.map(&:id).sort
fulfillment_orders.each do |fulfillment_order|
assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
assert_equal 450789469, fulfillment_order.order_id
end
end

should "require order_id" do
assert_raises ShopifyAPI::ValidationException do
ShopifyAPI::FulfillmentOrder.all
end
end
end

context "#fulfillments" do
should "be able to list fulfillments for a fulfillment order" do
fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)

fake "fulfillment_orders/#{fulfillment_order.id}/fulfillments", method: :get,
body: load_fixture('fulfillments')

fulfillments = fulfillment_order.fulfillments

assert_equal 1, fulfillments.count
fulfillment = fulfillments.first
assert fulfillment.is_a?(ShopifyAPI::Fulfillment)
assert_equal 450789469, fulfillment.order_id
end
end
end
end
Loading

0 comments on commit b0350cb

Please sign in to comment.