diff --git a/app/models/booth.rb b/app/models/booth.rb index e692c663..71096812 100644 --- a/app/models/booth.rb +++ b/app/models/booth.rb @@ -54,7 +54,7 @@ class Booth < ActiveRecord::Base transitions to: :rejected, from: [:new, :to_reject] end event :cancel do - transitions to: :canceled, from: [:accepted, :rejected] + transitions to: :canceled, from: [:accepted, :rejected, :to_accept, :to_reject] end end diff --git a/app/views/admin/booths/_form.html.haml b/app/views/admin/booths/_form.html.haml index 41637ac0..52b62d6e 100644 --- a/app/views/admin/booths/_form.html.haml +++ b/app/views/admin/booths/_form.html.haml @@ -5,7 +5,7 @@ .row .col-md-8 = semantic_form_for(@booth, url: @booth.new_record? ? admin_conference_booths_path(@conference.short_title) : admin_conference_booth_path(@conference.short_title, @booth.id), html: { multipart: true }) do |f| - = f.input :title, as: :string, required: true + = f.input :title, as: :string, autofocus: true, required: true = f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true, hint: 'This field becomes public upon request acceptance' = f.input :reasoning, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true, diff --git a/spec/controllers/admin/booths_controller_spec.rb b/spec/controllers/admin/booths_controller_spec.rb new file mode 100644 index 00000000..1cfc1b02 --- /dev/null +++ b/spec/controllers/admin/booths_controller_spec.rb @@ -0,0 +1,152 @@ +require 'spec_helper' + +describe Admin::BoothsController do + + let(:admin) { create(:admin) } + let(:conference) { create(:conference) } + let(:booth) { create(:booth, conference: conference) } + let(:admin) { create(:admin) } + + context 'not logged in user' do + + describe 'GET index' do + it 'does not render admin/booths#index' do + get :index, conference_id: conference.short_title + expect(response).to redirect_to(user_session_path) + end + end + + describe 'GET show' do + it 'does not render admin/booths#show' do + get :show, id: booth.id, conference_id: conference.short_title + expect(response).to redirect_to(user_session_path) + end + end + end + + context 'user is admin' do + before :each do + sign_in admin + end + + describe 'GET index' do + before { get :index, conference_id: conference.short_title } + + it 'assigns attributes for booths' do + expect(assigns(:booths)).to eq([booth]) + end + + it 'renders index template' do + expect(response).to render_template('index') + end + end + + describe 'GET new' do + before { get :new, conference_id: conference.short_title } + + it 'assigns attributes for booths' do + expect(assigns(:booth)).to be_a_new(Booth) + end + + it 'renders new template' do + expect(response).to render_template('new') + end + end + + describe 'POST #create' do + # context 'successfully created' do + # it 'creates a new booth' do + # expected = expect do + # post :create, booth: attributes_for(:booth), conference_id: conference.short_title + # end + # expected.to change { Booth.count }.by(1) + # end + # + # it 'redirects to admin booth index' do + # post :create, booth: attributes_for(:booth), conference_id: conference.short_title + # expect(response).to redirect_to(admin_conference_booths_path) + # end + # + # it 'shows success message' do + # post :create, booth: attributes_for(:booth), conference_id: conference.short_title + # expect(flash[:notice]).to match('Booth successfully created.') + # end + # end + + context 'create action fails' do + it 'does not create any record' do + expected = expect do + post :create, booth: attributes_for(:booth, title: ''), conference_id: conference.short_title + end + expected.to_not change(Booth, :count) + end + + it 'redirects to new' do + post :create, booth: attributes_for(:booth, title: ''), conference_id: conference.short_title + + expect(response).to render_template('new') + end + + # it 'shows flash message' do + # post :create, booth: attributes_for(:booth, title: ''), conference_id: conference.short_title + # + # expect(flash[:error]).to eq("Title can't be blank") + # end + end + end + + describe 'PATCH #update' do + context 'updates suchessfully' do + it 'redirects to admin booth index path' do + patch :update, id: booth.id, booth: attributes_for(:booth, title: 'different'), conference_id: conference.short_title + expect(response).to redirect_to admin_conference_booths_path + end + + it 'shows success message' do + patch :update, id: booth.id, booth: attributes_for(:booth, title: 'different'), conference_id: conference.short_title + expect(flash[:notice]).to match"Successfully updated booth." + end + + it 'updates booth' do + patch :update, id: booth.id, booth: attributes_for(:booth, title: 'different'), conference_id: conference.short_title + booth.reload + expect(booth.title).to eq('different') + end + end + end + + describe 'DELETE #destroy' do + context 'deletes successfully' do + # it 'booth deleted' do + # expected = expect do + # delete :destroy, id: booth.iddelete :destroy, id: booth.id, conference_id: conference.short_title + # end + # expected.to change { Booth.count }.by(-1) + # end + + it 'redirects to admin booth index path' do + delete :destroy, id: booth.id, conference_id: conference.short_title + expect(response).to redirect_to(admin_conference_booths_path) + end + + it 'show success message' do + delete :destroy, id: booth.id, conference_id: conference.short_title + expect(flash[:notice]).to match('Booth successfully destroyed.') + end + end + end + + describe 'GET #edit' do + it 'renders edit template' do + get :edit, id: booth.id, conference_id: conference.short_title + expect(response).to render_template('edit') + end + + it 'assigns booth variable' do + get :edit, id: booth.id, conference_id: conference.short_title + expect(assigns(:booth)).to eq booth + end + end + + end +end diff --git a/spec/models/booth_spec.rb b/spec/models/booth_spec.rb index f13eb536..5e86a393 100644 --- a/spec/models/booth_spec.rb +++ b/spec/models/booth_spec.rb @@ -38,8 +38,8 @@ describe 'Booth' do states_transitions = { new: { restart: false, withdraw: true, accept: true, to_accept: true, to_reject: true, reject: true, cancel: false }, withdrawn: { restart: true, withdraw: false, accept: false, to_accept: false, to_reject: false, reject: false, cancel: false }, - to_accept: { restart: true, withdraw: true, accept: true, to_accept: false, to_reject: true, reject: false, cancel: false }, - to_reject: { restart: true, withdraw: true, accept: false, to_accept: true, to_reject: false, reject: true, cancel: false }, + to_accept: { restart: true, withdraw: true, accept: true, to_accept: false, to_reject: true, reject: false, cancel: true }, + to_reject: { restart: true, withdraw: true, accept: false, to_accept: true, to_reject: false, reject: true, cancel: true }, accepted: { restart: false, withdraw: true, accept: false, to_accept: false, to_reject: false, reject: false, cancel: true }, rejected: { restart: false, withdraw: true, accept: false, to_accept: false, to_reject: false, reject: false, cancel: true }, canceled: { restart: true, withdraw: false, accept: false, to_accept: false, to_reject: false, reject: false, cancel: false } }