mws-orders 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +73 -0
  4. data/lib/mws/orders/client.rb +88 -0
  5. data/lib/mws/orders/helpers/parameters.rb +53 -0
  6. data/lib/mws/orders/helpers/structured_list.rb +40 -0
  7. data/lib/mws/orders/parsers/base.rb +27 -0
  8. data/lib/mws/orders/parsers/collection.rb +22 -0
  9. data/lib/mws/orders/parsers/invoice_data.rb +23 -0
  10. data/lib/mws/orders/parsers/model.rb +38 -0
  11. data/lib/mws/orders/parsers/order.rb +108 -0
  12. data/lib/mws/orders/parsers/order_item.rb +107 -0
  13. data/lib/mws/orders/parsers/order_items.rb +17 -0
  14. data/lib/mws/orders/parsers/orders.rb +17 -0
  15. data/lib/mws/orders/parsers/payment_execution_detail.rb +17 -0
  16. data/lib/mws/orders/parsers/payment_execution_detail_item.rb +15 -0
  17. data/lib/mws/orders/parsers/service_status.rb +32 -0
  18. data/lib/mws/orders/parsers/service_status_message.rb +15 -0
  19. data/lib/mws/orders/parsers/shipping_address.rb +35 -0
  20. data/lib/mws/orders/requests/base.rb +55 -0
  21. data/lib/mws/orders/requests/order_items.rb +23 -0
  22. data/lib/mws/orders/requests/orders.rb +36 -0
  23. data/lib/mws/orders/requests/service_status.rb +18 -0
  24. data/lib/mws/orders/version.rb +5 -0
  25. data/lib/mws-orders.rb +29 -0
  26. data/test/fixtures/mws.yml +12 -0
  27. data/test/fixtures/mws.yml.example +4 -0
  28. data/test/fixtures/order_items.xml +83 -0
  29. data/test/fixtures/orders.xml +109 -0
  30. data/test/fixtures/service_status.xml +19 -0
  31. data/test/helpers/parameters_test.rb +34 -0
  32. data/test/helpers/structured_list_test.rb +17 -0
  33. data/test/integration/order_items_test.rb +16 -0
  34. data/test/integration/orders_test.rb +17 -0
  35. data/test/integration/service_status_test.rb +9 -0
  36. data/test/integration/test_helper.rb +12 -0
  37. data/test/parsers/collection_test.rb +7 -0
  38. data/test/parsers/model_test.rb +27 -0
  39. data/test/parsers/order_item_test.rb +68 -0
  40. data/test/parsers/order_items_test.rb +13 -0
  41. data/test/parsers/order_test.rb +80 -0
  42. data/test/parsers/orders_test.rb +13 -0
  43. data/test/parsers/payment_execution_detail_item_test.rb +16 -0
  44. data/test/parsers/payment_execution_detail_test.rb +13 -0
  45. data/test/parsers/service_status_message_test.rb +16 -0
  46. data/test/parsers/service_status_test.rb +38 -0
  47. data/test/parsers/shipping_address_test.rb +35 -0
  48. data/test/parsers/test_helper.rb +10 -0
  49. data/test/requests/order_items_test.rb +36 -0
  50. data/test/requests/orders_test.rb +46 -0
  51. data/test/requests/service_status_test.rb +22 -0
  52. data/test/requests/test_helper.rb +18 -0
  53. data/test/test_helper.rb +7 -0
  54. 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,15 @@
1
+ module MWS
2
+ module Orders
3
+ module Parser
4
+ class ServiceStatusMessage < Model
5
+ value :locale do
6
+ text_at_xpath('Locale')
7
+ end
8
+
9
+ value :text do
10
+ text_at_xpath('Text')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ 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
@@ -0,0 +1,5 @@
1
+ module MWS
2
+ module Orders
3
+ VERSION = '0.0.1'
4
+ end
5
+ 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: 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
4
+ seller_id: A2JYSO6W6KEP83
5
+ - country: GB
6
+ aws_access_key_id: AKIAJJDQ2MJTMPXKJE4A
7
+ aws_secret_access_key: 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
8
+ seller_id: A2D9DZ30GEWP6N
9
+ - country: JP
10
+ aws_access_key_id: AKIAJ5RDDSRROM6GXQ5Q
11
+ aws_secret_access_key: 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
12
+ seller_id: A7BU5WGNVGQ1I
@@ -0,0 +1,4 @@
1
+ - country: GB
2
+ aws_access_key_id: foo
3
+ aws_secret_access_key: bar
4
+ seller_id: baz
@@ -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,9 @@
1
+ require_relative 'test_helper'
2
+
3
+ class ServiceStatusTest < IntegrationTest
4
+ def test_gets_service_status
5
+ @clients.each do |client|
6
+ assert client.get_service_status
7
+ end
8
+ end
9
+ 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,7 @@
1
+ require_relative 'test_helper'
2
+
3
+ class CollectionParserTest < ParserTest
4
+ def test_is_enumerable
5
+ assert_respond_to Parser::Collection.new(nil), :map
6
+ end
7
+ 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