Skip to content

Commit

Permalink
Merge pull request #609 from Shopify/collection-products
Browse files Browse the repository at this point in the history
Add support Collection#products endpoint
  • Loading branch information
siddhantbajaj authored Sep 3, 2019
2 parents 7c5a458 + 8b94824 commit 8905f90
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 0 deletions.
14 changes: 14 additions & 0 deletions lib/shopify_api/resources/collection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module ShopifyAPI
class Collection < Base
include Events
include Metafields

def products(options = {})
available_in_version = ShopifyAPI::ApiVersion.find_version(:unstable)
raise NotImplementedError unless ShopifyAPI::Base.api_version >= available_in_version
Product.find(:all, from: "#{self.class.prefix}collections/#{id}/products.json", params: options)
end
end
end
49 changes: 49 additions & 0 deletions test/collection_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
require 'test_helper'

class CollectionTest < Test::Unit::TestCase
test "Collection get products gets all products in a collection on unstable version" do
unstable_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: :unstable)
ShopifyAPI::Base.activate_session(unstable_version)

fake(
'collections',
url: 'https://shop2.myshopify.com/admin/api/unstable/collections/1.json',
method: :get,
status: 200,
body: load_fixture('collection'),
extension: false
)

collection = ShopifyAPI::Collection.find(1)

fake(
'products',
url: 'https://shop2.myshopify.com/admin/api/unstable/collections/1/products.json',
method: :get,
status: 200,
body: load_fixture('collection_products'),
extension: false
)
assert_equal [632910392, 921728736], collection.products.map(&:id)
end

test "Collection get products fails on older api version" do
unstable_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: '2019-07')
ShopifyAPI::Base.activate_session(unstable_version)

fake(
'collections',
url: 'https://shop2.myshopify.com/admin/api/2019-07/collections/1.json',
method: :get,
status: 200,
body: load_fixture('collection'),
extension: false
)

collection = ShopifyAPI::Collection.find(1)

assert_raises NotImplementedError do
collection.products
end
end
end
17 changes: 17 additions & 0 deletions test/fixtures/collection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"collection": {
"id": 1,
"handle": "test-collection",
"title": "test-collection",
"updated_at": "2016-03-17T16:58:37-04:00",
"body_html": null,
"published_at": "2016-03-17T16:58:37-04:00",
"sort_order": "alpha-asc",
"template_suffix": null,
"published_scope": "global",
"image": {
"created_at": "2016-03-17T16:58:37-04:00",
"src": "https:\/\/cdn.shopify.com\/s\/files\/1\/0006\/9093\/3842\/collections\/fd43f2c8883f6e9b680e3295fd990d2c.gif?v=1458248317"
}
}
}
47 changes: 47 additions & 0 deletions test/fixtures/collection_products.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"products": [
{
"product_type": "Cult Products",
"handle": "ipod-nano",
"created_at": "2011-10-20T14:05:13-04:00",
"body_html": "<p>It's the small iPod with one very big idea: Video. Now the world's most popular music player, available in 4GB and 8GB models, lets you enjoy TV shows, movies, video podcasts, and more. The larger, brighter display means amazing picture quality. In six eye-catching colors, iPod nano is stunning all around. And with models starting at just $149, little speaks volumes.</p>",
"title": "IPod Nano - 8GB",
"template_suffix": null,
"updated_at": "2011-10-20T14:05:13-04:00",
"id": 632910392,
"tags": "Emotive, Flash Memory, MP3, Music",
"images": [
{
"position": 1,
"created_at": "2011-10-20T14:05:13-04:00",
"product_id": 632910392,
"updated_at": "2011-10-20T14:05:13-04:00",
"src": "http://static.shopify.com/s/files/1/6909/3384/products/ipod-nano.png?0",
"id": 850703190
}
],
"vendor": "Apple",
"published_at": "2007-12-31T19:00:00-05:00",
"manually_sorted": true,
"options": [
{
"name": "Title"
}
]
},
{
"product_type": "Cult Products",
"handle": "ipod-touch",
"created_at": "2018-09-26T14:05:13-04:00",
"body_html": "<p>The iPod Touch has the iPhone's multi-touch interface, with a physical home button off the touch screen. The home screen has a list of buttons for the available applications.</p>",
"title": "IPod Touch 8GB",
"template_suffix": null,
"updated_at": "2018-09-26T14:05:13-04:00",
"id": 921728736,
"tags": null,
"vendor": "Apple",
"published_at": "2018-09-26T14:05:13-04:00",
"manually_sorted": true
}
]
}

0 comments on commit 8905f90

Please sign in to comment.