# encoding: UTF-8 require 'spec_helper' describe Admin::SuppliersController do before :each do @administrator = Administrator.find_by_email('administrator@qwaiter.com') || Administrator.create(email: 'administrator@qwaiter.com', password: 'secret') sign_in @administrator end describe "GET #index" do it "populates an array of suppliers" do supplier = create :supplier get :index assigns(:suppliers).should eq([supplier]) end it "should render without errors when no objects are present" do get :index expect{ render_template :index }.not_to raise_error end it "renders the :index view" do get :index response.should render_template :index end end describe "GET #show" do it "assigns the requested supplier to @supplier" do supplier = create :supplier get :show, id: supplier assigns(:supplier).should eq(supplier) end it "renders the #show view" do supplier = create :supplier get :show, id: supplier response.should render_template :show end end describe "GET #new" do it "assigns a new supplier to @supplier" do get :new assigns(:supplier).should be_a Supplier end it "renders the #show view" do get :new response.should render_template :new end end describe "POST #create" do context "with valid attributes" do it "creates a new supplier" do expect{ post :create, supplier: attributes_for(:supplier) }.to change(Supplier, :count).by(1) end it "redirects to the new supplier" do post :create, supplier: attributes_for(:supplier) response.should redirect_to [:admin, Supplier.last] end end context "with invalid attributes" do it "does not save the new supplier" do expect{ post :create, supplier: {} }.to_not change(Supplier, :count) end it "re-renders the new method" do post :create, supplier: {} response.should render_template :new end end end describe 'PUT update' do before :each do @supplier = create :supplier end context "valid attributes" do it "located the requested supplier" do put :update, id: @supplier, supplier: attributes_for(:supplier) @supplier.reload assigns(:supplier).should eq(@supplier) end it "changes @supplier's attributes" do put :update, id: @supplier, supplier: attributes_for(:supplier, name: "ChangedByTest") @supplier.reload @supplier.name.should eq("ChangedByTest") end it "redirects to the updated supplier" do put :update, id: @supplier, supplier: attributes_for(:supplier) response.should redirect_to [:admin, @supplier] end end context "invalid attributes" do it "locates the requested supplier" do put :update, id: @supplier, supplier: {name: ''} assigns(:supplier).should eq(@supplier) end it "re-renders the edit method" do put :update, id: @supplier, supplier: {name: ''} response.should render_template :edit end end end describe 'DELETE destroy' do before :each do @supplier = create :supplier end it "deletes the supplier" do expect{ delete :destroy, id: @supplier }.to change(Supplier, :count).by(-1) end it "redirects to suppliers#index" do delete :destroy, id: @supplier response.should redirect_to [:admin, :suppliers] end end end