Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfix/extract all tracking numbers from amazon mws #18

Merged
merged 2 commits into from Jan 3, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
@@ -1 +1 @@
1.0.3
2.0.0
2 changes: 1 addition & 1 deletion active_fulfillment.gemspec
Expand Up @@ -5,7 +5,7 @@

Gem::Specification.new do |s|
s.name = %q{active_fulfillment}
s.version = "1.0.3"
s.version = "2.0.0"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Cody Fauser", "James MacAulay"]
Expand Down
2 changes: 1 addition & 1 deletion lib/active_fulfillment/fulfillment/services/amazon.rb
Expand Up @@ -342,7 +342,7 @@ def parse_tracking_response(document)
track_node = REXML::XPath.first(document, '//ns1:FulfillmentShipmentPackage/ns1:TrackingNumber')
if track_node
id_node = REXML::XPath.first(document, '//ns1:MerchantFulfillmentOrderId')
response[:tracking_numbers][id_node.text] = track_node.text
response[:tracking_numbers][id_node.text] = [track_node.text]
end

response[:response_status] = SUCCESS
Expand Down
8 changes: 4 additions & 4 deletions lib/active_fulfillment/fulfillment/services/amazon_mws.rb
Expand Up @@ -228,10 +228,10 @@ def parse_tracking_response(document)
response = {}
response[:tracking_numbers] = {}

tracking_node = REXML::XPath.first(document, "//FulfillmentShipmentPackage/member/TrackingNumber")
if tracking_node
id_node = REXML::XPath.first(document, "//FulfillmentOrder/SellerFulfillmentOrderId")
response[:tracking_numbers][id_node.text.strip] = tracking_node.text.strip
tracking_numbers = REXML::XPath.match(document, "//FulfillmentShipmentPackage/member/TrackingNumber")
if tracking_numbers.present?
order_id = REXML::XPath.first(document, "//FulfillmentOrder/SellerFulfillmentOrderId").text.strip
response[:tracking_numbers][order_id] = tracking_numbers.map{ |t| t.text.strip }
end

response[:response_status] = SUCCESS
Expand Down
2 changes: 1 addition & 1 deletion lib/active_fulfillment/fulfillment/services/shipwire.rb
Expand Up @@ -234,7 +234,7 @@ def parse_tracking_response(xml)
if node.name == 'Order'
if node.attributes["shipped"] == "YES" && node.elements['TrackingNumber']
tracking_number = node.elements['TrackingNumber'].text
response[:tracking_numbers][node.attributes['id']] = tracking_number
response[:tracking_numbers][node.attributes['id']] = [tracking_number]
end
else
response[node.name.underscore.to_sym] = node.text
Expand Down
2 changes: 1 addition & 1 deletion lib/active_fulfillment/fulfillment/services/webgistix.rb
Expand Up @@ -301,7 +301,7 @@ def parse_tracking_response(document)
params = node.elements.to_a.each_with_object({}) {|elem, hash| hash[elem.name] = elem.text}

tracking = params['ShipmentTrackingNumber']
response[:tracking_numbers][params['InvoiceNumber']] = tracking unless tracking == NOT_SHIPPED
response[:tracking_numbers][params['InvoiceNumber']] = [tracking] unless tracking == NOT_SHIPPED
end

response
Expand Down
@@ -0,0 +1,121 @@
<?xml version="1.0"?>
<GetFulfillmentOrderResponse
xmlns="http://mws.amazonaws.com/FulfillmentOutboundShipment/2010-10-01/">
<GetFulfillmentOrderResult>
<FulfillmentOrderItem>
<member>
<SellerSKU>ssof_dev_drt_afn_item</SellerSKU>
<GiftMessage>test_giftwrap_message</GiftMessage>
<SellerFulfillmentOrderItemId>test_merchant_order_item_id_2
</SellerFulfillmentOrderItemId>
<EstimatedShipDateTime>2008-03-08T07:07:53Z
</EstimatedShipDateTime>
<DisplayableComment>test_displayable_comment</DisplayableComment>
<OrderItemDisposition>Sellable</OrderItemDisposition>
<UnfulfillableQuantity>0</UnfulfillableQuantity>
<CancelledQuantity>1</CancelledQuantity>
<Quantity>5</Quantity>
<EstimatedArrivalDateTime>2008-03-08T08:07:53Z
</EstimatedArrivalDateTime>
</member>
<member>
<SellerSKU>ssof_dev_drt_keep_this_afn_always</SellerSKU>
<GiftMessage>test_giftwrap_message</GiftMessage>
<SellerFulfillmentOrderItemId>test_merchant_order_item_id_1
</SellerFulfillmentOrderItemId>
<EstimatedShipDateTime>2008-03-09T07:07:53Z
</EstimatedShipDateTime>
<DisplayableComment>test_displayable_comment
</DisplayableComment>
<OrderItemDisposition>Sellable</OrderItemDisposition>
<UnfulfillableQuantity>2</UnfulfillableQuantity>
<CancelledQuantity>1</CancelledQuantity>
<Quantity>5</Quantity>
<EstimatedArrivalDateTime>2008-03-09T08:07:53Z
</EstimatedArrivalDateTime>
</member>
</FulfillmentOrderItem>
<FulfillmentOrder>
<ShippingSpeedCategory>Standard</ShippingSpeedCategory>
<NotificationEmailList>
<member>o8c2EXAMPLsfr7o@marketplace.amazon.com</member>
</NotificationEmailList>
<StatusUpdatedDateTime>2006-09-28T23:48:48Z
</StatusUpdatedDateTime>
<SellerFulfillmentOrderId>extern_id_1154539615776
</SellerFulfillmentOrderId>
<DestinationAddress>
<PostalCode>98101</PostalCode>
<PhoneNumber>206-555-1928</PhoneNumber>
<Name>Greg Miller</Name>
<CountryCode>US</CountryCode>
<Line1>123 Some St.</Line1>
<StateOrProvinceCode>WA</StateOrProvinceCode>
<City>Seattle</City>
<Line2>Apt. 321</Line2>
</DestinationAddress>
<FulfillmentMethod>Consumer</FulfillmentMethod>
<DisplayableOrderDateTime>2006-08-02T17:26:56Z
</DisplayableOrderDateTime>
<FulfillmentPolicy>FillOrKill</FulfillmentPolicy>
<ReceivedDateTime>2006-08-02T17:26:56Z</ReceivedDateTime>
<DisplayableOrderId>test_displayable_id</DisplayableOrderId>
<DisplayableOrderComment>Sample comment.
</DisplayableOrderComment>
<FulfillmentOrderStatus>PROCESSING</FulfillmentOrderStatus>
</FulfillmentOrder>
<FulfillmentShipment>
<member>
<FulfillmentShipmentStatus>SHIPPED</FulfillmentShipmentStatus>
<FulfillmentShipmentItem>
<member>
<SellerSKU>ssof_dev_drt_afn_item</SellerSKU>
<SellerFulfillmentOrderItemId>test_merchant_order_item_id_2
</SellerFulfillmentOrderItemId>
<Quantity>2</Quantity>
<PackageNumber>0</PackageNumber>
</member>
</FulfillmentShipmentItem>
<AmazonShipmentId>DnMDLWJWN</AmazonShipmentId>
<ShippingDateTime>2006-08-04T07:00:00Z</ShippingDateTime>
<FulfillmentShipmentPackage>
<member>
<TrackingNumber>93YY00</TrackingNumber>
<CarrierCode>UPS</CarrierCode>
<PackageNumber>1</PackageNumber>
</member>
</FulfillmentShipmentPackage>
<FulfillmentCenterId>RNO1</FulfillmentCenterId>
<EstimatedArrivalDateTime>2006-08-12T07:00:00Z
</EstimatedArrivalDateTime>
</member>
<member>
<FulfillmentShipmentStatus>SHIPPED</FulfillmentShipmentStatus>
<FulfillmentShipmentItem>
<member>
<SellerSKU>ssof_dev_drt_afn_item</SellerSKU>
<SellerFulfillmentOrderItemId>test_merchant_order_item_id_2
</SellerFulfillmentOrderItemId>
<Quantity>1</Quantity>
<PackageNumber>1</PackageNumber>
</member>
</FulfillmentShipmentItem>
<AmazonShipmentId>DKMKLXJmN</AmazonShipmentId>
<ShippingDateTime>2006-08-03T07:00:00Z</ShippingDateTime>
<FulfillmentShipmentPackage>
<member>
<TrackingNumber>93ZZ00</TrackingNumber>
<CarrierCode>UPS</CarrierCode>
<PackageNumber>1</PackageNumber>
</member>
</FulfillmentShipmentPackage>
<FulfillmentCenterId>TST1</FulfillmentCenterId>
<EstimatedArrivalDateTime>2006-08-12T07:00:00Z
</EstimatedArrivalDateTime>
</member>
</FulfillmentShipment>
</GetFulfillmentOrderResult>
<ResponseMetadata>
<RequestId>5e5e5694-8e76-11df-929f-87c80302f8f6</RequestId>
</ResponseMetadata>
</GetFulfillmentOrderResponse>
4 changes: 2 additions & 2 deletions test/remote/webgistix_test.rb
Expand Up @@ -79,8 +79,8 @@ def test_fetch_tracking_numbers
'1254658', 'FAItest123', 'Flat Rate Test Order 4'
])
assert response.success?
assert_equal '4209073191018052136352154', response.tracking_numbers['1254658']
assert_equal '9101805213907472080032', response.tracking_numbers['Flat Rate Test Order 4']
assert_equal ['4209073191018052136352154'], response.tracking_numbers['1254658']
assert_equal ['9101805213907472080032'], response.tracking_numbers['Flat Rate Test Order 4']
assert_nil response.tracking_numbers['FAItest123'] # 'Not Shipped'
end

Expand Down
13 changes: 11 additions & 2 deletions test/unit/services/amazon_mws_test.rb
Expand Up @@ -217,10 +217,19 @@ def test_fetch_tracking_numbers

response = @service.fetch_tracking_numbers(['extern_id_1154539615776', 'extern_id_1154539615777'])
assert response.success?
assert_equal '93ZZ00', response.tracking_numbers['extern_id_1154539615776']
assert_equal %w{93ZZ00}, response.tracking_numbers['extern_id_1154539615776']
assert_nil response.tracking_numbers['extern_id_1154539615777']
end


def test_fetch_multiple_tracking_numbers
@service.expects(:ssl_post).returns(xml_fixture('amazon_mws/fulfillment_get_fullfillment_order_with_multiple_tracking_numbers'))

response = @service.fetch_tracking_numbers(['extern_id_1154539615776'])
assert response.success?
assert_equal %w{93YY00 93ZZ00}, response.tracking_numbers['extern_id_1154539615776']
end

def test_that_generated_requests_do_not_double_escape_spaces
fulfillment_request = @service.send(:build_fulfillment_request, "12345", @address, @line_items, @options)
result = @service.build_full_query(:post, URI.parse("http://example.com/someservice/2011"), fulfillment_request)
Expand All @@ -241,7 +250,7 @@ def test_fetch_tracking_numbers_ignores_not_found

response = @service.fetch_tracking_numbers(['extern_id_1154539615776', 'dafdfafsdafdafasdfa', 'extern_id_1154539615777'])
assert response.success?
assert_equal '93ZZ00', response.tracking_numbers['extern_id_1154539615776']
assert_equal %w{93ZZ00}, response.tracking_numbers['extern_id_1154539615776']
end

def test_fetch_tracking_numbers_aborts_on_error
Expand Down
4 changes: 2 additions & 2 deletions test/unit/services/amazon_test.rb
Expand Up @@ -98,7 +98,7 @@ def test_fetch_tracking_numbers

response = @service.fetch_tracking_numbers(['TEST-00000001', 'TEST-00000002'])
assert response.success?
assert_equal 'UPS00000001', response.tracking_numbers['TEST-00000001']
assert_equal %w{UPS00000001}, response.tracking_numbers['TEST-00000001']
assert_nil response.tracking_numbers['TEST-00000002']
end

Expand All @@ -115,7 +115,7 @@ def test_fetch_tracking_numbers_ignores_not_found

response = @service.fetch_tracking_numbers(['TEST-00000001', '#1337-1', 'TEST-00000002'])
assert response.success?
assert_equal 'UPS00000001', response.tracking_numbers['TEST-00000001']
assert_equal %w{UPS00000001}, response.tracking_numbers['TEST-00000001']
end

def test_fetch_tracking_numbers_aborts_on_error
Expand Down
4 changes: 2 additions & 2 deletions test/unit/services/shipwire_test.rb
Expand Up @@ -105,8 +105,8 @@ def test_no_tracking_numbers_available
end

def test_successful_tracking
expected = { "2986" => "1ZW682E90326614239",
"2987" => "1ZW682E90326795080" }
expected = { "2986" => ["1ZW682E90326614239"],
"2987" => ["1ZW682E90326795080"] }

@shipwire.expects(:ssl_post).returns(successful_tracking_response)
response = @shipwire.fetch_tracking_numbers(["2986", "2987"])
Expand Down
2 changes: 1 addition & 1 deletion test/unit/services/webgistix_test.rb
Expand Up @@ -106,7 +106,7 @@ def test_tracking_numbers
response = @service.fetch_tracking_numbers(['AB12345', 'XY4567'])
assert response.success?
assert_equal WebgistixService::SUCCESS_MESSAGE, response.message
assert_equal '1Z8E5A380396682872', response.tracking_numbers['AB12345']
assert_equal ['1Z8E5A380396682872'], response.tracking_numbers['AB12345']
assert_nil response.tracking_numbers['XY4567']
end

Expand Down