diff --git a/app/serializers/api/cached_enterprise_serializer.rb b/app/serializers/api/cached_enterprise_serializer.rb index 8fcf9df328..24c16d97b5 100644 --- a/app/serializers/api/cached_enterprise_serializer.rb +++ b/app/serializers/api/cached_enterprise_serializer.rb @@ -74,11 +74,16 @@ class Api::CachedEnterpriseSerializer < ActiveModel::Serializer ids_to_objs options[:data].supplied_taxons[object.id] end - def supplied_properties - # This results in 3 queries per enterprise - product_properties = Spree::Property.applied_by(object) - producer_properties = object.properties + def product_properties + Spree::Property.applied_by(object) + end + def producer_properties + enterprise.properties + end + + # This results in 3 queries per enterprise + def supplied_properties OpenFoodNetwork::PropertyMerge.merge product_properties, producer_properties end @@ -140,4 +145,10 @@ class Api::CachedEnterpriseSerializer < ActiveModel::Serializer } icon_fonts[object.category] end + + private + + def enterprise + object + end end diff --git a/spec/serializers/api/cached_enterprise_serializer_spec.rb b/spec/serializers/api/cached_enterprise_serializer_spec.rb new file mode 100644 index 0000000000..8f500dca57 --- /dev/null +++ b/spec/serializers/api/cached_enterprise_serializer_spec.rb @@ -0,0 +1,29 @@ +require 'spec_helper' + +describe Api::CachedEnterpriseSerializer do + let(:cached_enterprise_serializer) { described_class.new(enterprise) } + let(:enterprise) { create(:enterprise) } + + describe '#product_properties' do + let(:property) { create(:property) } + + before do + product = create(:product, properties: [property]) + enterprise.supplied_products << product + end + + it 'returns the properties of the products supplied by the enterprise' do + expect(cached_enterprise_serializer.product_properties).to eq([property]) + end + end + + describe '#producer_properties' do + let(:property) { create(:property) } + + before { enterprise.properties << property } + + it 'returns the properties of the enterprise' do + expect(cached_enterprise_serializer.producer_properties).to eq([property]) + end + end +end