mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-14 04:04:03 +00:00
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
241 lines
7.3 KiB
Ruby
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
|