mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-28 21:07:16 +00:00
146 lines
5.2 KiB
Ruby
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
|