Skip to content

Commit b4eed42

Browse files
Test Estimator#coordinator_options integration
This commit ensures that the simple coordinator and a custom estimator work when custom coordinator options are passed in. Co-authored-by: Noah Silvera <[email protected]>
1 parent 2ccef90 commit b4eed42

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

core/app/models/spree/stock/estimator.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ def shipping_rates(package, frontend_only = true)
2929

3030
private
3131

32+
attr_reader :coordinator_options
33+
3234
def choose_default_shipping_rate(shipping_rates)
3335
unless shipping_rates.empty?
3436
default_shipping_rate = Spree::Config.shipping_rate_selector_class.new(shipping_rates).find_default

core/spec/models/spree/stock/simple_coordinator_integration_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,40 @@
233233
end
234234
end
235235
end
236+
237+
describe "passing custom coordinator options" do
238+
subject {
239+
Spree::Stock::SimpleCoordinator.new(order, coordinator_options:)
240+
}
241+
242+
let(:coordinator_options) { {arbitrary_shipping_rates: [my_shipping_rate]} }
243+
let(:order) { create :order_with_line_items }
244+
let(:my_shipping_rate) { create(:shipping_method).shipping_rates.new }
245+
246+
it "uses coordinator options passed in to the simple coordinator to the stock estimator" do
247+
MyEstimator = Class.new(Spree::Stock::Estimator) do
248+
def shipping_rates(package, _frontend_only = true)
249+
raise ShipmentRequired if package.shipment.nil?
250+
raise OrderRequired if package.shipment.order.nil?
251+
252+
first_shipping_rate = coordinator_options[:arbitrary_shipping_rates]&.first
253+
254+
if first_shipping_rate
255+
first_shipping_rate.selected = true
256+
return [first_shipping_rate]
257+
else
258+
raise StandardError, "no shipping rate!"
259+
end
260+
end
261+
end
262+
263+
original_estimator_class = Spree::Config.stock.estimator_class.to_s
264+
Spree::Config.stock.estimator_class = MyEstimator.to_s
265+
266+
expect(subject.shipments.first.selected_shipping_rate)
267+
.to eq my_shipping_rate
268+
ensure
269+
Spree::Config.stock.estimator_class = original_estimator_class
270+
end
271+
end
236272
end

0 commit comments

Comments
 (0)