Files
openfoodnetwork/spec/helpers/order_cycles_helper_spec.rb

146 lines
5.2 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe OrderCyclesHelper do
let(:oc) { double(:order_cycle) }
describe "finding producer enterprise options" do
before do
allow(helper).to receive(:permitted_producer_enterprises_for) { "enterprise list" }
end
it "asks for a validation option list" do
expect(helper).to receive(:validated_enterprise_options).with("enterprise list")
helper.permitted_producer_enterprise_options_for(oc)
end
end
describe "finding coodinator enterprise options" do
before do
allow(helper).to receive(:permitted_coordinating_enterprises_for) { "enterprise list" }
end
it "asks for a validation option list" do
expect(helper).to receive(:validated_enterprise_options).with("enterprise list")
helper.permitted_coordinating_enterprise_options_for(oc)
end
end
describe "finding hub enterprise options" do
before do
allow(helper).to receive(:permitted_hub_enterprises_for) { "enterprise list" }
end
it "asks for a validation option list" do
expect(helper).to receive(:validated_enterprise_options)
.with("enterprise list", shipping_and_payment_methods: true)
helper.permitted_hub_enterprise_options_for(oc)
end
end
describe "building a validated enterprise list" do
let(:e) { create(:distributor_enterprise, name: 'enterprise') }
it "returns enterprises without shipping methods as disabled" do
create(:payment_method, distributors: [e])
expect(helper.__send__(:validated_enterprise_options, [e],
shipping_and_payment_methods: true))
.to eq [['enterprise (no shipping methods)', e.id, { disabled: true }]]
end
it "returns enterprises without payment methods as disabled" do
create(:shipping_method, distributors: [e])
expect(helper.__send__(:validated_enterprise_options, [e],
shipping_and_payment_methods: true))
.to eq [['enterprise (no payment methods)', e.id, { disabled: true }]]
end
it "returns enterprises with unavailable payment methods as disabled" do
create(:shipping_method, distributors: [e])
create(:payment_method, distributors: [e], active: false)
expect(helper.__send__(:validated_enterprise_options, [e],
shipping_and_payment_methods: true))
.to eq [['enterprise (no payment methods)', e.id, { disabled: true }]]
end
it "returns enterprises with neither shipping nor payment methods as disabled" do
expect(helper.__send__(:validated_enterprise_options, [e],
shipping_and_payment_methods: true))
.to eq [['enterprise (no shipping or payment methods)', e.id, { disabled: true }]]
end
end
describe "pickup time" do
it "gives me the pickup time for the current order cycle" do
d = create(:distributor_enterprise, name: 'Green Grass')
oc1 = create(:simple_order_cycle, name: 'oc 1', distributors: [d])
exchange = Exchange.find(oc1.exchanges.to_enterprises(d).outgoing.first.id)
exchange.update_attribute :pickup_time, "turtles"
allow(helper).to receive(:current_order_cycle).and_return oc1
allow(helper).to receive(:current_distributor).and_return d
expect(helper.pickup_time).to eq("turtles")
end
it "gives me the pickup time for any order cycle" do
d = create(:distributor_enterprise, name: 'Green Grass')
oc1 = create(:simple_order_cycle, name: 'oc 1', distributors: [d])
oc2 = create(:simple_order_cycle, name: 'oc 1', distributors: [d])
exchange = Exchange.find(oc2.exchanges.to_enterprises(d).outgoing.first.id)
exchange.update_attribute :pickup_time, "turtles"
allow(helper).to receive(:current_order_cycle).and_return oc1
allow(helper).to receive(:current_distributor).and_return d
expect(helper.pickup_time(oc2)).to eq("turtles")
end
end
describe "distibutors that have editable shipping/payment methods" do
let(:result) {
helper.distributors_with_editable_shipping_and_payment_methods(order_cycle)
}
let(:order_cycle) {
create(
:simple_order_cycle,
coordinator:, suppliers: [supplier], distributors: [hub1, hub2],
)
}
let(:hub1) { create(:distributor_enterprise, name: 'hub1') }
let(:hub2) { create(:distributor_enterprise, name: 'hub2') }
let(:supplier){ create(:supplier_enterprise, name: 'supplier') }
let(:coordinator){ create(:distributor_enterprise, name: 'coordinator') }
context 'current user is a coordinator' do
before do
allow(helper).to receive(:spree_current_user).and_return coordinator.owner
end
it 'returns all distributors' do
expect(result).to match_array [hub1, hub2]
end
end
context 'current user is a producer' do
before do
allow(helper).to receive(:spree_current_user).and_return supplier.owner
end
it "doesn't return any distributors" do
expect(result).to eq []
end
end
context 'current user is a hub' do
before do
allow(helper).to receive(:spree_current_user).and_return hub1.owner
end
it "returns only the hubs of the current user" do
expect(result).to eq [hub1]
end
end
end
end