From d414122efde096d8fba443312590a6300eca80bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 18:35:32 +0200 Subject: [PATCH 01/19] Rename check_entreprise to set_entreprise --- .../app/controllers/dfc_provider/api/base_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb index 92b9bf0f73..922f48c307 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb @@ -8,7 +8,7 @@ module DfcProvider before_action :check_authorization, :check_user, - :check_enterprise + :set_enterprise respond_to :json @@ -26,7 +26,7 @@ module DfcProvider head :unauthorized end - def check_enterprise + def set_enterprise current_enterprise end From 7ad6e1b76a57d0ba66d90a07bd750a7adb94d690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 18:36:00 +0200 Subject: [PATCH 02/19] Remove brakets for describe in specs --- .../dfc_provider/api/catalog_items_controller_spec.rb | 4 ++-- .../spec/controllers/dfc_provider/api/enterprises_spec.rb | 2 +- .../controllers/dfc_provider/api/persons_controller_spec.rb | 2 +- .../dfc_provider/api/supplied_products_controller_spec.rb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) 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 c3637b0f1e..2a7179352a 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 @@ -10,7 +10,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do let!(:product) { create(:simple_product, supplier: enterprise ) } let!(:variant) { product.variants.first } - describe('.index') do + describe '.index' do context 'with authorization token' do before do request.headers['Authorization'] = 'Bearer 123456.abcdef.123456' @@ -100,7 +100,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do end end - describe('.show') do + describe '.show' do context 'with authorization token' do before do request.headers['Authorization'] = 'Bearer 123456.abcdef.123456' diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb index 27cb0b6311..ff5d92fbf2 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb @@ -9,7 +9,7 @@ describe DfcProvider::Api::EnterprisesController, type: :controller do let!(:enterprise) { create(:distributor_enterprise, owner: user) } let!(:product) { create(:simple_product, supplier: enterprise ) } - describe('.show') do + describe '.show' do context 'with authorization token' do before do request.headers['Authorization'] = 'Bearer 123456.abcdef.123456' diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb index 617c6d08ec..74ee134fec 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb @@ -7,7 +7,7 @@ describe DfcProvider::Api::PersonsController, type: :controller do let!(:user) { create(:user) } - describe('.show') do + describe '.show' do context 'with authorization token' do before do request.headers['Authorization'] = 'Bearer 123456.abcdef.123456' 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 98bee69055..77f03e01d3 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 @@ -10,7 +10,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do let!(:product) { create(:simple_product, supplier: enterprise ) } let!(:variant) { product.variants.first } - describe('.show') do + describe '.show' do context 'with authorization token' do before do request.headers['Authorization'] = 'Bearer 123456.abcdef.123456' From 11f1f6cff1cfc78b6a2e4f0d46648f3f0a10b5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 20:12:41 +0200 Subject: [PATCH 03/19] Add more onliner before in specs --- .../dfc_provider/api/catalog_items_controller_spec.rb | 10 +++------- .../dfc_provider/api/persons_controller_spec.rb | 5 +---- .../api/supplied_products_controller_spec.rb | 7 ++----- 3 files changed, 6 insertions(+), 16 deletions(-) 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 2a7179352a..4dfa947ef1 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 @@ -116,9 +116,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do context 'with an enterprise' do context 'given with an id' do before do - api_get :show, - enterprise_id: enterprise.id, - id: variant.id + api_get :show, enterprise_id: enterprise.id, id: variant.id end it 'is successful' do @@ -126,10 +124,8 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do end it 'renders the required content' do - expect(response.body) - .to include('dfc:CatalogItem') - expect(response.body) - .to include("offers/#{variant.id}") + expect(response.body).to include('dfc:CatalogItem') + expect(response.body).to include("offers/#{variant.id}") end end diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb index 74ee134fec..f8d147ed79 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb @@ -21,10 +21,7 @@ describe DfcProvider::Api::PersonsController, type: :controller do end context 'given with an accessible id' do - before do - api_get :show, - id: user.id - end + before { api_get :show, id: user.id } it 'is successful' do expect(response.status).to eq 200 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 77f03e01d3..1053174a3b 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 @@ -26,9 +26,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do context 'with an enterprise' do context 'given with an id' do before do - api_get :show, - enterprise_id: 'default', - id: variant.id + api_get :show, enterprise_id: 'default', id: variant.id end it 'is successful' do @@ -36,8 +34,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do end it 'renders the required content' do - expect(response.body) - .to include(variant.name) + expect(response.body).to include(variant.name) end end From 779241db7a5e92a365e98b93c52105cd451f5fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 20:21:45 +0200 Subject: [PATCH 04/19] Improve documentation --- engines/dfc_provider/README.md | 2 ++ .../controllers/dfc_provider/api/catalog_items_controller.rb | 1 + .../dfc_provider/api/supplied_products_controller.rb | 1 + 3 files changed, 4 insertions(+) diff --git a/engines/dfc_provider/README.md b/engines/dfc_provider/README.md index 8e73633c46..22fd5c018a 100644 --- a/engines/dfc_provider/README.md +++ b/engines/dfc_provider/README.md @@ -8,3 +8,5 @@ Basically, it allows an OFN user linked to an enterprise: * to be authenticated thanks to an Access Token from DFC Authorization server (using an OIDC implementation) The API endpoint for the catalog is `/api/dfc_provider/enterprise/prodcuts.json` and you need to pass the token inside an authentication header (`Authentication: Bearer 123mytoken456`). + +This feature is still under active development. \ No newline at end of file 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 f701fc471d..8e2e0944a0 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 @@ -1,6 +1,7 @@ # frozen_string_literal: true # Controller used to provide the API products for the DFC application +# CatalogItems are items that are being sold by the entreprise. module DfcProvider module Api class CatalogItemsController < DfcProvider::Api::BaseController 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 ee1d273879..c3f9e85b6a 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 @@ -1,6 +1,7 @@ # frozen_string_literal: true # Controller used to provide the SuppliedProducts API for the DFC application +# SuppliedProducts are products that are managed by an entrerprise. module DfcProvider module Api class SuppliedProductsController < DfcProvider::Api::BaseController From bf4bb854b1390318cbadd225ebf76a116cbeef35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 20:32:10 +0200 Subject: [PATCH 05/19] Change offeres_to to offers_to for method naming --- .../app/serializers/dfc_provider/offer_serializer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb index bcb67376ae..298f62608c 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb @@ -6,7 +6,7 @@ module DfcProvider class OfferSerializer < ActiveModel::Serializer attribute :id, key: '@id' attribute :type, key: '@type' - attribute :offeres_to, key: 'dfc:offeres_to' + attribute :offers_to, key: 'dfc:offers_to' attribute :price, key: 'dfc:price' attribute :stock_limitation, key: 'dfc:stockLimitation' @@ -18,7 +18,7 @@ module DfcProvider 'dfc:Offer' end - def offeres_to + def offers_to { '@type' => '@id', '@id' => nil From e86b6443f2bd3e791242febc0854bed1b755ff04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Sun, 11 Oct 2020 21:28:32 +0200 Subject: [PATCH 06/19] Add a comment to explain nesting on catalog_item --- .../controllers/dfc_provider/api/catalog_items_controller.rb | 4 ++++ 1 file changed, 4 insertions(+) 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 8e2e0944a0..9fe5b63821 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 @@ -6,6 +6,10 @@ module DfcProvider module Api class CatalogItemsController < DfcProvider::Api::BaseController def index + # CatalogItem is nested into an entreprise which is also nested into + # an user on the DFC specifications, as defined here: + # https://datafoodconsortium.gitbook.io/dfc-standard-documentation + # /technical-specification/api-examples render json: current_user, serializer: DfcProvider::PersonSerializer end From 7ff69d5e6d85e57531af60a0fb6d63a70867e2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 12:32:57 +0100 Subject: [PATCH 07/19] Fix entreprise missing issue on Persons controller --- .../dfc_provider/api/base_controller.rb | 9 ++++++--- .../api/catalog_items_controller_spec.rb | 14 +++++++------- .../dfc_provider/api/enterprises_spec.rb | 4 ++-- .../dfc_provider/api/persons_controller_spec.rb | 4 ++-- .../api/supplied_products_controller_spec.rb | 6 +++--- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb index 922f48c307..edc8e3adaa 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb @@ -32,10 +32,13 @@ module DfcProvider def current_enterprise @current_enterprise ||= - if params[enterprise_id_param_name] == 'default' - current_user.enterprises.first! + case params[enterprise_id_param_name] + when 'default' + return current_user.enterprises.first! + when nil + return nil else - current_user.enterprises.find(params[enterprise_id_param_name]) + return current_user.enterprises.find(params[enterprise_id_param_name]) end end 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 4dfa947ef1..88581ed555 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 @@ -29,7 +29,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do before { api_get :index, enterprise_id: 'default' } it 'is successful' do - expect(response.status).to eq 200 + expect(response).to be_success end it 'renders the required content' do @@ -47,7 +47,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do it 'returns not_found head' do api_get :index, enterprise_id: enterprise.id - expect(response.status).to eq 404 + expect(response).to be_not_found end end end @@ -75,7 +75,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do it 'is not found' do api_get :index, enterprise_id: 'default' - expect(response.status).to eq 404 + expect(response).to be_not_found end end end @@ -87,7 +87,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do .and_return(nil) api_get :index, enterprise_id: 'default' - expect(response.status).to eq 401 + expect(response.response_code).to eq(401) end end end @@ -95,7 +95,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do context 'without an authorization token' do it 'returns unprocessable_entity head' do api_get :index, enterprise_id: enterprise.id - expect(response.status).to eq 422 + expect(response).to be_unprocessable end end end @@ -120,7 +120,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do end it 'is successful' do - expect(response.status).to eq 200 + expect(response).to be_success end it 'renders the required content' do @@ -137,7 +137,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do end it 'is not found' do - expect(response.status).to eq 404 + expect(response).to be_not_found end end end diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb index ff5d92fbf2..89444c2de4 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb @@ -27,7 +27,7 @@ describe DfcProvider::Api::EnterprisesController, type: :controller do before { api_get :show, id: 'default' } it 'is successful' do - expect(response.status).to eq 200 + expect(response).to be_success end it 'renders the required content' do @@ -44,7 +44,7 @@ describe DfcProvider::Api::EnterprisesController, type: :controller do before { api_get :show, id: 999 } it 'is not found' do - expect(response.status).to eq 404 + expect(response).to be_not_found end end end diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb index f8d147ed79..d461f1394f 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb @@ -24,7 +24,7 @@ describe DfcProvider::Api::PersonsController, type: :controller do before { api_get :show, id: user.id } it 'is successful' do - expect(response.status).to eq 200 + expect(response).to be_success end it 'renders the required content' do @@ -36,7 +36,7 @@ describe DfcProvider::Api::PersonsController, type: :controller do before { api_get :show, id: create(:user).id } it 'is not found' do - expect(response.status).to eq 404 + expect(response).to be_not_found end 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 1053174a3b..e0cc386b14 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 @@ -30,7 +30,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do end it 'is successful' do - expect(response.status).to eq 200 + expect(response).to be_success end it 'renders the required content' do @@ -39,10 +39,10 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do end context 'given with a wrong id' do - before { api_get :show, id: 999 } + before { api_get :show, enterprise_id: 'default', id: 999 } it 'is not found' do - expect(response.status).to eq 404 + expect(response).to be_not_found end end end From a87c46843c9e71a75f7e93b34baee24d6525c34b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 14:27:16 +0100 Subject: [PATCH 08/19] Factorize serializer code into Base inherited class --- .../dfc_provider/address_serializer.rb | 2 +- .../serializers/dfc_provider/base_serializer.rb | 17 +++++++++++++++++ .../dfc_provider/catalog_item_serializer.rb | 8 ++------ .../dfc_provider/enterprise_serializer.rb | 8 +------- .../dfc_provider/offer_serializer.rb | 2 +- .../dfc_provider/person_serializer.rb | 8 +------- .../dfc_provider/supplied_product_serializer.rb | 6 +----- 7 files changed, 24 insertions(+), 27 deletions(-) create mode 100644 engines/dfc_provider/app/serializers/dfc_provider/base_serializer.rb diff --git a/engines/dfc_provider/app/serializers/dfc_provider/address_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/address_serializer.rb index 3d99938d6e..a8ca6ea24e 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/address_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/address_serializer.rb @@ -3,7 +3,7 @@ # Serializer used to render the DFC Address from an OFN User # into JSON-LD format based on DFC ontology module DfcProvider - class AddressSerializer < ActiveModel::Serializer + class AddressSerializer < BaseSerializer attribute :type, key: '@type' attribute :city, key: 'dfc:city' attribute :country, key: 'dfc:country' diff --git a/engines/dfc_provider/app/serializers/dfc_provider/base_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/base_serializer.rb new file mode 100644 index 0000000000..02394a8813 --- /dev/null +++ b/engines/dfc_provider/app/serializers/dfc_provider/base_serializer.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Serializer used to render the DFC Address from an OFN User +# into JSON-LD format based on DFC ontology +module DfcProvider + class BaseSerializer < ActiveModel::Serializer + private + + def host + Rails.application.routes.default_url_options[:host] + end + + def dfc_provider_routes + DfcProvider::Engine.routes.url_helpers + end + end +end diff --git a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb index 12038e8ffc..5b29991c97 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb @@ -3,7 +3,7 @@ # Serializer used to render a DFC CatalogItem from an OFN Product # into JSON-LD format based on DFC ontology module DfcProvider - class CatalogItemSerializer < ActiveModel::Serializer + class CatalogItemSerializer < BaseSerializer attribute :id, key: '@id' attribute :type, key: '@type' attribute :references, key: 'dfc:references' @@ -17,7 +17,7 @@ module DfcProvider dfc_provider_routes.api_dfc_provider_enterprise_catalog_item_url( enterprise_id: object.product.supplier_id, id: object.id, - host: root_url + host: host ) end @@ -47,9 +47,5 @@ module DfcProvider host: root_url ) end - - def dfc_provider_routes - DfcProvider::Engine.routes.url_helpers - 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 ada1069a20..23e892c5aa 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb @@ -3,7 +3,7 @@ # Serializer used to render a DFC Enterprise from an OFN Enterprise # into JSON-LD format based on DFC ontology module DfcProvider - class EnterpriseSerializer < ActiveModel::Serializer + class EnterpriseSerializer < BaseSerializer attribute :id, key: '@id' attribute :type, key: '@type' attribute :vat_number, key: 'dfc:VATnumber' @@ -43,11 +43,5 @@ module DfcProvider joins(product: :supplier). where('enterprises.id' => object.id) end - - private - - def dfc_provider_routes - DfcProvider::Engine.routes.url_helpers - end end end diff --git a/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb index 298f62608c..bf5c5daafe 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/offer_serializer.rb @@ -3,7 +3,7 @@ # Serializer used to render the DFC Offer from an OFN Product # into JSON-LD format based on DFC ontology module DfcProvider - class OfferSerializer < ActiveModel::Serializer + class OfferSerializer < BaseSerializer attribute :id, key: '@id' attribute :type, key: '@type' attribute :offers_to, key: 'dfc:offers_to' diff --git a/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb index 8ee3df99c0..fee950c095 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb @@ -3,7 +3,7 @@ # Serializer used to render the DFC Person from an OFN User # into JSON-LD format based on DFC ontology module DfcProvider - class PersonSerializer < ActiveModel::Serializer + class PersonSerializer < BaseSerializer attribute :context, key: '@context' attribute :id, key: '@id' attribute :type, key: '@type' @@ -45,11 +45,5 @@ module DfcProvider def affiliates object.enterprises end - - private - - def dfc_provider_routes - DfcProvider::Engine.routes.url_helpers - end end end 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 1ebf34e843..070d69746f 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 @@ -3,7 +3,7 @@ # 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 + class SuppliedProductSerializer < BaseSerializer attribute :id, key: '@id' attribute :type, key: '@type' attribute :unit, key: 'dfc:hasUnit' @@ -64,9 +64,5 @@ module DfcProvider def unit_name object.unit_description.presence || 'piece' end - - def dfc_provider_routes - DfcProvider::Engine.routes.url_helpers - end end end From 4dc07d987213c913849cfa7f2d602fa255cc9e51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 14:28:33 +0100 Subject: [PATCH 09/19] Add spec for CatalogItem serializer --- .../dfc_provider/catalog_item_serializer.rb | 4 +- .../catalog_item_serializer_spec.rb | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb diff --git a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb index 5b29991c97..c6555d1612 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb @@ -28,7 +28,7 @@ module DfcProvider def references { '@type' => '@id', - '@id' => "/supplied_products/#{object.product_id}" + '@id' => reference_id } end @@ -44,7 +44,7 @@ module DfcProvider dfc_provider_routes.api_dfc_provider_enterprise_supplied_product_url( enterprise_id: object.product.supplier_id, id: object.product_id, - host: root_url + host: host ) end end diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb new file mode 100644 index 0000000000..987e48ffd7 --- /dev/null +++ b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe DfcProvider::CatalogItemSerializer do + let!(:product) { create(:simple_product ) } + let!(:variant) { product.variants.first } + + subject { described_class.new(variant) } + + describe '#id' do + it 'returns the expected value' do + expect(subject.id).to eq( + DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_catalog_item_url( + enterprise_id: product.supplier_id, + id: variant.id, + host: 'http://test.host' + ) + ) + end + end + + describe '#references' do + it 'returns the expected value' do + expect(subject.references).to eq( + { + "@id" => + DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( + enterprise_id: product.supplier_id, + id: product.id, + host: 'http://test.host' + ), + "@type" => "@id" + } + ) + end + end +end From 235a2574dcaddbd0b0b69a462a7f9960c944e571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 14:38:46 +0100 Subject: [PATCH 10/19] Add spec for SuppliedProduct serializer --- .../dfc_provider/enterprise_serializer.rb | 2 +- .../dfc_provider/person_serializer.rb | 2 +- .../supplied_product_serializer.rb | 2 +- .../supplied_product_serializer_spec.rb | 33 +++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb 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 23e892c5aa..00d5b72676 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb @@ -18,7 +18,7 @@ module DfcProvider def id dfc_provider_routes.api_dfc_provider_enterprise_url( id: object.id, - host: root_url + host: host ) end diff --git a/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb index fee950c095..bbf0877349 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/person_serializer.rb @@ -28,7 +28,7 @@ module DfcProvider def id dfc_provider_routes.api_dfc_provider_person_url( id: object.id, - host: root_url + host: host ) end 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 070d69746f..0613db72fb 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 @@ -20,7 +20,7 @@ module DfcProvider dfc_provider_routes.api_dfc_provider_enterprise_supplied_product_url( enterprise_id: object.product.supplier_id, id: object.id, - host: root_url + host: host ) end diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb new file mode 100644 index 0000000000..bf09daf5ff --- /dev/null +++ b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe DfcProvider::SuppliedProductSerializer do + let!(:product) { create(:simple_product ) } + let!(:variant) { product.variants.first } + + subject { described_class.new(variant) } + + describe '#id' do + it 'returns the expected value' do + expect(subject.id).to eq( + DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( + enterprise_id: product.supplier_id, + id: variant.id, + host: 'http://test.host' + ) + ) + end + end + + describe '#unit' do + it 'returns the rdfs label value' do + expect(subject.unit).to eq( + { + '@id' => '/unit/piece', + 'rdfs:label' => 'piece' + } + ) + end + end +end From 1ef724731136b55d01ab476d6f50f002725819a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 15:07:09 +0100 Subject: [PATCH 11/19] Use a service to fetch variants in the engine --- .../api/catalog_items_controller.rb | 5 +---- .../api/supplied_products_controller.rb | 5 +---- .../dfc_provider/enterprise_serializer.rb | 8 ++------ .../services/dfc_provider/variant_fetcher.rb | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 engines/dfc_provider/app/services/dfc_provider/variant_fetcher.rb 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 9fe5b63821..c98d0b6ce1 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 @@ -21,10 +21,7 @@ module DfcProvider def variant @variant ||= - Spree::Variant. - joins(product: :supplier). - where('enterprises.id' => current_enterprise.id). - find(params[:id]) + DfcProvider::VariantFetcher.new(current_enterprise).scope.find(params[:id]) 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 c3f9e85b6a..3e62ba85d5 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 @@ -13,10 +13,7 @@ module DfcProvider def variant @variant ||= - Spree::Variant. - joins(product: :supplier). - where('enterprises.id' => current_enterprise.id). - find(params[:id]) + DfcProvider::VariantFetcher.new(current_enterprise).scope.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 00d5b72676..19ad8fe19e 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/enterprise_serializer.rb @@ -33,15 +33,11 @@ module DfcProvider end def supplies - Spree::Variant. - joins(product: :supplier). - where('enterprises.id' => object.id) + DfcProvider::VariantFetcher.new(object).scope end def manages - Spree::Variant. - joins(product: :supplier). - where('enterprises.id' => object.id) + DfcProvider::VariantFetcher.new(object).scope end end end diff --git a/engines/dfc_provider/app/services/dfc_provider/variant_fetcher.rb b/engines/dfc_provider/app/services/dfc_provider/variant_fetcher.rb new file mode 100644 index 0000000000..5ccb95b17a --- /dev/null +++ b/engines/dfc_provider/app/services/dfc_provider/variant_fetcher.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Service used to fetch variants related to an entreprise. +# It improves maintenance as it is the central point requesting +# Spree::Varaint inside the DfcProvider engine. +module DfcProvider + class VariantFetcher + def initialize(enterprise) + @enterprise = enterprise + end + + def scope + Spree::Variant. + joins(product: :supplier). + where('enterprises.id' => @enterprise.id) + end + end +end From 7918c2f37c4b03aa29f8ea4b268dd22c7b1d9212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 25 Nov 2020 22:12:09 +0100 Subject: [PATCH 12/19] Cosmetics --- .../dfc_provider/catalog_item_serializer_spec.rb | 16 +++++++--------- .../supplied_product_serializer_spec.rb | 6 ++---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb index 987e48ffd7..a6afc69a4b 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb @@ -23,15 +23,13 @@ describe DfcProvider::CatalogItemSerializer do describe '#references' do it 'returns the expected value' do expect(subject.references).to eq( - { - "@id" => - DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( - enterprise_id: product.supplier_id, - id: product.id, - host: 'http://test.host' - ), - "@type" => "@id" - } + "@id" => + DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( + enterprise_id: product.supplier_id, + id: product.id, + host: 'http://test.host' + ), + "@type" => "@id" ) end end diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb index bf09daf5ff..5ecc9f07c5 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb @@ -23,10 +23,8 @@ describe DfcProvider::SuppliedProductSerializer do describe '#unit' do it 'returns the rdfs label value' do expect(subject.unit).to eq( - { - '@id' => '/unit/piece', - 'rdfs:label' => 'piece' - } + '@id' => '/unit/piece', + 'rdfs:label' => 'piece' ) end end From bcd2790649e7b3478e19994efb3b1a9aaea1b7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 17 Jun 2021 09:18:05 +0200 Subject: [PATCH 13/19] Fix failing spec --- .../app/controllers/dfc_provider/api/persons_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb index e4c1468785..3b1caed832 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb @@ -4,7 +4,7 @@ module DfcProvider module Api class PersonsController < DfcProvider::Api::BaseController - skip_before_action :check_enterprise + skip_before_action :set_enterprise before_action :check_user_accessibility From 7f0c5b8a7a6fff711db7a922dc553d1c7766455a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 17 Jun 2021 09:43:17 +0200 Subject: [PATCH 14/19] Fix controller specs with be_successful --- .../dfc_provider/api/catalog_items_controller_spec.rb | 4 ++-- .../spec/controllers/dfc_provider/api/enterprises_spec.rb | 2 +- .../controllers/dfc_provider/api/persons_controller_spec.rb | 2 +- .../dfc_provider/api/supplied_products_controller_spec.rb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) 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 88581ed555..29558dd00a 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 @@ -29,7 +29,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do before { api_get :index, enterprise_id: 'default' } it 'is successful' do - expect(response).to be_success + expect(response).to be_successful end it 'renders the required content' do @@ -120,7 +120,7 @@ describe DfcProvider::Api::CatalogItemsController, type: :controller do end it 'is successful' do - expect(response).to be_success + expect(response).to be_successful end it 'renders the required content' do diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb index 89444c2de4..04c5003e3d 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/enterprises_spec.rb @@ -27,7 +27,7 @@ describe DfcProvider::Api::EnterprisesController, type: :controller do before { api_get :show, id: 'default' } it 'is successful' do - expect(response).to be_success + expect(response).to be_successful end it 'renders the required content' do diff --git a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb index d461f1394f..81498c1f46 100644 --- a/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb +++ b/engines/dfc_provider/spec/controllers/dfc_provider/api/persons_controller_spec.rb @@ -24,7 +24,7 @@ describe DfcProvider::Api::PersonsController, type: :controller do before { api_get :show, id: user.id } it 'is successful' do - expect(response).to be_success + expect(response).to be_successful end it 'renders the required content' do 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 e0cc386b14..b739ae2176 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 @@ -30,7 +30,7 @@ describe DfcProvider::Api::SuppliedProductsController, type: :controller do end it 'is successful' do - expect(response).to be_success + expect(response).to be_successful end it 'renders the required content' do From 06c19641b4dba7b705adf0a573eb47350af1bb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Mon, 21 Jun 2021 22:52:33 +0200 Subject: [PATCH 15/19] Remove return on case --- .../app/controllers/dfc_provider/api/base_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb index edc8e3adaa..3117d66447 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb @@ -34,11 +34,11 @@ module DfcProvider @current_enterprise ||= case params[enterprise_id_param_name] when 'default' - return current_user.enterprises.first! + current_user.enterprises.first! when nil - return nil + nil else - return current_user.enterprises.find(params[enterprise_id_param_name]) + current_user.enterprises.find(params[enterprise_id_param_name]) end end From 9d1b059835db1bda702ff7cf0f36fbbbf1ee7ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 14 Jul 2021 14:08:09 +0200 Subject: [PATCH 16/19] Fix typo in supplied_products_controller comment --- .../dfc_provider/api/supplied_products_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3e62ba85d5..5620901e6b 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 @@ -1,7 +1,7 @@ # frozen_string_literal: true # Controller used to provide the SuppliedProducts API for the DFC application -# SuppliedProducts are products that are managed by an entrerprise. +# SuppliedProducts are products that are managed by an enterprise. module DfcProvider module Api class SuppliedProductsController < DfcProvider::Api::BaseController From 155d05265d6b9dc61122519b88761de8aaa87440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 14 Jul 2021 14:24:10 +0200 Subject: [PATCH 17/19] Use manually generated values to test urls --- .../catalog_item_serializer_spec.rb | 35 ++++++++++++------- .../supplied_product_serializer_spec.rb | 18 ++++++---- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb index a6afc69a4b..d8257ff2f5 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb @@ -9,26 +9,35 @@ describe DfcProvider::CatalogItemSerializer do subject { described_class.new(variant) } describe '#id' do + let(:catalog_item_id) { + [ + 'http://test.host/api/dfc_provider', + 'enterprises', + product.supplier_id, + 'catalog_items', + variant.id + ].join('/') + } + it 'returns the expected value' do - expect(subject.id).to eq( - DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_catalog_item_url( - enterprise_id: product.supplier_id, - id: variant.id, - host: 'http://test.host' - ) - ) + expect(subject.id).to eq(catalog_item_id) end end describe '#references' do + let(:supplied_product_id) { + [ + 'http://test.host/api/dfc_provider', + 'enterprises', + product.supplier_id, + 'supplied_products', + product.id + ].join('/') + } + it 'returns the expected value' do expect(subject.references).to eq( - "@id" => - DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( - enterprise_id: product.supplier_id, - id: product.id, - host: 'http://test.host' - ), + "@id" => supplied_product_id, "@type" => "@id" ) end diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb index 5ecc9f07c5..b3eabab9a7 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb @@ -9,14 +9,18 @@ describe DfcProvider::SuppliedProductSerializer do subject { described_class.new(variant) } describe '#id' do + let(:supplied_product_id) { + [ + 'http://test.host/api/dfc_provider', + 'enterprises', + product.supplier_id, + 'supplied_products', + product.id + ].join('/') + } + it 'returns the expected value' do - expect(subject.id).to eq( - DfcProvider::Engine.routes.url_helpers.api_dfc_provider_enterprise_supplied_product_url( - enterprise_id: product.supplier_id, - id: variant.id, - host: 'http://test.host' - ) - ) + expect(subject.id).to eq(supplied_product_id) end end From c4a7c05c0534e2e2018b0003d5580d1a97454531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 14 Jul 2021 14:59:19 +0200 Subject: [PATCH 18/19] Use check_enterprise filter in a better way --- .../controllers/dfc_provider/api/base_controller.rb | 11 +++++------ .../dfc_provider/api/catalog_items_controller.rb | 2 ++ .../dfc_provider/api/enterprises_controller.rb | 2 ++ .../dfc_provider/api/persons_controller.rb | 2 -- .../dfc_provider/api/supplied_products_controller.rb | 2 ++ 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb index 3117d66447..7ff59bdb0a 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb @@ -7,8 +7,7 @@ module DfcProvider rescue_from ActiveRecord::RecordNotFound, with: :not_found before_action :check_authorization, - :check_user, - :set_enterprise + :check_user respond_to :json @@ -26,8 +25,10 @@ module DfcProvider head :unauthorized end - def set_enterprise - current_enterprise + def check_enterprise + return if current_enterprise.present? + + not_found end def current_enterprise @@ -35,8 +36,6 @@ module DfcProvider case params[enterprise_id_param_name] when 'default' current_user.enterprises.first! - when nil - nil else current_user.enterprises.find(params[enterprise_id_param_name]) end 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 c98d0b6ce1..9d4419d84f 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 @@ -5,6 +5,8 @@ module DfcProvider module Api class CatalogItemsController < DfcProvider::Api::BaseController + before_action :check_enterprise + def index # CatalogItem is nested into an entreprise which is also nested into # an user on the DFC specifications, as defined here: diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/enterprises_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/enterprises_controller.rb index 91cba677bb..f68ffc3087 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/enterprises_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/enterprises_controller.rb @@ -4,6 +4,8 @@ module DfcProvider module Api class EnterprisesController < DfcProvider::Api::BaseController + before_action :check_enterprise + def show render json: current_enterprise, serializer: DfcProvider::EnterpriseSerializer end diff --git a/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb index 3b1caed832..82b00b11f9 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/api/persons_controller.rb @@ -4,8 +4,6 @@ module DfcProvider module Api class PersonsController < DfcProvider::Api::BaseController - skip_before_action :set_enterprise - before_action :check_user_accessibility def show 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 5620901e6b..c711017c13 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,6 +5,8 @@ module DfcProvider module Api class SuppliedProductsController < DfcProvider::Api::BaseController + before_action :check_enterprise + def show render json: variant, serializer: DfcProvider::SuppliedProductSerializer end From 39bb25e9590b1f86759f3e0c334cc6aa61970f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 15 Jul 2021 20:42:22 +0200 Subject: [PATCH 19/19] Adjust supplied_products id before better data matching --- .../app/serializers/dfc_provider/catalog_item_serializer.rb | 2 +- .../serializers/dfc_provider/catalog_item_serializer_spec.rb | 2 +- .../dfc_provider/supplied_product_serializer_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb index c6555d1612..a91a3b51ca 100644 --- a/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb +++ b/engines/dfc_provider/app/serializers/dfc_provider/catalog_item_serializer.rb @@ -43,7 +43,7 @@ module DfcProvider def reference_id dfc_provider_routes.api_dfc_provider_enterprise_supplied_product_url( enterprise_id: object.product.supplier_id, - id: object.product_id, + id: object.id, host: host ) end diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb index d8257ff2f5..83f392b77d 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/catalog_item_serializer_spec.rb @@ -31,7 +31,7 @@ describe DfcProvider::CatalogItemSerializer do 'enterprises', product.supplier_id, 'supplied_products', - product.id + variant.id ].join('/') } diff --git a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb index b3eabab9a7..8f5c348d04 100644 --- a/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb +++ b/engines/dfc_provider/spec/serializers/dfc_provider/supplied_product_serializer_spec.rb @@ -15,7 +15,7 @@ describe DfcProvider::SuppliedProductSerializer do 'enterprises', product.supplier_id, 'supplied_products', - product.id + variant.id ].join('/') }