Skip to content

Commit

Permalink
remove lots of instance var usages
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelglass committed Jan 3, 2020
1 parent c9703f4 commit f852521
Show file tree
Hide file tree
Showing 28 changed files with 852 additions and 837 deletions.
15 changes: 6 additions & 9 deletions spec/controllers/chapters_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,15 @@

describe '#show' do
let!(:chapter) { create(:chapter) }

before do
@draft_event = create(:event, current_state: :draft, chapter: chapter)
@pending_event = create(:event, current_state: :pending_approval, chapter: chapter)
@published_event = create(:event, chapter: chapter)
end
let!(:draft_event) { create(:event, current_state: :draft, chapter: chapter) }
let!(:pending_event) { create(:event, current_state: :pending_approval, chapter: chapter) }
let!(:published_event) { create(:event, chapter: chapter) }

describe 'as an admin' do
it 'shows all events' do
expect(chapter.events).to match_array([@draft_event, @pending_event, @published_event])
expect(chapter.events).to match_array([draft_event, pending_event, published_event])
get :show, params: { id: chapter.id }
expect(assigns(:chapter_events)).to match_array([@draft_event, @pending_event, @published_event])
expect(assigns(:chapter_events)).to match_array([draft_event, pending_event, published_event])
end
end

Expand All @@ -41,7 +38,7 @@

it 'shows a list of published events' do
get :show, params: { id: chapter.id }
expect(assigns(:chapter_events)).to match_array([@published_event])
expect(assigns(:chapter_events)).to match_array([published_event])
end
end
end
Expand Down
20 changes: 9 additions & 11 deletions spec/controllers/checkiners_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,32 @@
require 'rails_helper'

describe CheckinersController do
before do
@event = create(:event)
@user = create(:user)
end
let(:event) { create(:event) }
let(:user) { create(:user) }

context 'a user that is logged in and is an organizer for a published event' do
before do
@event.organizers << @user
event.organizers << user

sign_in @user
sign_in user
end

it 'can see list of checkiners' do
get :index, params: { event_id: @event.id }
get :index, params: { event_id: event.id }
expect(response).to be_successful
end

describe 'assigning checkiners' do
it 'can promote a user to checkiner' do
other_user_rsvp = create(:rsvp, event: @event)
other_user_rsvp = create(:rsvp, event: event)
expect do
post :create, params: { event_id: @event.id, event_checkiner: { rsvp_id: other_user_rsvp.id } }
post :create, params: { event_id: event.id, event_checkiner: { rsvp_id: other_user_rsvp.id } }
end.to(change { other_user_rsvp.reload.checkiner })
expect(response).to redirect_to(event_checkiners_path(@event))
expect(response).to redirect_to(event_checkiners_path(event))
end

it 'shows an error if no user is provided' do
post :create, params: { event_id: @event.id }
post :create, params: { event_id: event.id }
expect(assigns(:event).errors[:base].length).to be >= 1
end
end
Expand Down
65 changes: 32 additions & 33 deletions spec/controllers/checkins_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,77 +3,76 @@
require 'rails_helper'

describe CheckinsController do
before do
@event = create(:event)
@session = @event.event_sessions.first
let!(:event) { create(:event) }
let!(:session) { event.event_sessions.first }
let!(:user_organizer) { create(:user) }

@user_organizer = create(:user)
@event.organizers << @user_organizer
before do
event.organizers << user_organizer

sign_in @user_organizer
sign_in user_organizer
end

describe 'GET index' do
it 'succeeds' do
get :index, params: { event_id: @event.id, event_session_id: @session.id }
get :index, params: { event_id: event.id, event_session_id: session.id }
expect(response).to be_successful
end

it 'assigns the event and session' do
get :index, params: { event_id: @event.id, event_session_id: @session.id }
expect(assigns(:event)).to eq(@event)
expect(assigns(:session)).to eq(@session)
get :index, params: { event_id: event.id, event_session_id: session.id }
expect(assigns(:event)).to eq(event)
expect(assigns(:session)).to eq(session)
end
end

describe 'POST create' do
before do
@vol = create(:user)
@rsvp = create(:rsvp, user: @vol, event: @event)
@rsvp_session = @rsvp.rsvp_sessions.last
@event_session = @rsvp_session.event_session
end
let(:vol) { create(:user) }
let(:rsvp) { create(:rsvp, user: vol, event: event) }
let(:rsvp_session) { rsvp.rsvp_sessions.last }
let(:event_session) { rsvp_session.event_session }

it 'checks in the volunteer and returns the number of checked-in persons' do
expect do
post :create, params: { event_id: @event.id, event_session_id: @session.id, rsvp_session: { id: @rsvp_session.id } }
end.to change { @rsvp_session.reload.checked_in? }.from(false).to(true)
post :create, params: { event_id: event.id, event_session_id: session.id, rsvp_session: { id: rsvp_session.id } }
end.to change { rsvp_session.reload.checked_in? }.from(false).to(true)

expect(JSON.parse(response.body).as_json).to eq(JSON.parse({
Role::VOLUNTEER.id => {
checkin: { @event_session.id => 1 },
rsvp: { @event_session.id => 1 }
checkin: { event_session.id => 1 },
rsvp: { event_session.id => 1 }
},
Role::STUDENT.id => {
checkin: { @event_session.id => 0 },
rsvp: { @event_session.id => 0 }
checkin: { event_session.id => 0 },
rsvp: { event_session.id => 0 }
}
}.to_json).as_json)
end
end

describe 'DELETE destroy' do
let(:vol) { create(:user) }
let(:rsvp) { create(:rsvp, user: vol, event: event) }
let(:rsvp_session) { rsvp.rsvp_sessions.last }
let(:event_session) { rsvp_session.event_session }

before do
@vol = create(:user)
@rsvp = create(:rsvp, user: @vol, event: @event)
@rsvp_session = @rsvp.rsvp_sessions.last
@event_session = @rsvp_session.event_session
@rsvp_session.update_attribute(:checked_in, true)
rsvp_session.update_attribute(:checked_in, true)
end

it 'removes checked-in status for the volunteer and returns the number of checked-in persons' do
expect do
delete :destroy, params: { event_id: @event.id, event_session_id: @session.id, id: @rsvp_session.id, rsvp_session: { id: @rsvp_session.id } }
end.to change { @rsvp_session.reload.checked_in? }.from(true).to(false)
delete :destroy, params: { event_id: event.id, event_session_id: session.id, id: rsvp_session.id, rsvp_session: { id: rsvp_session.id } }
end.to change { rsvp_session.reload.checked_in? }.from(true).to(false)

expect(JSON.parse(response.body).as_json).to eq(JSON.parse({
Role::VOLUNTEER.id => {
checkin: { @event_session.id => 0 },
rsvp: { @event_session.id => 1 }
checkin: { event_session.id => 0 },
rsvp: { event_session.id => 1 }
},
Role::STUDENT.id => {
checkin: { @event_session.id => 0 },
rsvp: { @event_session.id => 0 }
checkin: { event_session.id => 0 },
rsvp: { event_session.id => 0 }
}
}.to_json).as_json)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,26 @@

describe DeviseOverrides::RegistrationsController do
before do
@request.env['devise.mapping'] = Devise.mappings[:user]
@region = Region.create!(name: 'Neue Region')
request.env['devise.mapping'] = Devise.mappings[:user]
end

let!(:region) { Region.create!(name: 'Neue Region1') }

describe '#create' do
describe 'region selection' do
it 'allows user to select a region' do
expect do
post :create, params: { user: { first_name: 'Beep', last_name: 'Boop', region_ids: [@region.id], email: 'boop1@example.com', password: 'abc123', password_confirmation: 'abc123' } }
end.to change(@region.users, :count).by(1)
post :create, params: { user: { first_name: 'Beep', last_name: 'Boop', region_ids: [region.id], email: 'boop1@example.com', password: 'abc123', password_confirmation: 'abc123' } }
end.to change(region.users, :count).by(1)

expect(response).to be_redirect
expect(User.last.regions).to eq([@region])
expect(User.last.regions).to eq([region])
end

it 'does not asplode if user does not select a region' do
expect do
post :create, params: { user: { first_name: 'Beep', last_name: 'Boop', region_ids: [], email: 'boop2@example.com', password: 'abc123', password_confirmation: 'abc123' } }
end.to change(@region.users, :count).by(0)
end.to change(region.users, :count).by(0)

expect(response).to be_redirect
expect(User.last.regions).to be_empty
Expand Down
28 changes: 15 additions & 13 deletions spec/controllers/event_sessions_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,58 +6,60 @@
render_views

describe '#index' do
let(:user) { create(:user) }
let(:event) { create(:event) }

before do
@user = create(:user)
sign_in @user
@event = create(:event)
sign_in user
end

describe 'an unauthorized user' do
it 'cannot see a list of attendees' do
expect(
get(:index, params: { event_id: @event.id })
get(:index, params: { event_id: event.id })
).to be_redirect
end
end

describe 'an organizer' do
before do
@event.organizers << @user
event.organizers << user
end

it 'can see a list of attendees' do
expect(
get(:index, params: { event_id: @event.id })
get(:index, params: { event_id: event.id })
).not_to be_redirect
end
end
end

describe '#show' do
let(:user) { create(:user, time_zone: 'Alaska') }
let(:event) { create(:event, title: 'DogeBridge') }
let(:event_session) { event.event_sessions.first }

before do
@user = create(:user, time_zone: 'Alaska')
sign_in @user
@event = create(:event, title: 'DogeBridge')
@event_session = @event.event_sessions.first
sign_in user
end

context 'format is ics' do
it 'responds with success' do
get :show, params: { event_id: @event.id, id: @event_session.id }, format: 'ics'
get :show, params: { event_id: event.id, id: event_session.id }, format: 'ics'
expect(response).to be_successful
end

it 'delegates to IcsGenerator' do
generator = instance_double(IcsGenerator, event_session_ics: 'CALENDAR STUFF')
expect(IcsGenerator).to receive(:new).and_return(generator)

get :show, params: { event_id: @event.id, id: @event_session.id }, format: 'ics'
get :show, params: { event_id: event.id, id: event_session.id }, format: 'ics'
end
end

context 'format is not ics' do
it 'responds with not_found' do
get :show, params: { event_id: @event.id, id: @event_session.id }
get :show, params: { event_id: event.id, id: event_session.id }
expect(response).to be_not_found
end
end
Expand Down
39 changes: 21 additions & 18 deletions spec/controllers/events/attendees_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,50 @@
require 'rails_helper'

describe Events::AttendeesController do
let(:event) { create(:event) }
let(:organizer) { create(:user, first_name: 'Apple', last_name: 'Pearson') }
let(:rsvp) do
rsvp_user = create(:user, first_name: 'Snake', last_name: 'Snakeson')
create(:rsvp, event: event, user: rsvp_user, dietary_info: 'paleo')
end

before do
@event = create(:event)
@organizer = create(:user, first_name: 'Apple', last_name: 'Pearson')
@event.organizers << @organizer
event.organizers << organizer

rsvp_user = create(:user, first_name: 'Snake', last_name: 'Snakeson')
@rsvp = create(:rsvp, event: @event, user: rsvp_user, dietary_info: 'paleo')
create(:dietary_restriction, rsvp: @rsvp, restriction: 'vegan')
create(:dietary_restriction, rsvp: rsvp, restriction: 'vegan')

sign_in @organizer
sign_in organizer
end

describe '#index' do
it 'responds to csv' do
get :index, params: { event_id: @event.id }, format: :csv
get :index, params: { event_id: event.id }, format: :csv
expect(response).to have_http_status(:success)
expect(response.media_type).to eq('text/csv')

csv_rows = CSV.parse(response.body)
expect(csv_rows[0][0]).to eq('Name')
expect(csv_rows[1][0]).to eq(@organizer.full_name)
expect(csv_rows[2][0]).to eq(@rsvp.user.full_name)
expect(csv_rows[1][0]).to eq(organizer.full_name)
expect(csv_rows[2][0]).to eq(rsvp.user.full_name)
end

it 'includes organizers in csv' do
get :index, params: { event_id: @event.id }, format: :csv
get :index, params: { event_id: event.id }, format: :csv
csv_rows = CSV.parse(response.body, headers: true)
expect(csv_rows[0]['Attending As']).to eq('Organizer')
end

it 'includes all dietary info in the dietary info field' do
get :index, params: { event_id: @event.id }, format: :csv
get :index, params: { event_id: event.id }, format: :csv
csv_rows = CSV.parse(response.body, headers: true)
expect(csv_rows[1]['Dietary Info']).to eq('Vegan, paleo')
end

it 'orders RSVPs by user name' do
another_user = create(:user, first_name: 'Xylophone', last_name: 'Xyson')
create(:rsvp, event: @event, user: another_user)
create(:rsvp, event: event, user: another_user)

get :index, params: { event_id: @event.id }, format: :csv
get :index, params: { event_id: event.id }, format: :csv
csv_rows = CSV.parse(response.body, headers: true)
expected = [
'Apple Pearson',
Expand All @@ -55,10 +58,10 @@
end

describe '#update' do
let!(:section) { create(:section, event: @event) }
let!(:section) { create(:section, event: event) }

let(:do_request) do
put :update, params: { event_id: @event.id, id: @rsvp.id, attendee: {
put :update, params: { event_id: event.id, id: rsvp.id, attendee: {
section_id: section.id,
subject_experience: 'Some awesome string'
} }
Expand All @@ -67,13 +70,13 @@
it 'allows organizers to update an attendee\'s section_id' do
expect do
do_request
end.to change { @rsvp.reload.section_id }.to(section.id)
end.to change { rsvp.reload.section_id }.to(section.id)
end

it 'does not allow updates to columns other than section_id' do
expect do
do_request
end.not_to(change { @rsvp.reload.subject_experience })
end.not_to(change { rsvp.reload.subject_experience })
end
end
end
Loading

0 comments on commit f852521

Please sign in to comment.