Files
openfoodnetwork/spec/services/order_workflow_spec.rb
Matt-Yorkley 91908a0e4c Switch from state_machine to state_machines gem
The old version is completely unmaintained and does not work with Rails 4.2
2020-11-27 14:00:28 +00:00

57 lines
1.7 KiB
Ruby

require "spec_helper"
describe OrderWorkflow do
let!(:distributor) { create(:distributor_enterprise) }
let!(:order) do
create(:order_with_totals_and_distribution, distributor: distributor,
bill_address: create(:address),
ship_address: create(:address),
payments: [create(:payment)])
end
let(:service) { described_class.new(order) }
it "transitions the order multiple steps" do
expect(order.state).to eq("cart")
service.complete
order.reload
expect(order.state).to eq("complete")
end
describe "transition from delivery" do
let!(:shipping_method_a) { create(:shipping_method, distributors: [distributor]) }
let!(:shipping_method_b) { create(:shipping_method, distributors: [distributor]) }
let!(:shipping_method_c) { create(:shipping_method, distributors: [distributor]) }
before do
# Create shipping rates for available shipping methods.
order.shipments.each(&:refresh_rates)
end
it "retains delivery method of the order" do
order.select_shipping_method(shipping_method_b.id)
service.complete
order.reload
expect(order.shipping_method).to eq(shipping_method_b)
end
end
context "when raising on error" do
it "transitions the order multiple steps" do
service.complete!
order.reload
expect(order.state).to eq("complete")
end
context "when order cannot advance to the next state" do
let!(:order) do
create(:order, distributor: distributor)
end
it "raises error" do
expect { service.complete! }.to raise_error(StateMachines::InvalidTransition)
end
end
end
end