Add enterprises controller that supercedes suppliers and distributors controllers. Add to cart consumer spec passes.

This commit is contained in:
Rohan Mitchell
2012-10-31 16:47:01 +11:00
parent a8f4178894
commit 9d5c127f0d
11 changed files with 192 additions and 24 deletions

View File

@@ -128,8 +128,8 @@ ul.product-listing {
}
/* Supplier and distributor description */
.supplier-description, .distributor-description {
/* Enterprise description */
.enterprise-description {
margin-bottom: 2em;
}

View File

@@ -11,8 +11,8 @@ class ApplicationController < ActionController::Base
def load_data_for_sidebar
@suppliers = Supplier.all
@distributors = Distributor.with_active_products_on_hand.by_name
@suppliers = Enterprise.is_supplier.all
@distributors = Enterprise.is_distributor.with_distributed_active_products_on_hand.by_name
end
end

View File

@@ -0,0 +1,43 @@
class EnterprisesController < BaseController
def index
@enterprises = Enterprise.all
end
def suppliers
@suppliers = Enterprise.is_supplier
end
def show
options = {:enterprise_id => params[:id]}
options.merge(params.reject { |k,v| k == :id })
@enterprise = Enterprise.find params[:id]
@searcher = Spree::Config.searcher_class.new(options)
@products = @searcher.retrieve_products
end
def select_distributor
distributor = Enterprise.is_distributor.find params[:id]
order = current_order(true)
if order.can_change_distributor?
order.distributor = distributor
order.save!
end
redirect_to distributor
end
def deselect_distributor
order = current_order(true)
if order.can_change_distributor?
order.distributor = nil
order.save!
end
redirect_to root_path
end
end

View File

@@ -0,0 +1,12 @@
- content_for :sidebar do
%div{'data-hook' => "homepage_sidebar_navigation"}
= render 'spree/sidebar'
%h1 Enterprises
= cms_page_content(:content, Cms::Page.find_by_full_path('/enterprises'))
%ul.enterprises
- @enterprises.each do |enterprise|
%li= link_to enterprise.name, enterprise

View File

@@ -0,0 +1,7 @@
%h2= @enterprise.name
.enterprise-description= @enterprise.long_description.andand.html_safe
%h3 Available Now
= render :template => 'spree/products/index'

View File

@@ -0,0 +1,12 @@
- content_for :sidebar do
%div{'data-hook' => "homepage_sidebar_navigation"}
= render 'spree/sidebar'
%h1 Suppliers
= cms_page_content(:content, Cms::Page.find_by_full_path('/enterprises/suppliers'))
%ul.enterprises
- @suppliers.each do |supplier|
%li= link_to supplier.name, supplier

View File

@@ -2,9 +2,9 @@
%h6.filter_name Shop by Supplier
%ul.filter_choices
- @suppliers.each do |supplier|
- if supplier.has_products_on_hand?
- if supplier.has_supplied_products_on_hand?
%li.nowrap= link_to supplier.name, [main_app, supplier]
= button_to 'Browse All Suppliers', main_app.suppliers_path, :method => :get
= button_to 'Browse All Suppliers', main_app.suppliers_enterprises_path, :method => :get
%h6.filter_name Shop by Distributor
%ul.filter_choices
@@ -12,10 +12,10 @@
- @distributors.each do |distributor|
%li.nowrap
- if order.nil? || order.can_change_distributor?
= link_to distributor.name, main_app.select_distributor_path(distributor)
= link_to distributor.name, main_app.select_distributor_enterprise_path(distributor)
- elsif order.distributor == distributor
= link_to distributor.name, [main_app, distributor]
- else
%span.inactive= distributor.name
- if current_distributor && order.can_change_distributor?
= button_to 'Browse All Distributors', main_app.deselect_distributors_path, :method => :get
= button_to 'Browse All Distributors', main_app.deselect_distributor_enterprises_path, :method => :get

View File

@@ -1,7 +1,15 @@
Openfoodweb::Application.routes.draw do
root :to => 'spree/home#index'
resources :enterprises do
get :suppliers, :on => :collection
get :select_distributor, :on => :member
get :deselect_distributor, :on => :collection
end
# Deprecated
resources :suppliers
# Deprecated
resources :distributors do
get :select, :on => :member
get :deselect, :on => :collection
@@ -11,9 +19,12 @@ Openfoodweb::Application.routes.draw do
resources :enterprises do
post :bulk_update, :on => :collection, :as => :bulk_update
end
# Deprecated
resources :distributors do
post :bulk_update, :on => :collection, :as => :bulk_update
end
# Deprecated
resources :suppliers
end

View File

@@ -282,8 +282,8 @@ ActiveRecord::Schema.define(:version => 20121028070200) do
t.string "start_year"
t.string "issue_number"
t.integer "address_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "gateway_customer_profile_id"
t.string "gateway_payment_profile_id"
end

View File

@@ -0,0 +1,83 @@
require 'spec_helper'
require 'spree/core/current_order'
describe EnterprisesController do
include Spree::Core::CurrentOrder
before :each do
stub!(:before_save_new_order)
stub!(:after_save_new_order)
create(:itemwise_shipping_method)
end
it "displays suppliers" do
s = create(:supplier_enterprise)
d = create(:distributor_enterprise)
spree_get :suppliers
assigns(:suppliers).should == [s]
end
it "selects distributors" do
d = create(:distributor_enterprise)
spree_get :select_distributor, :id => d.id
response.should be_redirect
order = current_order(false)
order.distributor.should == d
end
it "deselects distributors" do
d = create(:distributor_enterprise)
order = current_order(true)
order.distributor = d
order.save!
spree_get :deselect_distributor
response.should be_redirect
order.reload
order.distributor.should be_nil
end
context "when a product has been added to the cart" do
it "does not allow selecting another distributor" do
# Given some distributors and an order with a product
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
o = current_order(true)
o.distributor = d1
o.save!
o.add_variant(p.master, 1)
# When I attempt to select a distributor
spree_get :select_distributor, :id => d2.id
# Then my distributor should remain unchanged
o.reload
o.distributor.should == d1
end
it "does not allow deselecting distributors" do
# Given a distributor and an order with a product
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d])
o = current_order(true)
o.distributor = d
o.save!
o.add_variant(p.master, 1)
# When I attempt to deselect the distributor
spree_get :deselect_distributor
# Then my distributor should remain unchanged
o.reload
o.distributor.should == d
end
end
end

View File

@@ -10,8 +10,8 @@ feature %q{
scenario "adding a product to the cart with no distributor chosen" do
# Given a product and some distributors
d1 = create(:distributor)
d2 = create(:distributor)
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
create(:product, :distributors => [d2])
@@ -30,8 +30,8 @@ feature %q{
create(:itemwise_shipping_method)
# Given a product, some distributors and a defined shipping cost
d1 = create(:distributor)
d2 = create(:distributor)
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
create(:product, :distributors => [d2])
p = create(:product, :price => 12.34)
create(:product_distribution, :product => p, :distributor => d1, :shipping_method => create(:shipping_method))
@@ -67,8 +67,8 @@ feature %q{
it "does not allow the user to change distributor after a product has been added to the cart" do
# Given a product and some distributors
d1 = create(:distributor)
d2 = create(:distributor)
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
# When I add a product to my cart (which sets my distributor)
@@ -87,7 +87,7 @@ feature %q{
context "adding a subsequent product to the cart" do
it "does not allow the user to choose a distributor" do
# Given a product under a distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d])
# And a product in my cart
@@ -103,8 +103,8 @@ feature %q{
it "does not allow the user to add a product from another distributor" do
# Given two products, each at a different distributor
d1 = create(:distributor)
d2 = create(:distributor)
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d1])
p2 = create(:product, :distributors => [d2])
@@ -123,7 +123,7 @@ feature %q{
it "adds products with valid distributors" do
# Given two products, each at the same distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d])
p2 = create(:product, :distributors => [d])
@@ -146,7 +146,7 @@ feature %q{
context "group buys" do
scenario "adding a product to the cart for a group buy" do
# Given a group buy product and a distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d], :group_buy => true)
# When I add the item to my cart
@@ -166,7 +166,7 @@ feature %q{
scenario "adding a product with variants to the cart for a group buy" do
# Given a group buy product with variants and a distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d], :group_buy => true)
create(:variant, :product => p)
@@ -187,7 +187,7 @@ feature %q{
scenario "adding a product to cart that is not a group buy does not show max quantity field" do
# Given a group buy product and a distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d], :group_buy => false)
# When I view the add to cart form, there should not be a max quantity field
@@ -198,7 +198,7 @@ feature %q{
scenario "adding a product with a max quantity less than quantity results in max_quantity==quantity" do
# Given a group buy product and a distributor
d = create(:distributor)
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d], :group_buy => true)
# When I add the item to my cart