Last active
December 14, 2015 07:49
-
-
Save litch/5053398 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SpeakersController < ApplicationController | |
load_and_authorize_resource :event | |
load_and_authorize_resource :speaker, through: [:event], shallow: true #the array here could only be the single symbol but since i almost always wind up adding more, i just start with it | |
before_filter :new_speaker, :only => [:new, :create] | |
respond_to :html | |
def index | |
end | |
def show | |
end | |
def new | |
end | |
def edit | |
end | |
def create | |
@event.speakers.new(speakers_params) | |
@speaker.save | |
respond_with @speaker | |
end | |
def update | |
@speaker.update_attributes(speakers_params) | |
respond_with @speaker | |
end | |
private | |
def new_speaker | |
@speaker = Speaker.new | |
end | |
def speakers_params | |
params.require(:speaker).permit(:name, :title, :bio, :event_id) | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spec_helper' | |
describe SpeakersController do | |
before :each do | |
@event = create :event | |
@speaker = create :speaker, event: @event | |
login_admin | |
end | |
describe "before filters" do | |
it "finds the speaker" do | |
speaker = mock_model(Speaker) | |
Speaker.should_receive(:find).and_return(speaker) | |
controller.send(:find_speaker).should == speaker | |
end | |
it "assigns new speaker" do | |
controller.send(:new_speaker).should be_a_new(Speaker) | |
end | |
it "finds the event" do | |
event = mock_model(Event) | |
Event.should_receive(:find).and_return(event) | |
controller.send(:find_event).should == event | |
end | |
end | |
describe "GET index" do | |
it "assigns all speakers for event" do | |
get :index, event_id: @event.id | |
assigns(:speakers).should eq([@speaker]) | |
end | |
end | |
describe "GET show" do | |
it "assigns the speaker" do | |
get :show, event_id: @event.id, id: @speaker.id | |
assigns(:speaker).should eq(@speaker) | |
end | |
end | |
describe "GET new" do | |
it "assigns a new speaker" do | |
get :new, event_id: @event.id | |
assigns(:speaker).should be_a_new(Speaker) | |
end | |
end | |
describe "GET edit" do | |
it "assigns the speaker" do | |
get :edit, event_id: @event.id, id: @speaker.id | |
assigns(:speaker).should eq(@speaker) | |
end | |
end | |
describe "POST create" do | |
describe "with valid params" do | |
it "creates a new speaker" do | |
expect { | |
post :create, event_id: @event.id, speaker: FactoryGirl.attributes_for(:speaker) | |
}.to change(Speaker, :count).by(1) | |
end | |
it "redirects to the created speaker page" do | |
post :create, event_id: @event.id, speaker: FactoryGirl.attributes_for(:speaker) | |
response.should be_redirect | |
end | |
end | |
describe "with invalid params" do | |
it "does not save speaker" do | |
expect { | |
post :create, event_id: @event.id, speaker: {name: ''} | |
}.to_not change(Speaker, :count).by(1) | |
end | |
it "renders the 'new' template" do | |
post :create, event_id: @event.id, speaker: {name: ''} | |
response.should render_template :new | |
end | |
end | |
end | |
describe "PUT update" do | |
describe "with valid params" do | |
it "updates the speaker" do | |
Speaker.any_instance.should_receive(:update_attributes).and_return(true) | |
put :update, event_id: @event.id, id: @speaker.id, speaker: FactoryGirl.attributes_for(:speaker) | |
end | |
it "redirects to the speaker page" do | |
put :update, event_id: @event.id, id: @speaker.id, speaker: FactoryGirl.attributes_for(:speaker) | |
response.should be_redirect | |
end | |
end | |
describe "with invalid params" do | |
it "does not update the speaker" do | |
Speaker.any_instance.should_receive(:update_attributes).and_return(false) | |
put :update, event_id: @event.id, id: @speaker.id, speaker: {name: ''} | |
end | |
it "re-renders the 'edit' template" do | |
put :update, event_id: @event.id, id: @speaker.id, speaker: {name: ''} | |
response.should render_template :edit | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment