Files
openfoodnetwork/spec/services/fdc_offer_broker_spec.rb
2025-01-07 11:03:34 +11:00

62 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe FdcOfferBroker do
subject { FdcOfferBroker.new(catalog) }
let(:catalog) {
VCR.use_cassette(:fdc_catalog) {
DfcCatalog.load(user, catalog_url)
}
}
let(:catalog_url) {
"https://env-0105831.jcloud-ver-jpe.ik-server.com/api/dfc/Enterprises/test-hodmedod/SuppliedProducts"
}
let(:product_link) {
"https://env-0105831.jcloud-ver-jpe.ik-server.com/api/dfc/Enterprises/test-hodmedod/SuppliedProducts/44519466467635"
}
let(:user) { build(:testdfc_user) }
let(:product) {
catalog.products.first
}
describe ".best_offer" do
it "finds a linked wholesale offer" do
solution = subject.best_offer(product.semanticId)
# These values depend on the test data but are a good sanity check:
expect(product.name).to eq "Baked British Beans - Retail can, 400g (can)"
expect(solution.product.name).to eq "Baked British Beans - Case, 12 x 400g (can)"
expect(solution.factor).to eq 12
expect(solution.offer.offeredItem).to eq solution.product
end
it "falls back to the original product offer" do
solution = subject.best_offer(product.semanticId)
fallback_solution = subject.best_offer(solution.product.semanticId)
# These values depend on the test data but are a good sanity check:
expect(fallback_solution.product.name).to eq "Baked British Beans - Case, 12 x 400g (can)"
expect(fallback_solution.factor).to eq 1
expect(fallback_solution.offer.offeredItem).to eq fallback_solution.product
end
end
describe ".wholesale_to_retail" do
it "finds a linked retail offer" do
offer_solution = subject.best_offer(product.semanticId)
retail_solution = subject.wholesale_to_retail(offer_solution.product.semanticId)
expect(retail_solution.retail_product_id).to eq product.semanticId
expect(retail_solution.factor).to eq 12
end
it "falls back to the wholesale product id" do
retail_solution = subject.wholesale_to_retail(product.semanticId)
expect(retail_solution.retail_product_id).to eq product.semanticId
expect(retail_solution.factor).to eq 1
end
end
end