mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-10 23:07:47 +00:00
When there's an out of stock product in the cart, visiting the shopfront returns user to the cart
This commit is contained in:
@@ -5,6 +5,8 @@ class EnterprisesController < BaseController
|
||||
|
||||
# These prepended filters are in the reverse order of execution
|
||||
prepend_before_filter :set_order_cycles, :require_distributor_chosen, :reset_order, only: :shop
|
||||
before_filter :check_stock_levels, only: :shop
|
||||
|
||||
before_filter :clean_permalink, only: :check_permalink
|
||||
|
||||
respond_to :js, only: :permalink_checker
|
||||
@@ -21,17 +23,25 @@ class EnterprisesController < BaseController
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def clean_permalink
|
||||
params[:permalink] = params[:permalink].parameterize
|
||||
end
|
||||
|
||||
def check_stock_levels
|
||||
if current_order(true).insufficient_stock_lines.present?
|
||||
flash[:error] = t(:spree_inventory_error_flash_for_insufficient_quantity)
|
||||
redirect_to spree.cart_path
|
||||
end
|
||||
end
|
||||
|
||||
def reset_order
|
||||
distributor = Enterprise.is_distributor.find_by_permalink(params[:id]) || Enterprise.is_distributor.find(params[:id])
|
||||
order = current_order(true)
|
||||
|
||||
if order.distributor and order.distributor != distributor
|
||||
if order.distributor && order.distributor != distributor
|
||||
order.empty!
|
||||
order.set_order_cycle! nil
|
||||
end
|
||||
|
||||
@@ -2,13 +2,14 @@ require 'spec_helper'
|
||||
|
||||
describe EnterprisesController do
|
||||
describe "shopping for a distributor" do
|
||||
let(:order) { controller.current_order(true) }
|
||||
|
||||
before(:each) do
|
||||
@current_distributor = create(:distributor_enterprise, with_payment_and_shipping: true)
|
||||
@distributor = create(:distributor_enterprise, with_payment_and_shipping: true)
|
||||
@order_cycle1 = create(:simple_order_cycle, distributors: [@distributor], orders_open_at: 2.days.ago, orders_close_at: 3.days.from_now )
|
||||
@order_cycle2 = create(:simple_order_cycle, distributors: [@distributor], orders_open_at: 3.days.ago, orders_close_at: 4.days.from_now )
|
||||
controller.current_order(true).distributor = @current_distributor
|
||||
order.set_distributor! @current_distributor
|
||||
end
|
||||
|
||||
it "sets the shop as the distributor on the order when shopping for the distributor" do
|
||||
@@ -52,6 +53,27 @@ describe EnterprisesController do
|
||||
controller.current_order.line_items.size.should == 1
|
||||
end
|
||||
|
||||
describe "when an out of stock item is in the cart" do
|
||||
let(:variant) { create(:variant, on_demand: false, on_hand: 10) }
|
||||
let(:line_item) { create(:line_item, variant: variant) }
|
||||
let(:order_cycle) { create(:simple_order_cycle, distributors: [@distributor], variants: [variant]) }
|
||||
|
||||
before do
|
||||
order.set_distribution! @current_distributor, order_cycle
|
||||
order.line_items << line_item
|
||||
|
||||
Spree::Config.set allow_backorders: false
|
||||
variant.on_hand = 0
|
||||
variant.save!
|
||||
end
|
||||
|
||||
it "redirects to the cart" do
|
||||
spree_get :shop, {id: @current_distributor}
|
||||
|
||||
response.should redirect_to spree.cart_path
|
||||
end
|
||||
end
|
||||
|
||||
it "sets order cycle if only one is available at the chosen distributor" do
|
||||
@order_cycle2.destroy
|
||||
|
||||
|
||||
@@ -69,17 +69,6 @@ describe ShopController do
|
||||
end
|
||||
|
||||
|
||||
describe "producers/suppliers" do
|
||||
let(:supplier) { create(:supplier_enterprise) }
|
||||
let(:product) { create(:product, supplier: supplier) }
|
||||
let(:order_cycle) { create(:simple_order_cycle, distributors: [distributor]) }
|
||||
|
||||
before do
|
||||
exchange = order_cycle.exchanges.to_enterprises(distributor).outgoing.first
|
||||
exchange.variants << product.master
|
||||
end
|
||||
end
|
||||
|
||||
describe "returning products" do
|
||||
let(:order_cycle) { create(:simple_order_cycle, distributors: [distributor]) }
|
||||
let(:exchange) { order_cycle.exchanges.to_enterprises(distributor).outgoing.first }
|
||||
|
||||
Reference in New Issue
Block a user