diff --git a/app/controllers/admin/standing_orders_controller.rb b/app/controllers/admin/standing_orders_controller.rb index 28303e9f4f..2975bc7525 100644 --- a/app/controllers/admin/standing_orders_controller.rb +++ b/app/controllers/admin/standing_orders_controller.rb @@ -1,3 +1,5 @@ +require 'open_food_network/permissions' + module Admin class StandingOrdersController < ResourceController before_filter :load_shop, only: [:new] @@ -13,6 +15,13 @@ module Admin failure: lambda { render json: { errors: json_errors }, status: :unprocessable_entity } } } + def index + respond_to do |format| + format.html + format.json { render_as_json @collection, ams_prefix: params[:ams_prefix] } + end + end + def new @standing_order.shop = @shop @customers = Customer.of(@shop) @@ -23,8 +32,18 @@ module Admin private + def permissions + return @permissions unless @permissions.nil? + @permissions = OpenFoodNetwork::Permissions.new(spree_current_user) + end + def collection - StandingOrder.where("1=0") + if request.format.json? + permissions.editable_standing_orders.ransack(params[:q]).result + .preload([:shop,:customer,:payment_method,:shipping_method]) + else + StandingOrder.where("1=0") + end end def load_shop diff --git a/spec/controllers/admin/standing_orders_controller_spec.rb b/spec/controllers/admin/standing_orders_controller_spec.rb index 2a53560351..14816863c9 100644 --- a/spec/controllers/admin/standing_orders_controller_spec.rb +++ b/spec/controllers/admin/standing_orders_controller_spec.rb @@ -3,18 +3,19 @@ require 'spec_helper' describe Admin::StandingOrdersController, type: :controller do include AuthenticationWorkflow - describe 'index' do + let!(:user) { create(:user) } + let!(:shop) { create(:distributor_enterprise) } + let!(:standing_order) { create(:standing_order, shop: shop) } + + before do + allow(controller).to receive(:spree_current_user) { user } + end + context 'html' do let(:params) { { format: :html } } - context 'as an regular user' do - let!(:user) { create(:user) } - - before do - allow(controller).to receive(:spree_current_user) { user } - end - + context 'as a regular user' do it 'renders the index page' do spree_get :index, params expect(response).to redirect_to spree.unauthorized_path @@ -22,16 +23,34 @@ describe Admin::StandingOrdersController, type: :controller do end context 'as an enterprise user' do - let!(:user) { create(:user) } - let!(:enterprise) { create(:enterprise, owner: user) } + before { shop.update_attributes(owner: user) } - before do - allow(controller).to receive(:spree_current_user) { user } - end - - it 'renders the index page' do + it 'renders the index page without loading any data' do spree_get :index, params expect(response).to render_template 'index' + expect(assigns(:collection)).to eq [] + end + end + end + + context 'json' do + let(:params) { { format: :json } } + + context 'as a regular user' do + it 'renders the index page' do + spree_get :index, params + expect(response).to redirect_to spree.unauthorized_path + end + end + + context 'as an enterprise user' do + before { shop.update_attributes(owner: user) } + + it 'renders the collection as json' do + spree_get :index, params + json_response = JSON.parse(response.body) + expect(json_response.count).to be 1 + expect(json_response[0]['id']).to eq standing_order.id end end end