From d5800642e70b82d3f53a310ba6f4be7a78687901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 30 Aug 2020 17:38:53 +0200 Subject: [PATCH] Map DFC SuppliedProduct with OFN Variant --- .../api/catalog_items_controller.rb | 10 +++++++--- .../api/supplied_products_controller.rb | 12 ++++++++++-- .../dfc_provider/enterprise_serializer.rb | 6 +++--- .../dfc_provider/supplied_product_serializer.rb | 4 ++-- .../api/catalog_items_controller_spec.rb | 17 +++++++++-------- .../api/supplied_products_controller_spec.rb | 5 +++-- 6 files changed, 34 insertions(+), 20 deletions(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/catalog_items_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/catalog_items_controller.rb index a581d26813..99cdd9f8ee 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/catalog_items_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/catalog_items_controller.rb @@ -9,13 +9,17 @@ module DfcProvider end def show - @variant = + render json: variant, serializer: DfcProvider::CatalogItemSerializer + end + + private + + def variant + @variant ||= Spree::Variant. joins(product: :supplier). where('enterprises.id' => @enterprise.id). find(params[:id]) - - render json: @variant, serializer: DfcProvider::CatalogItemSerializer end end end diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/supplied_products_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/supplied_products_controller.rb index a078bbe66e..2c4e5c677e 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/supplied_products_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/supplied_products_controller.rb @@ -5,9 +5,17 @@ module DfcProvider module Api class SuppliedProductsController < BaseController def show - @product = @enterprise.supplied_products.find(params[:id]) + render json: variant, serializer: DfcProvider::SuppliedProductSerializer + end - render json: @product, serializer: DfcProvider::SuppliedProductSerializer + private + + def variant + @variant ||= + Spree::Variant. + joins(product: :supplier). + where('enterprises.id' => @enterprise.id). + find(params[:id]) end end end diff --git a/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb index 9d1dd73eb4..ada1069a20 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb @@ -33,9 +33,9 @@ module DfcProvider end def supplies - object. - supplied_products. - includes(variants: :product) + Spree::Variant. + joins(product: :supplier). + where('enterprises.id' => object.id) end def manages diff --git a/engines/dfc_provider/app/serializers/dfc_provider/supplied_product_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/supplied_product_serializer.rb index 8c791dca75..1ebf34e843 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/supplied_product_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/supplied_product_serializer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# Serializer used to render a DFC SuppliedProduct from an OFN Product +# Serializer used to render a DFC SuppliedProduct from an OFN Variant # into JSON-LD format based on DFC ontology module DfcProvider class SuppliedProductSerializer < ActiveModel::Serializer @@ -18,7 +18,7 @@ module DfcProvider def id dfc_provider_routes.api_dfc_provider_enterprise_supplied_product_url( - enterprise_id: object.supplier_id, + enterprise_id: object.product.supplier_id, id: object.id, host: root_url ) diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/catalog_items_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/catalog_items_controller_spec.rb index 797166cf0b..7b5d42865a 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/catalog_items_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/catalog_items_controller_spec.rb @@ -8,6 +8,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do let!(:user) { create(:user) } let!(:enterprise) { create(:distributor_enterprise, owner: user) } let!(:product) { create(:simple_product, supplier: enterprise ) } + let!(:variant) { product.variants.first } describe('.index') do context 'with authorization token' do @@ -33,11 +34,11 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do it 'renders the required content' do expect(response.body) - .to include(product.name) + .to include(variant.name) expect(response.body) - .to include(product.sku) + .to include(variant.sku) expect(response.body) - .to include("offers/#{product.variants.first.id}") + .to include("offers/#{variant.id}") end end @@ -60,11 +61,11 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do it 'renders the required content' do expect(response.body) - .to include(product.name) + .to include(variant.name) expect(response.body) - .to include(product.sku) + .to include(variant.sku) expect(response.body) - .to include("offers/#{product.variants.first.id}") + .to include("offers/#{variant.id}") end end end @@ -117,7 +118,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do before do api_get :show, enterprise_id: enterprise.id, - id: product.variants.first.id + id: variant.id end it 'is successful' do @@ -128,7 +129,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do expect(response.body) .to include('dfc:CatalogItem') expect(response.body) - .to include("offers/#{product.variants.first.id}") + .to include("offers/#{variant.id}") end end diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/supplied_products_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/supplied_products_controller_spec.rb index a4a2c0731e..de594d276d 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/supplied_products_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/supplied_products_controller_spec.rb @@ -8,6 +8,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do let!(:user) { create(:user) } let!(:enterprise) { create(:distributor_enterprise, owner: user) } let!(:product) { create(:simple_product, supplier: enterprise ) } + let!(:variant) { product.variants.first } describe('.show') do context 'with authorization token' do @@ -27,7 +28,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do before do api_get :show, enterprise_id: 'default', - id: product.id + id: variant.id end it 'is successful' do @@ -36,7 +37,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do it 'renders the required content' do expect(response.body) - .to include(product.name) + .to include(variant.name) end end