require 'spec_helper' module FinePrint describe ContractsController do routes { FinePrint::Engine.routes } before do setup_controller_spec @contract = FactoryGirl.create(:contract) @contract.reload end it "won't get index unless authorized" do get :index, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path sign_in @user get :index, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path end it 'must get index if authorized' do sign_in @admin get :index, :use_route => :fine_print assert_response :success end it "won't get new unless authorized" do get :new, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path sign_in @user get :new, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path end it 'must get new if authorized' do sign_in @admin get :new, :use_route => :fine_print assert_response :success end it "won't create unless authorized" do attributes = Hash.new attributes[:name] = 'some_name' attributes[:title] = 'Some title' attributes[:content] = 'Some content' post :create, :contract => attributes, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(assigns(:contract)).to be_nil sign_in @user post :create, :contract => attributes, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(assigns(:contract)).to be_nil end it 'must create if authorized' do sign_in @admin attributes = Hash.new attributes[:name] = 'some_name' attributes[:title] = 'Some title' attributes[:content] = 'Some content' post :create, :contract => attributes, :use_route => :fine_print assert_redirected_to assigns(:contract) expect(assigns(:contract).errors).to be_empty expect(assigns(:contract).name).to eq 'some_name' expect(assigns(:contract).title).to eq 'Some title' expect(assigns(:contract).content).to eq 'Some content' end it "won't edit unless authorized" do get :edit, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path sign_in @user get :edit, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path end it 'must edit if authorized' do sign_in @admin get :edit, :id => @contract.id, :use_route => :fine_print assert_response :success end it "won't update unless authorized" do attributes = Hash.new attributes[:name] = 'some_name' attributes[:title] = 'Some title' attributes[:content] = 'Some content' name = @contract.name title = @contract.title content = @contract.content put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(@contract.errors).not_to be_empty @contract.reload expect(@contract.name).to eq name expect(@contract.title).to eq title expect(@contract.content).to eq content sign_in @user put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(@contract.errors).not_to be_empty @contract.reload expect(@contract.name).to eq name expect(@contract.title).to eq title expect(@contract.content).to eq content end it 'must update if authorized' do attributes = Hash.new attributes[:name] = 'some_name' attributes[:title] = 'Some title' attributes[:content] = 'Some content' sign_in @admin put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print assert_redirected_to @contract @contract.reload expect(@contract.errors).to be_empty expect(@contract.name).to eq 'some_name' expect(@contract.title).to eq 'Some title' expect(@contract.content).to eq 'Some content' end it "won't destroy unless authorized" do delete :destroy, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(Contract.find(@contract.id)).to eq @contract sign_in @user delete :destroy, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(Contract.find(@contract.id)).to eq @contract end it 'must destroy if authorized' do sign_in @admin delete :destroy, :id => @contract.id, :use_route => :fine_print assert_redirected_to contracts_path expect(Contract.find_by_id(@contract.id)).to be_nil end it "won't publish unless authorized" do expect(@contract.is_published?).to eq false put :publish, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path @contract.reload expect(@contract.is_published?).to eq false sign_in @user put :publish, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path @contract.reload expect(@contract.is_published?).to eq false end it 'must publish if authorized' do expect(@contract.is_published?).to eq false sign_in @admin put :publish, :id => @contract.id, :use_route => :fine_print assert_redirected_to contracts_path @contract.reload expect(@contract.is_published?).to eq true end it "won't unpublish unless authorized" do @contract.publish expect(@contract.is_published?).to eq true put :unpublish, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path @contract.reload expect(@contract.is_published?).to eq true sign_in @user put :unpublish, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path @contract.reload expect(@contract.is_published?).to eq true end it 'must unpublish if authorized' do @contract.publish expect(@contract.is_published?).to eq true sign_in @admin put :unpublish, :id => @contract.id, :use_route => :fine_print assert_redirected_to contracts_path @contract.reload expect(@contract.is_published?).to eq false end it "won't new_version unless authorized" do @contract.publish expect(@contract.is_published?).to eq true put :new_version, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(assigns(:contract)).to be_nil sign_in @user put :new_version, :id => @contract.id, :use_route => :fine_print assert_redirected_to FinePrint.redirect_path expect(assigns(:contract)).to be_nil end it 'must new_version if authorized' do @contract.publish expect(@contract.is_published?).to eq true sign_in @admin put :new_version, :id => @contract.id, :use_route => :fine_print assert_response :success expect(assigns(:contract)).not_to be_nil end end end