osem-fcy/spec/controllers/tracks_controller_spec.rb
AEtherC0r3 d9faffc96a Implement track request acceptance
Allow track submitter to request specific dates
Redirect to Tracks#edit if a track doesn't have a room or start/end date
before accepting it

Don't allow the submitter or the track organizers to edit the request
after it has been accepted or confirmed

Restrict track selection in proposals and move track selection from
Proposals form to events helper

Mark cfp_active of the tracks table as not null and fill in true if nil
2017-08-11 16:25:21 +03:00

241 lines
7.3 KiB
Ruby

require 'spec_helper'
describe TracksController do
let(:user) { create(:admin) }
let(:conference) { create(:conference) }
let!(:regular_track) { create(:track, program: conference.program) }
let!(:self_organized_track) { create(:track, :self_organized, program: conference.program, submitter: user, name: 'My awesome track', color: '#800080') }
before :each do
sign_in(user)
end
describe 'GET #index' do
before :each do
get :index, conference_id: conference.short_title
end
it 'assigns @tracks with the correct values' do
expect(assigns(:tracks).length).to eq 1
expect(assigns(:tracks).include?(regular_track)).to eq false
expect(assigns(:tracks).include?(self_organized_track)).to eq true
end
it 'renders the index template' do
expect(response).to render_template :index
end
end
describe 'GET #show' do
before :each do
get :show, conference_id: conference.short_title, id: self_organized_track.short_name
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'renders the show template' do
expect(response).to render_template :show
end
end
describe 'GET #new' do
before :each do
get :new, conference_id: conference.short_title
end
it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true
expect(assigns(:track).program_id).to eq conference.program.id
end
it 'renders the new template' do
expect(response).to render_template :new
end
end
describe 'POST #create' do
context 'saves successfuly' do
before :each do
post :create, track: attributes_for(:track, short_name: 'my_track'), conference_id: conference.short_title
end
it 'redirects to tracks index path' do
expect(response).to redirect_to conference_program_tracks_path(conference_id: conference.short_title)
end
it 'shows success message in flash notice' do
expect(flash[:notice]).to match('Track request successfully created.')
end
it 'creates new track' do
expect(assigns(:track).new_record?).to eq false
end
it 'the new tracks has the correct attributes' do
expect(assigns(:track).program_id).to eq conference.program.id
expect(assigns(:track).submitter).to eq user
expect(assigns(:track).state).to eq 'new'
expect(assigns(:track).cfp_active).to eq false
end
end
context 'save fails' do
before :each do
allow_any_instance_of(Track).to receive(:save).and_return(false)
post :create, track: attributes_for(:track, short_name: 'my_track'), conference_id: conference.short_title
end
it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true
expect(assigns(:track).program_id).to eq conference.program.id
end
it 'renders the new template' do
expect(response).to render_template :new
end
it 'shows error in flash message' do
expect(flash[:error]).to match("Creating Track request failed: #{assigns(:track).errors.full_messages.join('. ')}.")
end
it 'does not create a new track' do
expect(conference.program.tracks.find_by(short_name: 'my_track')).to eq nil
end
end
end
describe 'GET #edit' do
before :each do
get :edit, conference_id: conference.short_title, id: self_organized_track.short_name
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'renders the show template' do
expect(response).to render_template :edit
end
end
describe 'PATCH #update' do
context 'updates successfully' do
before :each do
patch :update, track: attributes_for(:track, color: '#FF0000'),
conference_id: conference.short_title,
id: self_organized_track.short_name
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'redirects to tracks index path' do
expect(response).to redirect_to conference_program_tracks_path(conference_id: conference.short_title)
end
it 'shows success message in flash notice' do
expect(flash[:notice]).to match('Track request successfully updated.')
end
it 'updates the track' do
self_organized_track.reload
expect(self_organized_track.color).to eq '#FF0000'
end
end
context 'update fails' do
before :each do
allow_any_instance_of(Track).to receive(:save).and_return(false)
patch :update, track: attributes_for(:track, color: '#FF0000'),
conference_id: conference.short_title,
id: self_organized_track.short_name
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'renders edit template' do
expect(response).to render_template :edit
end
it 'shows error in flash message' do
expect(flash[:error]).to match("Track request update failed: #{assigns(:track).errors.full_messages.join('. ')}.")
end
it 'does not update the track' do
self_organized_track.reload
expect(self_organized_track.color).to eq '#800080'
end
end
end
describe 'PATCH #restart' do
before :each do
self_organized_track.state = 'withdrawn'
self_organized_track.save!
patch :restart, conference_id: conference.short_title, id: self_organized_track.short_name
self_organized_track.reload
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'shows message in flash notice' do
expect(flash[:notice]).to eq 'Track My awesome track re-submitted.'
end
it 'changes the track\'s state to new' do
expect(self_organized_track.state).to eq 'new'
end
end
describe 'PATCH #confirm' do
before :each do
self_organized_track.state = 'accepted'
self_organized_track.save!
patch :confirm, conference_id: conference.short_title, id: self_organized_track.short_name
self_organized_track.reload
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'shows message in flash notice' do
expect(flash[:notice]).to eq 'Track My awesome track confirmed.'
end
it 'changes the track\'s state to confirmed' do
expect(self_organized_track.state).to eq 'confirmed'
end
end
describe 'PATCH #withdraw' do
before :each do
self_organized_track.state = 'confirmed'
self_organized_track.save!
patch :withdraw, conference_id: conference.short_title, id: self_organized_track.short_name
self_organized_track.reload
end
it 'assigns the correct track' do
expect(assigns(:track)).to eq self_organized_track
end
it 'shows message in flash notice' do
expect(flash[:notice]).to eq 'Track My awesome track withdrawn.'
end
it 'changes the track\'s state to withdrawn' do
expect(self_organized_track.state).to eq 'withdrawn'
end
end
end