diff --git a/app/controllers/admin/dfc_product_imports_controller.rb b/app/controllers/admin/dfc_product_imports_controller.rb index ab3b819c4f..c17a428c75 100644 --- a/app/controllers/admin/dfc_product_imports_controller.rb +++ b/app/controllers/admin/dfc_product_imports_controller.rb @@ -20,12 +20,11 @@ module Admin catalog_url = params.require(:catalog_url) broker = FdcOfferBroker.new(spree_current_user, catalog_url) + catalog = DfcCatalog.new(broker.catalog) # * First step: import all products for given enterprise. # * Second step: render table and let user decide which ones to import. - imported = broker.catalog.map do |subject| - next unless subject.is_a? DataFoodConsortium::Connector::SuppliedProduct - + imported = catalog.products.map do |subject| adjust_to_wholesale_price(broker, subject) existing_variant = enterprise.supplied_variants.linked_to(subject.semanticId) diff --git a/app/jobs/stock_sync_job.rb b/app/jobs/stock_sync_job.rb index d4df9c3c61..1572731e0c 100644 --- a/app/jobs/stock_sync_job.rb +++ b/app/jobs/stock_sync_job.rb @@ -62,9 +62,7 @@ class StockSyncJob < ApplicationJob json_catalog = DfcRequest.new(user).call(catalog_id) graph = DfcIo.import(json_catalog) - graph.select do |subject| - subject.is_a? DataFoodConsortium::Connector::SuppliedProduct - end + DfcCatalog.new(graph).products end def linked_variants(enterprises, product_ids) diff --git a/engines/dfc_provider/app/services/dfc_catalog.rb b/engines/dfc_provider/app/services/dfc_catalog.rb new file mode 100644 index 0000000000..ace46a51d0 --- /dev/null +++ b/engines/dfc_provider/app/services/dfc_catalog.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class DfcCatalog + def initialize(graph) + @graph = graph + end + + def products + @products ||= @graph.select do |subject| + subject.is_a? DataFoodConsortium::Connector::SuppliedProduct + end + end +end diff --git a/engines/dfc_provider/spec/services/dfc_catalog_spec.rb b/engines/dfc_provider/spec/services/dfc_catalog_spec.rb new file mode 100644 index 0000000000..c050e9f5d7 --- /dev/null +++ b/engines/dfc_provider/spec/services/dfc_catalog_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require_relative "../spec_helper" + +RSpec.describe DfcCatalog do + subject(:catalog) { DfcCatalog.new(fdc_catalog_graph) } + let(:fdc_catalog_graph) { + VCR.use_cassette(:fdc_catalog) { broker.catalog } + } + let(:broker) { FdcOfferBroker.new(user, catalog_url) } + let(:user) { build(:testdfc_user) } + let(:catalog_url) { + "https://env-0105831.jcloud-ver-jpe.ik-server.com/api/dfc/Enterprises/test-hodmedod/SuppliedProducts" + } + + describe "#products" do + let(:products) { catalog.products } + + it "returns only products" do + expect(products.count).to eq 4 + expect(products.map(&:semanticType).uniq).to eq ["dfc-b:SuppliedProduct"] + end + end +end