mws-orders 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +73 -0
- data/lib/mws/orders/client.rb +88 -0
- data/lib/mws/orders/helpers/parameters.rb +53 -0
- data/lib/mws/orders/helpers/structured_list.rb +40 -0
- data/lib/mws/orders/parsers/base.rb +27 -0
- data/lib/mws/orders/parsers/collection.rb +22 -0
- data/lib/mws/orders/parsers/invoice_data.rb +23 -0
- data/lib/mws/orders/parsers/model.rb +38 -0
- data/lib/mws/orders/parsers/order.rb +108 -0
- data/lib/mws/orders/parsers/order_item.rb +107 -0
- data/lib/mws/orders/parsers/order_items.rb +17 -0
- data/lib/mws/orders/parsers/orders.rb +17 -0
- data/lib/mws/orders/parsers/payment_execution_detail.rb +17 -0
- data/lib/mws/orders/parsers/payment_execution_detail_item.rb +15 -0
- data/lib/mws/orders/parsers/service_status.rb +32 -0
- data/lib/mws/orders/parsers/service_status_message.rb +15 -0
- data/lib/mws/orders/parsers/shipping_address.rb +35 -0
- data/lib/mws/orders/requests/base.rb +55 -0
- data/lib/mws/orders/requests/order_items.rb +23 -0
- data/lib/mws/orders/requests/orders.rb +36 -0
- data/lib/mws/orders/requests/service_status.rb +18 -0
- data/lib/mws/orders/version.rb +5 -0
- data/lib/mws-orders.rb +29 -0
- data/test/fixtures/mws.yml +12 -0
- data/test/fixtures/mws.yml.example +4 -0
- data/test/fixtures/order_items.xml +83 -0
- data/test/fixtures/orders.xml +109 -0
- data/test/fixtures/service_status.xml +19 -0
- data/test/helpers/parameters_test.rb +34 -0
- data/test/helpers/structured_list_test.rb +17 -0
- data/test/integration/order_items_test.rb +16 -0
- data/test/integration/orders_test.rb +17 -0
- data/test/integration/service_status_test.rb +9 -0
- data/test/integration/test_helper.rb +12 -0
- data/test/parsers/collection_test.rb +7 -0
- data/test/parsers/model_test.rb +27 -0
- data/test/parsers/order_item_test.rb +68 -0
- data/test/parsers/order_items_test.rb +13 -0
- data/test/parsers/order_test.rb +80 -0
- data/test/parsers/orders_test.rb +13 -0
- data/test/parsers/payment_execution_detail_item_test.rb +16 -0
- data/test/parsers/payment_execution_detail_test.rb +13 -0
- data/test/parsers/service_status_message_test.rb +16 -0
- data/test/parsers/service_status_test.rb +38 -0
- data/test/parsers/shipping_address_test.rb +35 -0
- data/test/parsers/test_helper.rb +10 -0
- data/test/requests/order_items_test.rb +36 -0
- data/test/requests/orders_test.rb +46 -0
- data/test/requests/service_status_test.rb +22 -0
- data/test/requests/test_helper.rb +18 -0
- data/test/test_helper.rb +7 -0
- metadata +221 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class ServiceStatus < Model
|
5
|
+
value :status do
|
6
|
+
text_at_xpath('Status')
|
7
|
+
end
|
8
|
+
|
9
|
+
value :timestamp do
|
10
|
+
time_at_xpath('Timestamp')
|
11
|
+
end
|
12
|
+
|
13
|
+
value :message_id do
|
14
|
+
text_at_xpath('MessageId')
|
15
|
+
end
|
16
|
+
|
17
|
+
value :messages do
|
18
|
+
xpath('Messages/Message').map { |node| ServiceStatusMessage.new(node) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def ok?
|
22
|
+
status == 'GREEN'
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
status
|
27
|
+
end
|
28
|
+
alias :to_s :inspect
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class ShippingAddress < Model
|
5
|
+
value :name do
|
6
|
+
text_at_xpath('Name')
|
7
|
+
end
|
8
|
+
|
9
|
+
value :address_lines do
|
10
|
+
1.upto(3).map { |i| text_at_xpath("AddressLine#{i}") }.compact
|
11
|
+
end
|
12
|
+
|
13
|
+
value :city do
|
14
|
+
text_at_xpath('City')
|
15
|
+
end
|
16
|
+
|
17
|
+
value :state_or_region do
|
18
|
+
text_at_xpath('StateOrRegion')
|
19
|
+
end
|
20
|
+
|
21
|
+
value :postal_code do
|
22
|
+
text_at_xpath('PostalCode')
|
23
|
+
end
|
24
|
+
|
25
|
+
value :country_code do
|
26
|
+
text_at_xpath('CountryCode')
|
27
|
+
end
|
28
|
+
|
29
|
+
value :phone do
|
30
|
+
text_at_xpath('Phone')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Request
|
4
|
+
class Base
|
5
|
+
attr :client
|
6
|
+
attr_accessor :last_response
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def next_token
|
13
|
+
node = document.at_xpath('//xmlns:NextToken')
|
14
|
+
node.text if node
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def execute
|
20
|
+
fetch
|
21
|
+
parse
|
22
|
+
end
|
23
|
+
|
24
|
+
def fetch
|
25
|
+
@last_response = client.post(query: parameters)
|
26
|
+
end
|
27
|
+
|
28
|
+
def parameters(action = nil)
|
29
|
+
@parameters = Helper::Parameters.new(action) if action
|
30
|
+
@parameters
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse
|
34
|
+
parser.new(node)
|
35
|
+
end
|
36
|
+
|
37
|
+
def parser
|
38
|
+
Parser.const_get(name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def node
|
42
|
+
document.xpath("//xmlns:#{name}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def document
|
46
|
+
Nokogiri::XML(last_response.body)
|
47
|
+
end
|
48
|
+
|
49
|
+
def name
|
50
|
+
self.class.name.split('::').last
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Request
|
4
|
+
class OrderItems < Base
|
5
|
+
def list(amazon_order_id)
|
6
|
+
parameters(:list_order_items)
|
7
|
+
.update(amazon_order_id: amazon_order_id)
|
8
|
+
.camelize_keys!
|
9
|
+
|
10
|
+
execute
|
11
|
+
end
|
12
|
+
|
13
|
+
def list_by_next_token
|
14
|
+
parameters(:list_order_items_by_next_token)
|
15
|
+
.update(next_token: next_token)
|
16
|
+
.camelize_keys!
|
17
|
+
|
18
|
+
execute
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Request
|
4
|
+
class Orders < Base
|
5
|
+
def get(*amazon_order_ids)
|
6
|
+
parameters(:get_order)
|
7
|
+
.update(amazon_order_id: amazon_order_ids)
|
8
|
+
.format_structured_lists!
|
9
|
+
.camelize_keys!
|
10
|
+
|
11
|
+
execute
|
12
|
+
end
|
13
|
+
|
14
|
+
def list(options)
|
15
|
+
options[:marketplace_id] ||= client.home_marketplace_id
|
16
|
+
|
17
|
+
parameters(:list_orders)
|
18
|
+
.update(options)
|
19
|
+
.timestamp!
|
20
|
+
.format_structured_lists!
|
21
|
+
.camelize_keys!
|
22
|
+
|
23
|
+
execute
|
24
|
+
end
|
25
|
+
|
26
|
+
def list_by_next_token
|
27
|
+
parameters(:list_orders_by_next_token)
|
28
|
+
.update(next_token: next_token)
|
29
|
+
.camelize_keys!
|
30
|
+
|
31
|
+
execute
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Request
|
4
|
+
class ServiceStatus < Base
|
5
|
+
def get
|
6
|
+
parameters(:get_service_status)
|
7
|
+
execute
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def node
|
13
|
+
document.xpath("//xmlns:GetServiceStatusResult")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/mws-orders.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'delegate'
|
3
|
+
require 'forwardable'
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
require 'money'
|
7
|
+
require 'nokogiri'
|
8
|
+
require 'peddler'
|
9
|
+
require 'structure'
|
10
|
+
|
11
|
+
require 'mws/orders/client'
|
12
|
+
require 'mws/orders/helpers/structured_list'
|
13
|
+
require 'mws/orders/helpers/parameters'
|
14
|
+
require 'mws/orders/requests/base'
|
15
|
+
require 'mws/orders/requests/orders'
|
16
|
+
require 'mws/orders/requests/order_items'
|
17
|
+
require 'mws/orders/requests/service_status'
|
18
|
+
require 'mws/orders/parsers/base'
|
19
|
+
require 'mws/orders/parsers/model'
|
20
|
+
require 'mws/orders/parsers/collection'
|
21
|
+
require 'mws/orders/parsers/orders'
|
22
|
+
require 'mws/orders/parsers/order'
|
23
|
+
require 'mws/orders/parsers/shipping_address'
|
24
|
+
require 'mws/orders/parsers/payment_execution_detail'
|
25
|
+
require 'mws/orders/parsers/payment_execution_detail_item'
|
26
|
+
require 'mws/orders/parsers/order_items'
|
27
|
+
require 'mws/orders/parsers/order_item'
|
28
|
+
require 'mws/orders/parsers/service_status'
|
29
|
+
require 'mws/orders/parsers/service_status_message'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- country: US
|
2
|
+
aws_access_key_id: AKIAJOD3NLXHOMANRNQQ
|
3
|
+
aws_secret_access_key: 2Dz5NEblAw0YJ7AMFrt3M+GIwYH9hrz+p3j1FOcV
|
4
|
+
seller_id: A2JYSO6W6KEP83
|
5
|
+
- country: GB
|
6
|
+
aws_access_key_id: AKIAJJDQ2MJTMPXKJE4A
|
7
|
+
aws_secret_access_key: BhGTh8zXIEuMjKlRJIrX+cXYqWFFYmzcGXscGblS
|
8
|
+
seller_id: A2D9DZ30GEWP6N
|
9
|
+
- country: JP
|
10
|
+
aws_access_key_id: AKIAJ5RDDSRROM6GXQ5Q
|
11
|
+
aws_secret_access_key: WGPMtwkUvlRXg22byoI+ceXyhnDQOMozUoFmsHzW
|
12
|
+
seller_id: A7BU5WGNVGQ1I
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ListOrderItemsResponse xmlns="https://mws.amazonservices.com
|
3
|
+
/Orders/2011-01-01">
|
4
|
+
<ListOrderItemsResult>
|
5
|
+
<NextToken>MRgZW55IGNhcm5hbCBwbGVhc3VyZS6=</NextToken>
|
6
|
+
<AmazonOrderId>058-1233752-8214740</AmazonOrderId>
|
7
|
+
<OrderItems>
|
8
|
+
<OrderItem>
|
9
|
+
<ASIN>BT0093TELA</ASIN>
|
10
|
+
<OrderItemId>68828574383266</OrderItemId>
|
11
|
+
<SellerSKU>CBA_OTF_1</SellerSKU>
|
12
|
+
<Title>Example item name</Title>
|
13
|
+
<QuantityOrdered>1</QuantityOrdered>
|
14
|
+
<QuantityShipped>1</QuantityShipped>
|
15
|
+
<PromotionIds>
|
16
|
+
<PromotionId>SSOF SSS-25</PromotionId>
|
17
|
+
</PromotionIds>
|
18
|
+
<ItemPrice>
|
19
|
+
<CurrencyCode>USD</CurrencyCode>
|
20
|
+
<Amount>25.99</Amount>
|
21
|
+
</ItemPrice>
|
22
|
+
<ItemTax>
|
23
|
+
<CurrencyCode>USD</CurrencyCode>
|
24
|
+
<Amount>0.00</Amount>
|
25
|
+
</ItemTax>
|
26
|
+
<ShippingPrice>
|
27
|
+
<CurrencyCode>USD</CurrencyCode>
|
28
|
+
<Amount>1.26</Amount>
|
29
|
+
</ShippingPrice>
|
30
|
+
<ShippingTax>
|
31
|
+
<CurrencyCode>USD</CurrencyCode>
|
32
|
+
<Amount>0.00</Amount>
|
33
|
+
</ShippingTax>
|
34
|
+
<PromotionDiscount>
|
35
|
+
<CurrencyCode>USD</CurrencyCode>
|
36
|
+
<Amount>0.00</Amount>
|
37
|
+
</PromotionDiscount>
|
38
|
+
<ShippingDiscount>
|
39
|
+
<CurrencyCode>USD</CurrencyCode>
|
40
|
+
<Amount>0.00</Amount>
|
41
|
+
</ShippingDiscount>
|
42
|
+
<ScheduledDeliveryEndDate>2013-01-01T01:30:00.000-06:00
|
43
|
+
</ScheduledDeliveryEndDate>
|
44
|
+
<ScheduledDeliveryStartDate>2012-12-31T02:00:00.000-06:00
|
45
|
+
</ScheduledDeliveryStartDate>
|
46
|
+
<CODFee>
|
47
|
+
<CurrencyCode>USD</CurrencyCode>
|
48
|
+
<Amount>10.00</Amount>
|
49
|
+
</CODFee>
|
50
|
+
<CODFeeDiscount>
|
51
|
+
<CurrencyCode>USD</CurrencyCode>
|
52
|
+
<Amount>1.00</Amount>
|
53
|
+
</CODFeeDiscount>
|
54
|
+
<GiftMessageText>For you!</GiftMessageText>
|
55
|
+
<GiftWrapPrice>
|
56
|
+
<CurrencyCode>USD</CurrencyCode>
|
57
|
+
<Amount>1.99</Amount>
|
58
|
+
</GiftWrapPrice>
|
59
|
+
<GiftWrapLevel>Classic</GiftWrapLevel>
|
60
|
+
</OrderItem>
|
61
|
+
<OrderItem>
|
62
|
+
<ASIN>BCTU1104UEFB</ASIN>
|
63
|
+
<OrderItemId>79039765272157</OrderItemId>
|
64
|
+
<SellerSKU>CBA_OTF_5</SellerSKU>
|
65
|
+
<Title>Example item name</Title>
|
66
|
+
<QuantityOrdered>2</QuantityOrdered>
|
67
|
+
<ItemPrice>
|
68
|
+
<CurrencyCode>USD</CurrencyCode>
|
69
|
+
<Amount>17.95</Amount>
|
70
|
+
</ItemPrice>
|
71
|
+
<PromotionIds>
|
72
|
+
<PromotionId>FREESHIP</PromotionId>
|
73
|
+
</PromotionIds>
|
74
|
+
<ConditionId>Used</ConditionID>
|
75
|
+
<ConditionSubtypeId>Mint</ConditionSubtypeId>
|
76
|
+
<ConditionNote>Example ConditionNote</ConditionNote>
|
77
|
+
</OrderItem>
|
78
|
+
</OrderItems>
|
79
|
+
</ListOrderItemsResult>
|
80
|
+
<ResponseMetadata>
|
81
|
+
<RequestId>88faca76-b600-46d2-b53c-0c8c4533e43a</RequestId>
|
82
|
+
</ResponseMetadata>
|
83
|
+
</ListOrderItemsResponse>
|
@@ -0,0 +1,109 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2011-01-01">
|
3
|
+
<ListOrdersResult>
|
4
|
+
<NextToken>2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</NextToken>
|
5
|
+
<LastUpdatedBefore>2010-10-05T18%3A12%3A20.687Z</LastUpdatedBefore>
|
6
|
+
<Orders>
|
7
|
+
<Order>
|
8
|
+
<AmazonOrderId>058-1233752-8214740</AmazonOrderId>
|
9
|
+
<PurchaseDate>2010-10-05T00%3A06%3A07.000Z</PurchaseDate>
|
10
|
+
<LastUpdateDate>2010-10-05T12%3A43%3A16.000Z</LastUpdateDate>
|
11
|
+
<OrderStatus>Unshipped</OrderStatus>
|
12
|
+
<OrderType>StandardOrder</OrderType>
|
13
|
+
<SalesChannel>Checkout by Amazon</SalesChannel>
|
14
|
+
<ShipServiceLevel>Std DE Dom</ShipServiceLevel>
|
15
|
+
<FulfillmentChannel>MFN</FulfillmentChannel>
|
16
|
+
<OrderTotal>
|
17
|
+
<CurrencyCode>USD</CurrencyCode>
|
18
|
+
<Amount>111.01</Amount>
|
19
|
+
</OrderTotal>
|
20
|
+
<ShippingAddress>
|
21
|
+
<Name>John Smith</Name>
|
22
|
+
<AddressLine1>2700 First Avenue</AddressLine1>
|
23
|
+
<City>Seattle</City>
|
24
|
+
<StateOrRegion>WA</StateOrRegion>
|
25
|
+
<PostalCode>98102</PostalCode>
|
26
|
+
<CountryCode>US</CountryCode>
|
27
|
+
</ShippingAddress>
|
28
|
+
<NumberOfItemsShipped>0</NumberOfItemsShipped>
|
29
|
+
<NumberOfItemsUnshipped>1</NumberOfItemsUnshipped>
|
30
|
+
<PaymentExecutionDetail>
|
31
|
+
<PaymentExecutionDetailItem>
|
32
|
+
<Payment>
|
33
|
+
<CurrencyCode>USD</CurrencyCode>
|
34
|
+
<Amount>101.01</Amount>
|
35
|
+
</Payment>
|
36
|
+
<PaymentMethod>COD</PaymentMethod>
|
37
|
+
</PaymentExecutionDetailItem>
|
38
|
+
<PaymentExecutionDetailItem>
|
39
|
+
<Payment>
|
40
|
+
<CurrencyCode>USD</CurrencyCode>
|
41
|
+
<Amount>10.00</Amount>
|
42
|
+
</Payment>
|
43
|
+
<PaymentMethod>GC</PaymentMethod>
|
44
|
+
</PaymentExecutionDetailItem>
|
45
|
+
</PaymentExecutionDetail>
|
46
|
+
<PaymentMethod>COD</PaymentMethod>
|
47
|
+
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
|
48
|
+
<BuyerName>Amazon User</BuyerName>
|
49
|
+
<BuyerEmail>5vlh04mgfmjh9h5@marketplace.amazon.com</BuyerEmail>
|
50
|
+
<ShipmentServiceLevelCategory>Standard
|
51
|
+
</ShipmentServiceLevelCategory>
|
52
|
+
</Order>
|
53
|
+
<Order>
|
54
|
+
<ShipmentServiceLevelCategory>Standard
|
55
|
+
</ShipmentServiceLevelCategory>
|
56
|
+
<OrderTotal>
|
57
|
+
<Amount>10.87</Amount>
|
58
|
+
<CurrencyCode>USD</CurrencyCode>
|
59
|
+
</OrderTotal>
|
60
|
+
<FulfillmentChannel>MFN</FulfillmentChannel>
|
61
|
+
<BuyerEmail>1x3v628skdi34u2@marketplace.amazon.com</BuyerEmail>
|
62
|
+
<OrderStatus>Pending</OrderStatus>
|
63
|
+
<BuyerName>Example Name</BuyerName>
|
64
|
+
<ShipServiceLevel>Std US Dom</ShipServiceLevel>
|
65
|
+
<CbaDisplayableShippingLabel>Example shipment service level
|
66
|
+
</CbaDisplayableShippingLabel>
|
67
|
+
<LastUpdateDate>2012-10-11T15:53:37Z</LastUpdateDate>
|
68
|
+
<PurchaseDate>2012-10-11T14:15:55Z</PurchaseDate>
|
69
|
+
<EarliestShipDate>2012-10-13T05:00:00Z</EarliestShipDate>
|
70
|
+
<LatestShipDate>2012-10-15T07:59:59Z</LatestShipDate>
|
71
|
+
<OrderType>Preorder</OrderType>
|
72
|
+
<NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
|
73
|
+
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
|
74
|
+
<SalesChannel>Amazon.com</SalesChannel>
|
75
|
+
<ShippingAddress>
|
76
|
+
<Phone>111 222 1234</Phone>
|
77
|
+
<PostalCode>48823</PostalCode>
|
78
|
+
<Name>Example Name</Name>
|
79
|
+
<CountryCode>US</CountryCode>
|
80
|
+
<StateOrRegion>WA</StateOrRegion>
|
81
|
+
<AddressLine1>1234 Ridge Rd</AddressLine1>
|
82
|
+
<City>Seattle</City>
|
83
|
+
</ShippingAddress>
|
84
|
+
<NumberOfItemsShipped>1</NumberOfItemsShipped>
|
85
|
+
<AmazonOrderId>123-1234567-4567890</AmazonOrderId>
|
86
|
+
<PaymentMethod>Other</PaymentMethod>
|
87
|
+
</Order>
|
88
|
+
<Order>
|
89
|
+
<ShipmentServiceLevelCategory>Standard
|
90
|
+
</ShipmentServiceLevelCategory>
|
91
|
+
<FulfillmentChannel>MFN</FulfillmentChannel>
|
92
|
+
<OrderStatus>Pending</OrderStatus>
|
93
|
+
<OrderType>StandardOrder</OrderType>
|
94
|
+
<ShipServiceLevel>Std US Dom</ShipServiceLevel>
|
95
|
+
<LastUpdateDate>2012-10-12T20:34:00Z</LastUpdateDate>
|
96
|
+
<PurchaseDate>2012-10-12T20:33:16Z</PurchaseDate>
|
97
|
+
<NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
|
98
|
+
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
|
99
|
+
<SalesChannel>Amazon.com</SalesChannel>
|
100
|
+
<NumberOfItemsShipped>0</NumberOfItemsShipped>
|
101
|
+
<AmazonOrderId>123-9876543-6543212</AmazonOrderId>
|
102
|
+
<PaymentMethod>Other</PaymentMethod>
|
103
|
+
</Order>
|
104
|
+
</Orders>
|
105
|
+
</ListOrdersResult>
|
106
|
+
<ResponseMetadata>
|
107
|
+
<RequestId>88faca76-b600-46d2-b53c-0c8c4533e43a</RequestId>
|
108
|
+
</ResponseMetadata>
|
109
|
+
</ListOrdersResponse>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<GetServiceStatusResponse
|
3
|
+
xmlns="https://mws.amazonservices.com/Orders/2011-01-01">
|
4
|
+
<GetServiceStatusResult>
|
5
|
+
<Status>GREEN_I</Status>
|
6
|
+
<Timestamp>2010-09-24T21:38:09.676Z</Timestamp>
|
7
|
+
<MessageId>173964729I</MessageId>
|
8
|
+
<Messages>
|
9
|
+
<Message>
|
10
|
+
<Locale>en_US</Locale>
|
11
|
+
<Text>We are experiencing high latency in UK because of heavy
|
12
|
+
traffic.</Text>
|
13
|
+
</Message>
|
14
|
+
</Messages>
|
15
|
+
</GetServiceStatusResult>
|
16
|
+
<ResponseMetadata>
|
17
|
+
<RequestId>d80c6c7b-f7c7-4fa7-bdd7-854711cb3bcc</RequestId>
|
18
|
+
</ResponseMetadata>
|
19
|
+
</GetServiceStatusResponse>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class ParametersHelperTest < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
@parameters = Helper::Parameters.new(:do_it)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_has_an_action_key
|
9
|
+
assert_equal 'DoIt', @parameters.fetch('Action')
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_formats_timestamps
|
13
|
+
ts = Minitest::Mock.new
|
14
|
+
ts.expect(:iso8601, 'formatted')
|
15
|
+
@parameters.store('a timestamp', ts)
|
16
|
+
assert_equal 'formatted', @parameters.timestamp!.fetch('a timestamp')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_formats_structured_lists
|
20
|
+
@parameters.store(:order_status, 'foo')
|
21
|
+
assert_equal 'foo', @parameters.format_structured_lists!.fetch('OrderStatus.Status.1')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_camelizes_keys
|
25
|
+
@parameters.store(:underscored_key, 'baz')
|
26
|
+
refute @parameters.camelize_keys!.has_key?(:underscored_key)
|
27
|
+
assert @parameters.has_key?('UnderscoredKey')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_updates_delegated_hash
|
31
|
+
assert_kind_of Helper::Parameters, @parameters.update(key: 'value')
|
32
|
+
assert_equal 'value', @parameters.fetch(:key)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class StructuredListHelperTest < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
@structured_list = Helper::StructuredList.new(:order_status)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_builds_a_structured_list_for_a_single_value
|
9
|
+
exp = { 'OrderStatus.Status.1' => 'foo' }
|
10
|
+
assert_equal(exp, @structured_list.build('foo'))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_builds_a_structured_list_for_an_array_of_values
|
14
|
+
exp = { 'OrderStatus.Status.1' => 'foo', 'OrderStatus.Status.2' => 'bar' }
|
15
|
+
assert_equal(exp, @structured_list.build(%w(foo bar)))
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class OrderItemsTest < IntegrationTest
|
4
|
+
def sample_amazon_order_id(client)
|
5
|
+
order = client.list_orders(created_after: Date.today - 365).to_a.sample
|
6
|
+
order.amazon_order_id
|
7
|
+
end
|
8
|
+
|
9
|
+
def list_order_items
|
10
|
+
@clients.each do |client|
|
11
|
+
amazon_order_id = sample_amazon_order_id(client)
|
12
|
+
order_items = client.list_order_items(amazon_order_id)
|
13
|
+
refute_empty order_items
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class OrdersTest < IntegrationTest
|
4
|
+
def test_lists_and_gets_orders
|
5
|
+
@clients.each do |client|
|
6
|
+
amazon_order_ids = []
|
7
|
+
orders = client.list_orders(created_after: Date.today - 365)
|
8
|
+
amazon_order_ids << orders.to_a.sample.amazon_order_id
|
9
|
+
|
10
|
+
orders = client.list_orders_by_next_token
|
11
|
+
amazon_order_ids << orders.to_a.sample.amazon_order_id
|
12
|
+
|
13
|
+
orders = client.get_order(*amazon_order_ids)
|
14
|
+
assert orders
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
class IntegrationTest < MiniTest::Test
|
5
|
+
def accounts
|
6
|
+
YAML.load_file(File.expand_path('../../fixtures/mws.yml', __FILE__))
|
7
|
+
end
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@clients = accounts.map { |mws| Client.new(*mws.values) }
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class ModelParserTest < ParserTest
|
4
|
+
def test_parses_money
|
5
|
+
xml = <<-EOF
|
6
|
+
<Price xmlns="example">
|
7
|
+
<CurrencyCode>USD</CurrencyCode>
|
8
|
+
<Amount>10.00</Amount>
|
9
|
+
</Price>
|
10
|
+
EOF
|
11
|
+
model = Parser::Model.new(Nokogiri(xml))
|
12
|
+
money = model.money_at_xpath('Price')
|
13
|
+
assert_equal '$10.00', money.format
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_parses_japanese_yen
|
17
|
+
xml = <<-EOF
|
18
|
+
<Price xmlns="example">
|
19
|
+
<CurrencyCode>JPY</CurrencyCode>
|
20
|
+
<Amount>1000.00</Amount>
|
21
|
+
</Price>
|
22
|
+
EOF
|
23
|
+
model = Parser::Model.new(Nokogiri(xml))
|
24
|
+
money = model.money_at_xpath('Price')
|
25
|
+
assert_equal '¥1,000', money.format
|
26
|
+
end
|
27
|
+
end
|