Browse Source

Add support for Publication APIs

Add support for the Publication, ProductPublication, and CollectionPublication resources.
Jamie Dwyer 6 years ago
parent
commit
1720f3b36f

+ 1 - 0
.gitignore

@@ -6,5 +6,6 @@ doc
 pkg
 .ruby-version
 *.lock
+*.gem
 .idea
 .dev/

+ 10 - 0
lib/shopify_api/resources/collection_publication.rb

@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+module ShopifyAPI
+  class CollectionPublication < Base
+    init_prefix :publication
+
+    def publication_id
+      @prefix_options[:publication_id]
+    end
+  end
+end

+ 10 - 0
lib/shopify_api/resources/product_publication.rb

@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+module ShopifyAPI
+  class ProductPublication < Base
+    init_prefix :publication
+
+    def publication_id
+      @prefix_options[:publication_id]
+    end
+  end
+end

+ 5 - 0
lib/shopify_api/resources/publication.rb

@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+module ShopifyAPI
+  class Publication < Base
+  end
+end

+ 40 - 0
test/collection_publication_test.rb

@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+require 'test_helper'
+
+class CollectionPublicationTest < Test::Unit::TestCase
+  def test_get_all_collection_publications
+    fake 'publications/55650051/collection_publications', body: load_fixture('collection_publications')
+    collection_publications = ShopifyAPI::CollectionPublication.find(:all, params: { publication_id: 55650051 })
+
+    assert_equal 96062799894, collection_publications.first.id
+    assert_equal 55650051, collection_publications.first.publication_id
+  end
+
+  def test_get_collection_publication
+    fake 'publications/55650051/collection_publications/647162527768', body: load_fixture('collection_publication')
+    collection_publication = ShopifyAPI::CollectionPublication.find(647162527768, params: { publication_id: 55650051 })
+
+    assert_equal 96062799894, collection_publication.id
+    assert_equal 55650051, collection_publication.publication_id
+  end
+
+  def test_create_collection_publication
+    fake 'publications/55650051/collection_publications', method: :post, body: load_fixture('collection_publication')
+    ShopifyAPI::CollectionPublication.create(
+      publication_id: 55650051,
+      published_at: "2018-01-29T14:06:08-05:00",
+      published: true,
+      collection_id: 8267093571
+    )
+
+    expected_body = {
+      collection_publication: {
+        published_at: "2018-01-29T14:06:08-05:00",
+        published: true,
+        collection_id: 8267093571,
+      },
+    }.to_json
+
+    assert_equal expected_body, FakeWeb.last_request.body
+  end
+end

+ 11 - 0
test/fixtures/collection_publication.json

@@ -0,0 +1,11 @@
+{
+  "collection_publication": {
+    "id": 96062799894,
+    "publication_id": 55650051,
+    "published_at": "2018-09-05T17:22:31-04:00",
+    "published": true,
+    "created_at": "2018-09-05T17:22:31-04:00",
+    "updated_at": "2018-09-14T14:31:19-04:00",
+    "collection_id": 60941828118
+  }
+}

+ 13 - 0
test/fixtures/collection_publications.json

@@ -0,0 +1,13 @@
+{
+  "collection_publications": [
+    {
+        "id": 96062799894,
+        "publication_id": 55650051,
+        "published_at": "2018-09-05T17:22:31-04:00",
+        "published": true,
+        "created_at": "2018-09-05T17:22:31-04:00",
+        "updated_at": "2018-09-14T14:31:19-04:00",
+        "collection_id": 60941828118
+    }
+  ]
+}

+ 11 - 0
test/fixtures/product_publication.json

@@ -0,0 +1,11 @@
+{
+  "product_publication": {
+    "id": 647162527768,
+    "publication_id": 55650051,
+    "published_at": "2018-01-29T14:06:08-05:00",
+    "published": true,
+    "created_at": "2018-01-29T14:06:08-05:00",
+    "updated_at": "2018-09-26T15:39:05-04:00",
+    "product_id": 8267093571
+  }
+}

+ 13 - 0
test/fixtures/product_publications.json

@@ -0,0 +1,13 @@
+{
+  "product_publications": [
+    {
+        "id": 647162527768,
+        "publication_id": 55650051,
+        "published_at": "2018-01-29T14:06:08-05:00",
+        "published": true,
+        "created_at": "2018-01-29T14:06:08-05:00",
+        "updated_at": "2018-09-26T15:39:05-04:00",
+        "product_id": 8267093571
+    }
+  ]
+}

+ 9 - 0
test/fixtures/publications.json

@@ -0,0 +1,9 @@
+{
+  "publications": [
+    {
+      "id": 55650051,
+      "created_at": "2016-05-20T13:12:10-04:00",
+      "name": "Buy Button"
+    }
+  ]
+}

+ 40 - 0
test/product_publication_test.rb

@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+require 'test_helper'
+
+class ProductPublicationTest < Test::Unit::TestCase
+  def test_get_all_product_publications
+    fake 'publications/55650051/product_publications', body: load_fixture('product_publications')
+    product_publications = ShopifyAPI::ProductPublication.find(:all, params: { publication_id: 55650051 })
+
+    assert_equal 647162527768, product_publications.first.id
+    assert_equal 55650051, product_publications.first.publication_id
+  end
+
+  def test_get_product_publication
+    fake 'publications/55650051/product_publications/647162527768', body: load_fixture('product_publication')
+    product_publication = ShopifyAPI::ProductPublication.find(647162527768, params: { publication_id: 55650051 })
+
+    assert_equal 647162527768, product_publication.id
+    assert_equal 55650051, product_publication.publication_id
+  end
+
+  def test_create_product_publication
+    fake 'publications/55650051/product_publications', method: :post, body: load_fixture('product_publication')
+    ShopifyAPI::ProductPublication.create(
+      publication_id: 55650051,
+      published_at: "2018-01-29T14:06:08-05:00",
+      published: true,
+      product_id: 8267093571
+    )
+
+    expected_body = {
+      product_publication: {
+        published_at: "2018-01-29T14:06:08-05:00",
+        published: true,
+        product_id: 8267093571,
+      },
+    }.to_json
+
+    assert_equal expected_body, FakeWeb.last_request.body
+  end
+end

+ 12 - 0
test/publication_test.rb

@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+require 'test_helper'
+
+class PublicationTest < Test::Unit::TestCase
+  def test_find_all_publications
+    fake 'publications'
+    publications = ShopifyAPI::Publication.find(:all)
+
+    assert_equal 55650051, publications.first.id
+    assert_equal "Buy Button", publications.first.name
+  end
+end