Overriding enterprises index action to use AMS for json requests, and prevent collection loading for html requests

This commit is contained in:
Rob Harrington
2015-06-04 12:03:02 +08:00
parent a8b6f2942a
commit c311bcdca7
2 changed files with 39 additions and 1 deletions

View File

@@ -2,7 +2,7 @@ require 'open_food_network/referer_parser'
module Admin
class EnterprisesController < ResourceController
before_filter :load_enterprise_set, :only => :index
# before_filter :load_enterprise_set, :only => :index
before_filter :load_countries, :except => [:index, :set_sells, :check_permalink]
before_filter :load_methods_and_fees, :only => [:new, :edit, :update, :create]
before_filter :load_groups, :only => [:new, :edit, :update, :create]
@@ -23,6 +23,15 @@ module Admin
include ActionView::Helpers::TextHelper
include OrderCyclesHelper
def index
respond_to do |format|
format.html
format.json do
render json: @collection, each_serializer: Api::Admin::BasicEnterpriseSerializer
end
end
end
def set_sells
enterprise = Enterprise.find_by_permalink(params[:id]) || Enterprise.find(params[:id])
attributes = { sells: params[:sells] }
@@ -112,6 +121,9 @@ module Admin
coordinator = Enterprise.find_by_id(params[:coordinator_id]) if params[:coordinator_id]
order_cycle = OrderCycle.new(coordinator: coordinator) if order_cycle.nil? && coordinator.present?
return OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, order_cycle).visible_enterprises
when :index
return Enterprise.where("1=0") unless json_request?
OpenFoodNetwork::Permissions.new(spree_current_user).editable_enterprises
else
# TODO was ordered with is_distributor DESC as well, not sure why or how we want to sort this now
OpenFoodNetwork::Permissions.new(spree_current_user).

View File

@@ -449,5 +449,31 @@ module Admin
end
end
end
describe "index" do
let!(:user) { create_enterprise_user(enterprise_limit: 10) }
let!(:enterprise1) { create(:enterprise, sells: 'any', owner: user) }
let!(:enterprise2) { create(:enterprise, sells: 'own', owner: user) }
let!(:enterprise3) { create(:enterprise, sells: 'any', owner: create_enterprise_user ) }
before do
controller.stub spree_current_user: user
end
context "html" do
it "returns an empty @collection" do
spree_get :index, format: :html
expect(assigns(:collection)).to eq []
end
end
context "json" do
it "scopes @collection to enterprises editable by the user" do
spree_get :index, format: :json
expect(assigns(:collection)).to include enterprise1, enterprise2
expect(assigns(:collection)).to_not include enterprise3
end
end
end
end
end