diff --git a/engines/dfc_provider/app/services/quantitative_value_builder.rb b/engines/dfc_provider/app/services/quantitative_value_builder.rb index 31401a3369..10896578b5 100644 --- a/engines/dfc_provider/app/services/quantitative_value_builder.rb +++ b/engines/dfc_provider/app/services/quantitative_value_builder.rb @@ -11,7 +11,7 @@ class QuantitativeValueBuilder < DfcBuilder def self.quantity(variant) DataFoodConsortium::Connector::QuantitativeValue.new( - unit: unit(variant.product.variant_unit), + unit: unit(variant.variant_unit), value: variant.unit_value, ) end @@ -27,7 +27,7 @@ class QuantitativeValueBuilder < DfcBuilder end end - def self.apply(quantity, product) + def self.apply(quantity, variant) measure, unit_name, unit_scale = map_unit(quantity.unit) value = quantity.value.to_f * unit_scale @@ -37,10 +37,10 @@ class QuantitativeValueBuilder < DfcBuilder value = 1 end - product.variant_unit = measure - product.variant_unit_name = unit_name if measure == "items" - product.variant_unit_scale = unit_scale - product.unit_value = value + variant.variant_unit = measure + variant.variant_unit_name = unit_name if measure == "items" + variant.variant_unit_scale = unit_scale + variant.unit_value = value end # Map DFC units to OFN fields: diff --git a/engines/dfc_provider/app/services/supplied_product_builder.rb b/engines/dfc_provider/app/services/supplied_product_builder.rb index 4eb488c4f2..8707ce04b0 100644 --- a/engines/dfc_provider/app/services/supplied_product_builder.rb +++ b/engines/dfc_provider/app/services/supplied_product_builder.rb @@ -96,8 +96,7 @@ class SuppliedProductBuilder < DfcBuilder variant.display_name = supplied_product.name variant.primary_taxon = taxon(supplied_product) - QuantitativeValueBuilder.apply(supplied_product.quantity, variant.product) - variant.unit_value = variant.product.unit_value + QuantitativeValueBuilder.apply(supplied_product.quantity, variant) catalog_item = supplied_product&.catalogItems&.first offer = catalog_item&.offers&.first diff --git a/engines/dfc_provider/spec/services/quantitative_value_builder_spec.rb b/engines/dfc_provider/spec/services/quantitative_value_builder_spec.rb index f18a58b561..04783becfa 100644 --- a/engines/dfc_provider/spec/services/quantitative_value_builder_spec.rb +++ b/engines/dfc_provider/spec/services/quantitative_value_builder_spec.rb @@ -4,12 +4,11 @@ require_relative "../spec_helper" RSpec.describe QuantitativeValueBuilder do subject(:builder) { described_class } - let(:variant) { build(:variant, product:) } - let(:product) { build(:product, name: "Apple") } + let(:variant) { build(:variant) } describe ".quantity" do it "recognises items" do - product.variant_unit = "item" + variant.variant_unit = "item" variant.unit_value = 1 quantity = builder.quantity(variant) @@ -18,7 +17,7 @@ RSpec.describe QuantitativeValueBuilder do end it "recognises volume" do - product.variant_unit = "volume" + variant.variant_unit = "volume" variant.unit_value = 2 quantity = builder.quantity(variant) @@ -27,7 +26,7 @@ RSpec.describe QuantitativeValueBuilder do end it "recognises weight" do - product.variant_unit = "weight" + variant.variant_unit = "weight" variant.unit_value = 1000 # 1kg quantity = builder.quantity(variant) @@ -36,7 +35,7 @@ RSpec.describe QuantitativeValueBuilder do end it "falls back to items" do - product.variant_unit = nil + variant.variant_unit = nil quantity = builder.quantity(variant) expect(quantity.value).to eq 1.0 @@ -46,7 +45,7 @@ RSpec.describe QuantitativeValueBuilder do describe ".apply" do let(:quantity_unit) { DfcLoader.connector.MEASURES } - let(:product) { Spree::Product.new } + let(:variant) { Spree::Variant.new } it "uses items for anything unknown" do quantity = DataFoodConsortium::Connector::QuantitativeValue.new( @@ -54,12 +53,12 @@ RSpec.describe QuantitativeValueBuilder do value: 3, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "items" - expect(product.variant_unit_name).to eq "Jar" - expect(product.variant_unit_scale).to eq 1 - expect(product.unit_value).to eq 3 + expect(variant.variant_unit).to eq "items" + expect(variant.variant_unit_name).to eq "Jar" + expect(variant.variant_unit_scale).to eq 1 + expect(variant.unit_value).to eq 3 end it "knows metric units" do @@ -68,12 +67,12 @@ RSpec.describe QuantitativeValueBuilder do value: 2, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "volume" - expect(product.variant_unit_name).to eq nil - expect(product.variant_unit_scale).to eq 1 - expect(product.unit_value).to eq 2 + expect(variant.variant_unit).to eq "volume" + expect(variant.variant_unit_name).to eq nil + expect(variant.variant_unit_scale).to eq 1 + expect(variant.unit_value).to eq 2 end it "knows metric units with a scale in OFN" do @@ -82,12 +81,12 @@ RSpec.describe QuantitativeValueBuilder do value: 4, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "weight" - expect(product.variant_unit_name).to eq nil - expect(product.variant_unit_scale).to eq 1_000 - expect(product.unit_value).to eq 4_000 + expect(variant.variant_unit).to eq "weight" + expect(variant.variant_unit_name).to eq nil + expect(variant.variant_unit_scale).to eq 1_000 + expect(variant.unit_value).to eq 4_000 end it "knows metric units with a small scale" do @@ -96,12 +95,12 @@ RSpec.describe QuantitativeValueBuilder do value: 5, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "weight" - expect(product.variant_unit_name).to eq nil - expect(product.variant_unit_scale).to eq 0.001 - expect(product.unit_value).to eq 0.005 + expect(variant.variant_unit).to eq "weight" + expect(variant.variant_unit_name).to eq nil + expect(variant.variant_unit_scale).to eq 0.001 + expect(variant.unit_value).to eq 0.005 end it "interpretes values given as a string" do @@ -110,12 +109,12 @@ RSpec.describe QuantitativeValueBuilder do value: "0.4", ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "weight" - expect(product.variant_unit_name).to eq nil - expect(product.variant_unit_scale).to eq 1_000 - expect(product.unit_value).to eq 400 + expect(variant.variant_unit).to eq "weight" + expect(variant.variant_unit_name).to eq nil + expect(variant.variant_unit_scale).to eq 1_000 + expect(variant.unit_value).to eq 400 end it "knows imperial units" do @@ -124,12 +123,12 @@ RSpec.describe QuantitativeValueBuilder do value: 10, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "weight" - expect(product.variant_unit_name).to eq nil - expect(product.variant_unit_scale).to eq 453.59237 - expect(product.unit_value).to eq 4_535.9237 + expect(variant.variant_unit).to eq "weight" + expect(variant.variant_unit_name).to eq nil + expect(variant.variant_unit_scale).to eq 453.59237 + expect(variant.unit_value).to eq 4_535.9237 end it "knows customary units" do @@ -138,12 +137,12 @@ RSpec.describe QuantitativeValueBuilder do value: 2, ) - builder.apply(quantity, product) + builder.apply(quantity, variant) - expect(product.variant_unit).to eq "items" - expect(product.variant_unit_name).to eq "dozen" - expect(product.variant_unit_scale).to eq 12 - expect(product.unit_value).to eq 24 + expect(variant.variant_unit).to eq "items" + expect(variant.variant_unit_name).to eq "dozen" + expect(variant.variant_unit_scale).to eq 12 + expect(variant.unit_value).to eq 24 end end end