duodealer_api 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.gitignore +13 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +23 -0
- data/Gemfile +5 -0
- data/Gemfile_ar41 +5 -0
- data/Gemfile_ar50 +5 -0
- data/Gemfile_ar51 +5 -0
- data/Gemfile_ar_master +5 -0
- data/RELEASING +13 -0
- data/Rakefile +44 -0
- data/docker-compose.yml +13 -0
- data/docs/graphql.md +191 -0
- data/duodealer_api.gemspec +38 -0
- data/lib/active_resource/connection_ext.rb +10 -0
- data/lib/active_resource/detailed_log_subscriber.rb +52 -0
- data/lib/active_resource/json_errors.rb +31 -0
- data/lib/duodealer_api.rb +33 -0
- data/lib/duodealer_api/api_version.rb +205 -0
- data/lib/duodealer_api/connection.rb +35 -0
- data/lib/duodealer_api/countable.rb +14 -0
- data/lib/duodealer_api/disable_prefix_check.rb +31 -0
- data/lib/duodealer_api/events.rb +7 -0
- data/lib/duodealer_api/graphql.rb +79 -0
- data/lib/duodealer_api/graphql/http_client.rb +22 -0
- data/lib/duodealer_api/graphql/railtie.rb +17 -0
- data/lib/duodealer_api/graphql/task.rake +97 -0
- data/lib/duodealer_api/limits.rb +76 -0
- data/lib/duodealer_api/message_enricher.rb +23 -0
- data/lib/duodealer_api/meta.rb +15 -0
- data/lib/duodealer_api/metafields.rb +20 -0
- data/lib/duodealer_api/paginated_collection.rb +69 -0
- data/lib/duodealer_api/pagination_link_headers.rb +33 -0
- data/lib/duodealer_api/resources.rb +3 -0
- data/lib/duodealer_api/resources/abandoned_checkout.rb +7 -0
- data/lib/duodealer_api/resources/access_scope.rb +10 -0
- data/lib/duodealer_api/resources/access_token.rb +8 -0
- data/lib/duodealer_api/resources/address.rb +4 -0
- data/lib/duodealer_api/resources/announcement.rb +4 -0
- data/lib/duodealer_api/resources/api_permission.rb +9 -0
- data/lib/duodealer_api/resources/application_charge.rb +15 -0
- data/lib/duodealer_api/resources/application_credit.rb +4 -0
- data/lib/duodealer_api/resources/array_base.rb +13 -0
- data/lib/duodealer_api/resources/article.rb +21 -0
- data/lib/duodealer_api/resources/asset.rb +100 -0
- data/lib/duodealer_api/resources/assigned_fulfillment_order.rb +16 -0
- data/lib/duodealer_api/resources/base.rb +162 -0
- data/lib/duodealer_api/resources/billing_address.rb +4 -0
- data/lib/duodealer_api/resources/blog.rb +10 -0
- data/lib/duodealer_api/resources/carrier_service.rb +4 -0
- data/lib/duodealer_api/resources/cart.rb +4 -0
- data/lib/duodealer_api/resources/checkout.rb +30 -0
- data/lib/duodealer_api/resources/collect.rb +6 -0
- data/lib/duodealer_api/resources/collection.rb +14 -0
- data/lib/duodealer_api/resources/collection_listing.rb +18 -0
- data/lib/duodealer_api/resources/collection_publication.rb +10 -0
- data/lib/duodealer_api/resources/comment.rb +9 -0
- data/lib/duodealer_api/resources/country.rb +4 -0
- data/lib/duodealer_api/resources/currency.rb +6 -0
- data/lib/duodealer_api/resources/custom_collection.rb +19 -0
- data/lib/duodealer_api/resources/customer.rb +29 -0
- data/lib/duodealer_api/resources/customer_group.rb +5 -0
- data/lib/duodealer_api/resources/customer_invite.rb +4 -0
- data/lib/duodealer_api/resources/customer_saved_search.rb +11 -0
- data/lib/duodealer_api/resources/discount_code.rb +9 -0
- data/lib/duodealer_api/resources/draft_order.rb +14 -0
- data/lib/duodealer_api/resources/draft_order_invoice.rb +4 -0
- data/lib/duodealer_api/resources/event.rb +8 -0
- data/lib/duodealer_api/resources/fulfillment.rb +47 -0
- data/lib/duodealer_api/resources/fulfillment_event.rb +15 -0
- data/lib/duodealer_api/resources/fulfillment_order.rb +137 -0
- data/lib/duodealer_api/resources/fulfillment_order_locations_for_move.rb +4 -0
- data/lib/duodealer_api/resources/fulfillment_request.rb +15 -0
- data/lib/duodealer_api/resources/fulfillment_service.rb +4 -0
- data/lib/duodealer_api/resources/fulfillment_v2.rb +20 -0
- data/lib/duodealer_api/resources/gift_card.rb +7 -0
- data/lib/duodealer_api/resources/image.rb +16 -0
- data/lib/duodealer_api/resources/inventory_item.rb +6 -0
- data/lib/duodealer_api/resources/inventory_level.rb +55 -0
- data/lib/duodealer_api/resources/line_item.rb +14 -0
- data/lib/duodealer_api/resources/location.rb +8 -0
- data/lib/duodealer_api/resources/marketing_event.rb +10 -0
- data/lib/duodealer_api/resources/metafield.rb +13 -0
- data/lib/duodealer_api/resources/note_attribute.rb +4 -0
- data/lib/duodealer_api/resources/option.rb +4 -0
- data/lib/duodealer_api/resources/order.rb +43 -0
- data/lib/duodealer_api/resources/order_risk.rb +8 -0
- data/lib/duodealer_api/resources/page.rb +6 -0
- data/lib/duodealer_api/resources/payment.rb +7 -0
- data/lib/duodealer_api/resources/payment_details.rb +4 -0
- data/lib/duodealer_api/resources/ping.rb +3 -0
- data/lib/duodealer_api/resources/policy.rb +7 -0
- data/lib/duodealer_api/resources/price_rule.rb +8 -0
- data/lib/duodealer_api/resources/product.rb +35 -0
- data/lib/duodealer_api/resources/product_listing.rb +16 -0
- data/lib/duodealer_api/resources/product_publication.rb +10 -0
- data/lib/duodealer_api/resources/province.rb +5 -0
- data/lib/duodealer_api/resources/publication.rb +5 -0
- data/lib/duodealer_api/resources/receipt.rb +4 -0
- data/lib/duodealer_api/resources/recurring_application_charge.rb +31 -0
- data/lib/duodealer_api/resources/redirect.rb +4 -0
- data/lib/duodealer_api/resources/refund.rb +14 -0
- data/lib/duodealer_api/resources/report.rb +4 -0
- data/lib/duodealer_api/resources/resource_feedback.rb +19 -0
- data/lib/duodealer_api/resources/rule.rb +4 -0
- data/lib/duodealer_api/resources/script_tag.rb +4 -0
- data/lib/duodealer_api/resources/shipping_address.rb +4 -0
- data/lib/duodealer_api/resources/shipping_line.rb +4 -0
- data/lib/duodealer_api/resources/shipping_rate.rb +7 -0
- data/lib/duodealer_api/resources/shipping_zone.rb +4 -0
- data/lib/duodealer_api/resources/shop.rb +25 -0
- data/lib/duodealer_api/resources/smart_collection.rb +19 -0
- data/lib/duodealer_api/resources/storefront_access_token.rb +4 -0
- data/lib/duodealer_api/resources/tax_line.rb +4 -0
- data/lib/duodealer_api/resources/tax_service.rb +4 -0
- data/lib/duodealer_api/resources/tender_transaction.rb +6 -0
- data/lib/duodealer_api/resources/theme.rb +4 -0
- data/lib/duodealer_api/resources/transaction.rb +5 -0
- data/lib/duodealer_api/resources/usage_charge.rb +5 -0
- data/lib/duodealer_api/resources/user.rb +4 -0
- data/lib/duodealer_api/resources/variant.rb +8 -0
- data/lib/duodealer_api/resources/webhook.rb +4 -0
- data/lib/duodealer_api/session.rb +171 -0
- data/lib/duodealer_api/version.rb +3 -0
- data/shipit.rubygems.yml +1 -0
- data/test/abandoned_checkouts_test.rb +29 -0
- data/test/access_scope_test.rb +23 -0
- data/test/access_token_test.rb +19 -0
- data/test/active_resource/json_errors_test.rb +19 -0
- data/test/api_permission_test.rb +9 -0
- data/test/api_version_test.rb +157 -0
- data/test/application_charge_test.rb +79 -0
- data/test/application_credit_test.rb +35 -0
- data/test/article_test.rb +73 -0
- data/test/asset_test.rb +18 -0
- data/test/assigned_fulfillment_order_test.rb +77 -0
- data/test/base_test.rb +198 -0
- data/test/blog_test.rb +8 -0
- data/test/carrier_service_test.rb +17 -0
- data/test/cart_test.rb +13 -0
- data/test/checkouts_test.rb +77 -0
- data/test/collect_test.rb +9 -0
- data/test/collection_listing_test.rb +79 -0
- data/test/collection_publication_test.rb +40 -0
- data/test/collection_test.rb +49 -0
- data/test/countable_test.rb +13 -0
- data/test/currency_test.rb +21 -0
- data/test/custom_collection_test.rb +9 -0
- data/test/customer_saved_search_test.rb +27 -0
- data/test/customer_test.rb +50 -0
- data/test/detailed_log_subscriber_test.rb +139 -0
- data/test/discount_code_test.rb +53 -0
- data/test/draft_order_test.rb +151 -0
- data/test/fixtures/abandoned_checkout.json +184 -0
- data/test/fixtures/abandoned_checkouts.json +186 -0
- data/test/fixtures/access_scopes.json +10 -0
- data/test/fixtures/access_token_delegate.json +4 -0
- data/test/fixtures/api_versions.json +38 -0
- data/test/fixtures/apis.json +42 -0
- data/test/fixtures/application_charge.json +16 -0
- data/test/fixtures/application_charges.json +57 -0
- data/test/fixtures/application_credit.json +12 -0
- data/test/fixtures/application_credits.json +24 -0
- data/test/fixtures/article.json +15 -0
- data/test/fixtures/articles.json +39 -0
- data/test/fixtures/asset.json +9 -0
- data/test/fixtures/assets.json +136 -0
- data/test/fixtures/assigned_fulfillment_orders.json +78 -0
- data/test/fixtures/authors.json +1 -0
- data/test/fixtures/blog.json +13 -0
- data/test/fixtures/blogs.json +13 -0
- data/test/fixtures/carrier_service.json +9 -0
- data/test/fixtures/carts.json +43 -0
- data/test/fixtures/checkout.json +160 -0
- data/test/fixtures/checkouts.json +162 -0
- data/test/fixtures/collect.json +12 -0
- data/test/fixtures/collection.json +17 -0
- data/test/fixtures/collection_listing.json +11 -0
- data/test/fixtures/collection_listing_product_ids.json +1 -0
- data/test/fixtures/collection_listing_product_ids2.json +1 -0
- data/test/fixtures/collection_listings.json +13 -0
- data/test/fixtures/collection_products.json +47 -0
- data/test/fixtures/collection_publication.json +11 -0
- data/test/fixtures/collection_publications.json +13 -0
- data/test/fixtures/currencies.json +25 -0
- data/test/fixtures/custom_collection.json +17 -0
- data/test/fixtures/customer_invite.json +9 -0
- data/test/fixtures/customer_saved_search.json +9 -0
- data/test/fixtures/customer_saved_search_customers.json +60 -0
- data/test/fixtures/customers.json +59 -0
- data/test/fixtures/customers_account_activation_url.json +3 -0
- data/test/fixtures/customers_search.json +60 -0
- data/test/fixtures/discount_code.json +10 -0
- data/test/fixtures/discount_codes.json +12 -0
- data/test/fixtures/draft_order.json +159 -0
- data/test/fixtures/draft_order_completed.json +159 -0
- data/test/fixtures/draft_order_invoice.json +9 -0
- data/test/fixtures/draft_orders.json +161 -0
- data/test/fixtures/engagement.json +15 -0
- data/test/fixtures/events.json +31 -0
- data/test/fixtures/fulfillment.json +49 -0
- data/test/fixtures/fulfillment_event.json +12 -0
- data/test/fixtures/fulfillment_order.json +38 -0
- data/test/fixtures/fulfillment_order_locations_for_move.json +18 -0
- data/test/fixtures/fulfillment_orders.json +78 -0
- data/test/fixtures/fulfillment_request.json +28 -0
- data/test/fixtures/fulfillment_service.json +10 -0
- data/test/fixtures/fulfillments.json +53 -0
- data/test/fixtures/gift_card.json +20 -0
- data/test/fixtures/gift_card_disabled.json +20 -0
- data/test/fixtures/graphql/2019-10.json +1083 -0
- data/test/fixtures/graphql/dummy_schema.rb +16 -0
- data/test/fixtures/graphql/unstable.json +1083 -0
- data/test/fixtures/image.json +10 -0
- data/test/fixtures/images.json +20 -0
- data/test/fixtures/inventory_level.json +7 -0
- data/test/fixtures/inventory_levels.json +24 -0
- data/test/fixtures/marketing_event.json +28 -0
- data/test/fixtures/marketing_events.json +54 -0
- data/test/fixtures/metafield.json +12 -0
- data/test/fixtures/metafields.json +34 -0
- data/test/fixtures/order.json +297 -0
- data/test/fixtures/order_risk.json +14 -0
- data/test/fixtures/order_risks.json +28 -0
- data/test/fixtures/order_with_properties.json +373 -0
- data/test/fixtures/orders.json +299 -0
- data/test/fixtures/payment.json +7 -0
- data/test/fixtures/payments.json +9 -0
- data/test/fixtures/ping/conversation.json +1 -0
- data/test/fixtures/ping/failed_delivery_confirmation.json +1 -0
- data/test/fixtures/ping/message.json +1 -0
- data/test/fixtures/ping/successful_delivery_confirmation.json +1 -0
- data/test/fixtures/policies.json +8 -0
- data/test/fixtures/price_rule.json +27 -0
- data/test/fixtures/price_rules.json +28 -0
- data/test/fixtures/product.json +116 -0
- data/test/fixtures/product_listing.json +86 -0
- data/test/fixtures/product_listing_product_ids.json +1 -0
- data/test/fixtures/product_listing_product_ids2.json +1 -0
- data/test/fixtures/product_listings.json +174 -0
- data/test/fixtures/product_publication.json +11 -0
- data/test/fixtures/product_publications.json +13 -0
- data/test/fixtures/publications.json +9 -0
- data/test/fixtures/recurring_application_charge.json +22 -0
- data/test/fixtures/recurring_application_charge_adjustment.json +5 -0
- data/test/fixtures/recurring_application_charges.json +106 -0
- data/test/fixtures/redirect.json +7 -0
- data/test/fixtures/refund.json +112 -0
- data/test/fixtures/report.json +9 -0
- data/test/fixtures/reports.json +11 -0
- data/test/fixtures/script_tag.json +10 -0
- data/test/fixtures/script_tags.json +18 -0
- data/test/fixtures/shipping_rates.json +12 -0
- data/test/fixtures/shipping_zones.json +315 -0
- data/test/fixtures/shop.json +26 -0
- data/test/fixtures/smart_collection.json +21 -0
- data/test/fixtures/smart_collection_products.json +155 -0
- data/test/fixtures/storefront_access_token.json +9 -0
- data/test/fixtures/storefront_access_tokens.json +18 -0
- data/test/fixtures/tags.json +1 -0
- data/test/fixtures/tax_service.json +9 -0
- data/test/fixtures/tender_transactions.json +52 -0
- data/test/fixtures/transaction.json +29 -0
- data/test/fixtures/usage_charge.json +11 -0
- data/test/fixtures/usage_charges.json +23 -0
- data/test/fixtures/user.json +21 -0
- data/test/fixtures/users.json +42 -0
- data/test/fixtures/variant.json +23 -0
- data/test/fixtures/variants.json +88 -0
- data/test/fixtures/webhook.json +10 -0
- data/test/fixtures/webhooks.json +18 -0
- data/test/fulfillment_event_test.rb +69 -0
- data/test/fulfillment_order_test.rb +462 -0
- data/test/fulfillment_order_test_helper.rb +7 -0
- data/test/fulfillment_request_test.rb +33 -0
- data/test/fulfillment_service_test.rb +17 -0
- data/test/fulfillment_test.rb +224 -0
- data/test/fulfillment_v2_test.rb +62 -0
- data/test/gift_card_test.rb +22 -0
- data/test/graphql/http_client_test.rb +26 -0
- data/test/graphql_test.rb +147 -0
- data/test/image_test.rb +39 -0
- data/test/inventory_level_test.rb +59 -0
- data/test/lib/webmock_extensions/last_request.rb +16 -0
- data/test/limits_test.rb +38 -0
- data/test/location_test.rb +14 -0
- data/test/marketing_event_test.rb +68 -0
- data/test/message_enricher_test.rb +45 -0
- data/test/meta_test.rb +49 -0
- data/test/metafield_test.rb +46 -0
- data/test/order_risk_test.rb +46 -0
- data/test/order_test.rb +125 -0
- data/test/pagination_test.rb +257 -0
- data/test/payment_test.rb +19 -0
- data/test/policy_test.rb +19 -0
- data/test/price_rule_test.rb +65 -0
- data/test/product_listing_test.rb +97 -0
- data/test/product_publication_test.rb +40 -0
- data/test/product_test.rb +60 -0
- data/test/publication_test.rb +12 -0
- data/test/recurring_application_charge_test.rb +142 -0
- data/test/redirect_test.rb +9 -0
- data/test/refund_test.rb +32 -0
- data/test/report_test.rb +35 -0
- data/test/resource_feedback_test.rb +42 -0
- data/test/script_tag_test.rb +30 -0
- data/test/session_test.rb +366 -0
- data/test/shipping_rate_test.rb +17 -0
- data/test/shipping_zone_test.rb +10 -0
- data/test/shop_test.rb +68 -0
- data/test/smart_collection_test.rb +35 -0
- data/test/storefront_access_token_test.rb +32 -0
- data/test/tax_service_test.rb +9 -0
- data/test/tender_transaction_test.rb +18 -0
- data/test/test_helper.rb +124 -0
- data/test/transaction_test.rb +17 -0
- data/test/usage_charge_test.rb +21 -0
- data/test/user_test.rb +17 -0
- data/test/variant_test.rb +46 -0
- data/test/webhook_test.rb +21 -0
- metadata +541 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ApplicationChargeTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_application_charge_create
|
|
6
|
+
fake "application_charges", :method => :post, :status => 201, :body => load_fixture('application_charge')
|
|
7
|
+
|
|
8
|
+
charge = DuodealerAPI::ApplicationCharge.create(
|
|
9
|
+
name: "iPod Cleaning",
|
|
10
|
+
price: 5.00,
|
|
11
|
+
return_url: "http://google.com"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
assert_equal 'https://this-is-my-test-shop.duodealer.com/admin/charges/803742/confirm_application_charge?signature=BAhpA55DDA%3D%3D--55b44e274e438c619be4631c804abcbcb6ee915a', charge.confirmation_url
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_get_application_charge
|
|
18
|
+
fake "application_charges/803742", :method => :get, :status => 201, :body => load_fixture('application_charge')
|
|
19
|
+
|
|
20
|
+
charge = DuodealerAPI::ApplicationCharge.find(803742)
|
|
21
|
+
|
|
22
|
+
assert_equal "iPod Cleaning", charge.name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_list_application_charges
|
|
26
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
27
|
+
|
|
28
|
+
charges = DuodealerAPI::ApplicationCharge.find(:all)
|
|
29
|
+
|
|
30
|
+
assert_equal 4, charges.size
|
|
31
|
+
assert_equal "iPhone Case", charges.last.name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_list_pending_application_charges
|
|
35
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
36
|
+
|
|
37
|
+
pending_charges = DuodealerAPI::ApplicationCharge.pending
|
|
38
|
+
|
|
39
|
+
assert_equal 1, pending_charges.size
|
|
40
|
+
assert_equal "Screen Replacement", pending_charges.first.name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_list_expired_application_charges
|
|
44
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
45
|
+
|
|
46
|
+
expired_charges = DuodealerAPI::ApplicationCharge.expired
|
|
47
|
+
|
|
48
|
+
assert_equal 1, expired_charges.size
|
|
49
|
+
assert_equal "iPod Cleaning", expired_charges.first.name
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_list_accepted_application_charges
|
|
53
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
54
|
+
|
|
55
|
+
accepted_charges = DuodealerAPI::ApplicationCharge.accepted
|
|
56
|
+
|
|
57
|
+
assert_equal 1, accepted_charges.size
|
|
58
|
+
assert_equal "iPhone Case", accepted_charges.first.name
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_list_declined_application_charges
|
|
62
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
63
|
+
|
|
64
|
+
declined_charges = DuodealerAPI::ApplicationCharge.declined
|
|
65
|
+
|
|
66
|
+
assert_equal 1, declined_charges.size
|
|
67
|
+
assert_equal "Magic Mouse", declined_charges.first.name
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_activate_application_charge
|
|
71
|
+
fake "application_charges", :method => :get, :status => 201, :body => load_fixture('application_charges')
|
|
72
|
+
fake "application_charges/803740/activate", :method => :post, :status => 200, :body => "{}"
|
|
73
|
+
|
|
74
|
+
charge = DuodealerAPI::ApplicationCharge.accepted
|
|
75
|
+
|
|
76
|
+
assert charge.last.activate
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ApplicationCreditTest < Test::Unit::TestCase
|
|
4
|
+
def test_application_credit_create
|
|
5
|
+
fake "application_credits", method: :post, status: 201, body: load_fixture('application_credit')
|
|
6
|
+
|
|
7
|
+
credit = DuodealerAPI::ApplicationCredit.create(
|
|
8
|
+
description: "refund for application charge",
|
|
9
|
+
amount: 5.00,
|
|
10
|
+
api_client_id: 861378,
|
|
11
|
+
shop_id: 487168
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
assert_equal 'refund for application charge', credit.description
|
|
15
|
+
assert_equal '5.00', credit.amount
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_get_application_credit
|
|
19
|
+
fake "application_credits/803742", method: :get, status: 201, body: load_fixture('application_credit')
|
|
20
|
+
|
|
21
|
+
credit = DuodealerAPI::ApplicationCredit.find(803742)
|
|
22
|
+
|
|
23
|
+
assert_equal 'refund for application charge', credit.description
|
|
24
|
+
assert_equal '5.00', credit.amount
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_list_application_credits
|
|
28
|
+
fake "application_credits", method: :get, status: 201, body: load_fixture('application_credits')
|
|
29
|
+
|
|
30
|
+
credit = DuodealerAPI::ApplicationCredit.find(:all)
|
|
31
|
+
|
|
32
|
+
assert_equal 2, credit.size
|
|
33
|
+
assert_equal '10.00', credit.last.amount
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ArticleTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_create_article
|
|
6
|
+
fake "blogs/1008414260/articles", :method => :post, :body => load_fixture('article')
|
|
7
|
+
article = DuodealerAPI::Article.new(:blog_id => 1008414260)
|
|
8
|
+
article.save
|
|
9
|
+
assert_equal "First Post", article.title
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_get_article
|
|
13
|
+
fake "articles/6242736", :method => :get, :body => load_fixture('article')
|
|
14
|
+
article = DuodealerAPI::Article.find(6242736)
|
|
15
|
+
assert_equal "First Post", article.title
|
|
16
|
+
assert_equal 1008414260, article.blog_id
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_get_articles
|
|
20
|
+
fake "articles", :method => :get, :body => load_fixture('articles')
|
|
21
|
+
articles = DuodealerAPI::Article.all
|
|
22
|
+
assert_equal 3, articles.length
|
|
23
|
+
assert_equal 1008414260, articles.first.blog_id
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_get_articles_namespaced
|
|
27
|
+
fake "blogs/1008414260/articles", :method => :get, :body => load_fixture('articles')
|
|
28
|
+
articles = DuodealerAPI::Article.find(:all, :params => {:blog_id => 1008414260})
|
|
29
|
+
assert_equal 3, articles.length
|
|
30
|
+
assert_equal 1008414260, articles.first.blog_id
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_get_article_namespaced
|
|
34
|
+
fake "blogs/1008414260/articles/6242736", :method => :get, :body => load_fixture('article')
|
|
35
|
+
article = DuodealerAPI::Article.find(6242736, :params => {:blog_id => 1008414260})
|
|
36
|
+
assert_equal "First Post", article.title
|
|
37
|
+
assert_equal 1008414260, article.blog_id
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_get_authors
|
|
41
|
+
fake "articles/authors", :method => :get, :body => load_fixture('authors')
|
|
42
|
+
authors = DuodealerAPI::Article.authors
|
|
43
|
+
assert_equal "Duodealer", authors.first
|
|
44
|
+
assert_equal "development shop", authors.last
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_get_authors_for_blog_id
|
|
48
|
+
fake "blogs/1008414260/articles/authors", :method => :get, :body => load_fixture('authors')
|
|
49
|
+
authors = DuodealerAPI::Article.authors(:blog_id => 1008414260)
|
|
50
|
+
assert_equal 3, authors.length
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_get_tags
|
|
54
|
+
fake "articles/tags", :method => :get, :body => load_fixture('tags')
|
|
55
|
+
tags = DuodealerAPI::Article.tags
|
|
56
|
+
assert_equal "consequuntur", tags.first
|
|
57
|
+
assert_equal "repellendus", tags.last
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_get_tags_for_blog_id
|
|
61
|
+
fake "blogs/1008414260/articles/tags", :method => :get, :body => load_fixture('tags')
|
|
62
|
+
tags = DuodealerAPI::Article.tags(:blog_id => 1008414260)
|
|
63
|
+
assert_equal "consequuntur", tags.first
|
|
64
|
+
assert_equal "repellendus", tags.last
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_get_popular_tags
|
|
68
|
+
fake "articles/tags.json?limit=1&popular=1", :extension => false, :method => :get, :body => load_fixture('tags')
|
|
69
|
+
tags = DuodealerAPI::Article.tags(:popular => 1, :limit => 1)
|
|
70
|
+
assert_equal 3, tags.length
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
data/test/asset_test.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class AssetTest < Test::Unit::TestCase
|
|
4
|
+
def test_get_assetss
|
|
5
|
+
fake "themes/1/assets", :method => :get, :body => load_fixture('assets')
|
|
6
|
+
v = DuodealerAPI::Asset.find(:all, :params => {:theme_id => 1})
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_get_asset_namespaced
|
|
10
|
+
fake "themes/1/assets.json?asset%5Bkey%5D=templates%2Findex.liquid&theme_id=1", :extension=> false, :method => :get, :body => load_fixture('asset')
|
|
11
|
+
v = DuodealerAPI::Asset.find('templates/index.liquid', :params => {:theme_id => 1})
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_get_asset
|
|
15
|
+
fake "assets.json?asset%5Bkey%5D=templates%2Findex.liquid", :extension=> false, :method => :get, :body => load_fixture('asset')
|
|
16
|
+
v = DuodealerAPI::Asset.find('templates/index.liquid')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'fulfillment_order_test_helper'
|
|
3
|
+
|
|
4
|
+
class AssignedFulFillmentOrderTest < Test::Unit::TestCase
|
|
5
|
+
include FulfillmentOrderTestHelper
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
super
|
|
9
|
+
@url_prefix = url_prefix_for_activated_session_for('2020-01')
|
|
10
|
+
@fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context "AssignedFulfillmentOrder" do
|
|
14
|
+
context ".new" do
|
|
15
|
+
should "raise NotImplementedError when api_version is older than 2020-01" do
|
|
16
|
+
url_prefix_for_activated_session_for('2019-10')
|
|
17
|
+
|
|
18
|
+
assert_raises NotImplementedError do
|
|
19
|
+
DuodealerAPI::AssignedFulfillmentOrder.new(ActiveSupport::JSON.decode(@fulfillment_order_fixture))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "#all" do
|
|
25
|
+
should "raise NotImplementedError when api_version is older than 2020-01" do
|
|
26
|
+
@url_prefix = url_prefix_for_activated_session_for('2019-10')
|
|
27
|
+
|
|
28
|
+
fake 'assigned_fulfillment_orders',
|
|
29
|
+
url: "#{@url_prefix}/assigned_fulfillment_orders.json",
|
|
30
|
+
method: :get,
|
|
31
|
+
body: @fulfillment_order_fixture,
|
|
32
|
+
extension: false
|
|
33
|
+
|
|
34
|
+
assert_raises NotImplementedError do
|
|
35
|
+
DuodealerAPI::AssignedFulfillmentOrder.all(params: { assigned_status: 'cancellation_requested' })
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "list assigned fulfillment orders by assigned_status" do
|
|
40
|
+
fake 'assigned_fulfillment_orders',
|
|
41
|
+
url: "#{@url_prefix}/assigned_fulfillment_orders.json?assigned_status=cancellation_requested",
|
|
42
|
+
method: :get,
|
|
43
|
+
body: @fulfillment_order_fixture,
|
|
44
|
+
extension: false
|
|
45
|
+
|
|
46
|
+
assigned_fulfillment_orders = DuodealerAPI::AssignedFulfillmentOrder.all(
|
|
47
|
+
params: { assigned_status: 'cancellation_requested' }
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
assert_equal 2, assigned_fulfillment_orders.count
|
|
51
|
+
assigned_fulfillment_orders.each do |fulfillment_order|
|
|
52
|
+
assert fulfillment_order.is_a?(DuodealerAPI::FulfillmentOrder)
|
|
53
|
+
assert_equal 'in_progress', fulfillment_order.status
|
|
54
|
+
assert_equal 'cancellation_accepted', fulfillment_order.request_status
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
should "be able to list assigned fulfillment orders by location_ids" do
|
|
59
|
+
assigned_location_id = 905684977
|
|
60
|
+
fake 'assigned_fulfillment_orders',
|
|
61
|
+
url: "#{@url_prefix}/assigned_fulfillment_orders.json?location_ids%5B%5D=#{assigned_location_id}",
|
|
62
|
+
method: :get,
|
|
63
|
+
body: @fulfillment_order_fixture, extension: false
|
|
64
|
+
|
|
65
|
+
assigned_fulfillment_orders = DuodealerAPI::AssignedFulfillmentOrder.all(
|
|
66
|
+
params: { location_ids: [assigned_location_id] }
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
assert_equal 2, assigned_fulfillment_orders.count
|
|
70
|
+
assigned_fulfillment_orders.each do |fulfillment_order|
|
|
71
|
+
assert fulfillment_order.is_a?(DuodealerAPI::FulfillmentOrder)
|
|
72
|
+
assert_equal assigned_location_id, fulfillment_order.assigned_location_id
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
data/test/base_test.rb
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require "active_support/log_subscriber/test_helper"
|
|
3
|
+
|
|
4
|
+
class BaseTest < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
@session1 = DuodealerAPI::Session.new(domain: 'shop1.duodealer.com', token: 'token1', api_version: '2019-01')
|
|
8
|
+
@session2 = DuodealerAPI::Session.new(domain: 'shop2.duodealer.com', token: 'token2', api_version: '2019-01')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
super
|
|
13
|
+
clear_header('X-Custom')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test '#activate_session should set site and headers for given session' do
|
|
17
|
+
DuodealerAPI::Base.activate_session @session1
|
|
18
|
+
|
|
19
|
+
assert_nil ActiveResource::Base.site
|
|
20
|
+
assert_equal 'https://shop1.duodealer.com', DuodealerAPI::Base.site.to_s
|
|
21
|
+
assert_equal 'https://shop1.duodealer.com', DuodealerAPI::Shop.site.to_s
|
|
22
|
+
|
|
23
|
+
assert_nil ActiveResource::Base.headers['X-DuoDealer-Access-Token']
|
|
24
|
+
assert_equal 'token1', DuodealerAPI::Base.headers['X-DuoDealer-Access-Token']
|
|
25
|
+
assert_equal 'token1', DuodealerAPI::Shop.headers['X-DuoDealer-Access-Token']
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test '#clear_session should clear base site settings from Base' do
|
|
29
|
+
DuodealerAPI::Base.site = "https://foo:bar@www.zombo.com"
|
|
30
|
+
|
|
31
|
+
assert_equal "foo", DuodealerAPI::Base.user
|
|
32
|
+
assert_equal "bar", DuodealerAPI::Base.password
|
|
33
|
+
|
|
34
|
+
DuodealerAPI::Base.clear_session
|
|
35
|
+
|
|
36
|
+
assert_nil DuodealerAPI::Base.user
|
|
37
|
+
assert_nil DuodealerAPI::Base.password
|
|
38
|
+
assert_nil DuodealerAPI::Base.site
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test '#clear_session should clear site and headers from Base' do
|
|
42
|
+
DuodealerAPI::Base.activate_session @session1
|
|
43
|
+
DuodealerAPI::Base.clear_session
|
|
44
|
+
|
|
45
|
+
assert_nil ActiveResource::Base.site
|
|
46
|
+
assert_nil DuodealerAPI::Base.site
|
|
47
|
+
assert_nil DuodealerAPI::Shop.site
|
|
48
|
+
|
|
49
|
+
assert_nil ActiveResource::Base.headers['X-DuoDealer-Access-Token']
|
|
50
|
+
assert_nil DuodealerAPI::Base.headers['X-DuoDealer-Access-Token']
|
|
51
|
+
assert_nil DuodealerAPI::Shop.headers['X-DuoDealer-Access-Token']
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
test '#activate_session with one session, then clearing and activating with another session should send request to correct shop' do
|
|
55
|
+
DuodealerAPI::Base.activate_session @session1
|
|
56
|
+
DuodealerAPI::Base.clear_session
|
|
57
|
+
DuodealerAPI::Base.activate_session @session2
|
|
58
|
+
|
|
59
|
+
assert_nil ActiveResource::Base.site
|
|
60
|
+
assert_equal 'https://shop2.duodealer.com', DuodealerAPI::Base.site.to_s
|
|
61
|
+
assert_equal 'https://shop2.duodealer.com', DuodealerAPI::Shop.site.to_s
|
|
62
|
+
|
|
63
|
+
assert_nil ActiveResource::Base.headers['X-DuoDealer-Access-Token']
|
|
64
|
+
assert_equal 'token2', DuodealerAPI::Base.headers['X-DuoDealer-Access-Token']
|
|
65
|
+
assert_equal 'token2', DuodealerAPI::Shop.headers['X-DuoDealer-Access-Token']
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
test '#activate_session with nil raises an InvalidSessionError' do
|
|
69
|
+
assert_raises DuodealerAPI::Base::InvalidSessionError do
|
|
70
|
+
DuodealerAPI::Base.activate_session nil
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
test "#delete should send custom headers with request" do
|
|
75
|
+
DuodealerAPI::Base.activate_session @session1
|
|
76
|
+
DuodealerAPI::Base.headers['X-Custom'] = 'abc'
|
|
77
|
+
DuodealerAPI::Base.connection
|
|
78
|
+
.expects(:delete)
|
|
79
|
+
.with('/admin/api/2019-01/bases/1.json', has_entry('X-Custom', 'abc'))
|
|
80
|
+
DuodealerAPI::Base.delete "1"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
test "#headers includes the User-Agent" do
|
|
84
|
+
assert_not_includes ActiveResource::Base.headers.keys, 'User-Agent'
|
|
85
|
+
assert_includes DuodealerAPI::Base.headers.keys, 'User-Agent'
|
|
86
|
+
thread = Thread.new do
|
|
87
|
+
assert_includes DuodealerAPI::Base.headers.keys, 'User-Agent'
|
|
88
|
+
end
|
|
89
|
+
thread.join
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test "prefix= will forward to resource when the value does not start with admin" do
|
|
93
|
+
session = DuodealerAPI::Session.new(domain: 'shop1.duodealer.com', token: 'token1', api_version: '2019-01')
|
|
94
|
+
DuodealerAPI::Base.activate_session(session)
|
|
95
|
+
silence_warnings do
|
|
96
|
+
TestResource.prefix = 'a/regular/path/'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
assert_equal('/admin/api/2019-01/a/regular/path/', TestResource.prefix)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
test "prefix= will raise an error if value starts with with /admin" do
|
|
103
|
+
assert_raises ArgumentError do
|
|
104
|
+
TestResource.prefix = '/admin/old/prefix/structure/'
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test "#headers propagates changes to subclasses" do
|
|
109
|
+
DuodealerAPI::Base.headers['X-Custom'] = "the value"
|
|
110
|
+
assert_equal "the value", DuodealerAPI::Base.headers['X-Custom']
|
|
111
|
+
assert_equal "the value", DuodealerAPI::Product.headers['X-Custom']
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
test "#headers clears changes to subclasses" do
|
|
115
|
+
DuodealerAPI::Base.headers['X-Custom'] = "the value"
|
|
116
|
+
assert_equal "the value", DuodealerAPI::Product.headers['X-Custom']
|
|
117
|
+
DuodealerAPI::Base.headers['X-Custom'] = nil
|
|
118
|
+
assert_nil DuodealerAPI::Product.headers['X-Custom']
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
test "#headers set in the main thread affect spawned threads" do
|
|
122
|
+
DuodealerAPI::Base.headers['X-Custom'] = "the value"
|
|
123
|
+
Thread.new do
|
|
124
|
+
assert_equal "the value", DuodealerAPI::Base.headers['X-Custom']
|
|
125
|
+
end.join
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
test "#headers set in spawned threads do not affect the main thread" do
|
|
129
|
+
Thread.new do
|
|
130
|
+
DuodealerAPI::Base.headers['X-Custom'] = "the value"
|
|
131
|
+
end.join
|
|
132
|
+
assert_nil DuodealerAPI::Base.headers['X-Custom']
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
test "using a different version changes the url" do
|
|
136
|
+
release_2019_01 = DuodealerAPI::Session.new(domain: 'shop1.duodealer.com', token: 'token1', api_version: '2019-01')
|
|
137
|
+
unstable_version = DuodealerAPI::Session.new(domain: 'shop2.duodealer.com', token: 'token2', api_version: :unstable)
|
|
138
|
+
|
|
139
|
+
fake(
|
|
140
|
+
"shop",
|
|
141
|
+
url: "https://shop1.duodealer.com/admin/api/2019-01/shop.json",
|
|
142
|
+
method: :get,
|
|
143
|
+
status: 201,
|
|
144
|
+
body: '{ "shop": { "id": 1 } }'
|
|
145
|
+
)
|
|
146
|
+
fake(
|
|
147
|
+
"shop",
|
|
148
|
+
url: "https://shop2.duodealer.com/admin/api/unstable/shop.json",
|
|
149
|
+
method: :get,
|
|
150
|
+
status: 201,
|
|
151
|
+
body: '{ "shop": { "id": 2 } }'
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
DuodealerAPI::Base.activate_session(release_2019_01)
|
|
155
|
+
assert_equal 1, DuodealerAPI::Shop.current.id
|
|
156
|
+
|
|
157
|
+
DuodealerAPI::Base.activate_session(unstable_version)
|
|
158
|
+
assert_equal 2, DuodealerAPI::Shop.current.id
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
test "#api_version= should set ApiVersion" do
|
|
162
|
+
DuodealerAPI::Base.api_version = '2019-04'
|
|
163
|
+
assert_equal '2019-04', DuodealerAPI::Base.api_version.to_s
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
test "#api_version= nil should set ApiVersion to DuodealerAPI::ApiVersion::NullVersion" do
|
|
167
|
+
DuodealerAPI::Base.api_version = nil
|
|
168
|
+
assert_equal DuodealerAPI::ApiVersion::NullVersion, DuodealerAPI::Base.api_version
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
test "#api_version= DuodealerAPI::ApiVersion::NullVersion should set ApiVersion to DuodealerAPI::ApiVersion::NullVersion" do
|
|
172
|
+
DuodealerAPI::Base.api_version = DuodealerAPI::ApiVersion::NullVersion
|
|
173
|
+
assert_equal DuodealerAPI::ApiVersion::NullVersion, DuodealerAPI::Base.api_version
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
test "#version_validation! does not raise is api_version is newer or equal to minimum supported version" do
|
|
177
|
+
DuodealerAPI::Base.api_version = '2020-01'
|
|
178
|
+
assert_nil DuodealerAPI::Base::version_validation!('2020-01')
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
test "#version_validation! raises NotImplemetedError if api_version is older than minimum supported version" do
|
|
182
|
+
DuodealerAPI::Base.api_version = '2019-10'
|
|
183
|
+
exception = assert_raises NotImplementedError do
|
|
184
|
+
DuodealerAPI::Base::version_validation!('2020-01')
|
|
185
|
+
end
|
|
186
|
+
assert_equal 'The minimum supported version is 2020-01.', exception.message
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def clear_header(header)
|
|
191
|
+
[ActiveResource::Base, DuodealerAPI::Base, DuodealerAPI::Product].each do |klass|
|
|
192
|
+
klass.headers.delete(header)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
class TestResource < DuodealerAPI::Base
|
|
197
|
+
end
|
|
198
|
+
end
|