Merge branch 'master' into moving-users
This commit is contained in:
commit
6b55a28813
53 changed files with 1105 additions and 318 deletions
148
spec/controllers/admin/booths_controller_spec.rb
Normal file
148
spec/controllers/admin/booths_controller_spec.rb
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::BoothsController do
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:conference) { create(:conference) }
|
||||
let(:booth) { create(:booth, title: 'Title', 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
|
||||
before { post :create, booth: attributes_for(:booth), conference_id: conference.short_title }
|
||||
|
||||
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
|
||||
expect(response).to redirect_to(admin_conference_booths_path)
|
||||
end
|
||||
|
||||
it 'has responsibles' do
|
||||
expect(booth.responsibles.count).to_not eq(0)
|
||||
end
|
||||
|
||||
it 'shows success message' do
|
||||
expect(flash[:notice]).to match('Booth successfully created.')
|
||||
end
|
||||
end
|
||||
|
||||
context 'create action fails' do
|
||||
before { post :create, booth: attributes_for(:booth, title: ''), conference_id: conference.short_title }
|
||||
|
||||
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
|
||||
expect(response).to render_template('new')
|
||||
end
|
||||
|
||||
it 'shows flash message' do
|
||||
expect(flash[:error]).to eq("Creating booth failed. Title can't be blank.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #edit' do
|
||||
before { get :edit, id: booth.id, conference_id: conference.short_title }
|
||||
|
||||
it 'renders edit template' do
|
||||
expect(response).to render_template('edit')
|
||||
end
|
||||
|
||||
it 'assigns booth variable' do
|
||||
expect(assigns(:booth)).to eq booth
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH #update' do
|
||||
context 'updates suchessfully' do
|
||||
before { patch :update, id: booth.id, booth: attributes_for(:booth, title: 'different'), conference_id: conference.short_title }
|
||||
it 'redirects to admin booth index path' do
|
||||
expect(response).to redirect_to admin_conference_booths_path
|
||||
end
|
||||
|
||||
it 'shows success message' do
|
||||
expect(flash[:notice]).to match 'Successfully updated booth.'
|
||||
end
|
||||
|
||||
it 'updates booth' do
|
||||
booth.reload
|
||||
expect(booth.title).to eq('different')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE #destroy' do
|
||||
context 'deletes successfully' do
|
||||
before { delete :destroy, id: booth.id, conference_id: conference.short_title }
|
||||
|
||||
it 'booth deleted' do
|
||||
expect(Booth.count).to eq(0)
|
||||
end
|
||||
|
||||
it 'redirects to admin booth index path' do
|
||||
expect(response).to redirect_to(admin_conference_booths_path)
|
||||
end
|
||||
|
||||
it 'show success message' do
|
||||
expect(flash[:notice]).to match('Booth successfully destroyed.')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -55,7 +55,7 @@ describe Admin::RolesController do
|
|||
end
|
||||
|
||||
describe 'POST #toggle' do
|
||||
before:each do
|
||||
before :each do
|
||||
sign_in admin
|
||||
post :toggle_user, conference_id: conference.short_title,
|
||||
user: { email: 'user1@osem.io' },
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ describe PhysicalTicketController do
|
|||
describe 'GET #show' do
|
||||
before :each do
|
||||
sign_in user
|
||||
get :show, id: physical_ticket.id, conference_id: conference.short_title
|
||||
get :show, id: physical_ticket.token, conference_id: conference.short_title
|
||||
end
|
||||
|
||||
it 'assigns ticket_layout' do
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ describe SubscriptionsController do
|
|||
|
||||
it 'shows success message in flash notice' do
|
||||
post :create, conference_id: conference.short_title
|
||||
expect(flash[:notice]).to match("You have been subscribed to receive email notifications for #{conference.short_title}")
|
||||
expect(flash[:notice]).to match("You have subscribed to receive email notifications for #{conference.title}")
|
||||
end
|
||||
|
||||
it 'subscribes user to conference' do
|
||||
|
|
@ -47,7 +47,7 @@ describe SubscriptionsController do
|
|||
|
||||
it 'shows success message in flash notice' do
|
||||
delete :destroy, conference_id: conference.short_title
|
||||
expect(flash[:notice]).to match("You have been unsubscribed and now you will not be receiving email notifications for #{conference.short_title}.")
|
||||
expect(flash[:notice]).to match("You have unsubscribed and you will not be receiving email notifications for #{conference.title}.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
8
spec/factories/booth_request.rb
Normal file
8
spec/factories/booth_request.rb
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
FactoryGirl.define do
|
||||
factory :booth_request do
|
||||
booth
|
||||
user
|
||||
role 'responsible'
|
||||
|
||||
end
|
||||
end
|
||||
13
spec/factories/booths.rb
Normal file
13
spec/factories/booths.rb
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
FactoryGirl.define do
|
||||
factory :booth do
|
||||
title { Faker::Hipster.sentence }
|
||||
description { Faker::Lorem.paragraph }
|
||||
reasoning { Faker::Lorem.paragraph }
|
||||
website_url { Faker::Internet.url }
|
||||
submitter_relationship { Faker::Lorem.paragraph }
|
||||
|
||||
conference
|
||||
|
||||
responsible_ids { [create(:user).id] }
|
||||
end
|
||||
end
|
||||
|
|
@ -249,6 +249,16 @@ feature 'Has correct abilities' do
|
|||
visit admin_conference_roles_path(conference.short_title)
|
||||
expect(current_path).to eq(admin_conference_roles_path(conference.short_title))
|
||||
|
||||
visit admin_conference_booths_path(conference.short_title)
|
||||
expect(current_path).to eq(admin_conference_booths_path(conference.short_title))
|
||||
|
||||
visit new_admin_conference_booth_path(conference.short_title)
|
||||
expect(current_path).to eq(new_admin_conference_booth_path(conference.short_title))
|
||||
|
||||
create(:booth, conference: conference)
|
||||
visit edit_admin_conference_booth_path(conference.short_title, conference.booths.first)
|
||||
expect(current_path).to eq(edit_admin_conference_booth_path(conference.short_title, conference.booths.first))
|
||||
|
||||
visit admin_conference_resources_path(conference.short_title)
|
||||
expect(current_path).to eq(admin_conference_resources_path(conference.short_title))
|
||||
|
||||
|
|
|
|||
|
|
@ -237,6 +237,16 @@ feature 'Has correct abilities' do
|
|||
visit edit_admin_conference_target_path(conference.short_title, conference.targets.first)
|
||||
expect(current_path).to eq(edit_admin_conference_target_path(conference.short_title, conference.targets.first))
|
||||
|
||||
visit admin_conference_booths_path(conference.short_title)
|
||||
expect(current_path).to eq(admin_conference_booths_path(conference.short_title))
|
||||
|
||||
visit new_admin_conference_booth_path(conference.short_title)
|
||||
expect(current_path).to eq(new_admin_conference_booth_path(conference.short_title))
|
||||
|
||||
create(:booth, conference: conference)
|
||||
visit edit_admin_conference_booth_path(conference.short_title, conference.booths.first)
|
||||
expect(current_path).to eq(edit_admin_conference_booth_path(conference.short_title, conference.booths.first))
|
||||
|
||||
visit admin_conference_program_tracks_path(conference.short_title)
|
||||
expect(current_path).to eq(admin_conference_program_tracks_path(conference.short_title))
|
||||
|
||||
|
|
|
|||
|
|
@ -28,23 +28,23 @@ feature Event do
|
|||
|
||||
scenario 'rejects a proposal', feature: true, js: true do
|
||||
visit admin_conference_program_events_path(conference.short_title)
|
||||
expect(page.has_content?('Example Proposal')).to be true
|
||||
expect(page).to have_content 'Example Proposal'
|
||||
|
||||
click_button 'New'
|
||||
click_link "reject_event_#{@event.id}"
|
||||
expect(flash).to eq('Event rejected!')
|
||||
expect(page).to have_content 'Event rejected!'
|
||||
@event.reload
|
||||
expect(@event.state).to eq('rejected')
|
||||
end
|
||||
|
||||
scenario 'accepts a proposal', feature: true, js: true do
|
||||
visit admin_conference_program_events_path(conference.short_title)
|
||||
expect(page.has_content?('Example Proposal')).to be true
|
||||
expect(page).to have_content 'Example Proposal'
|
||||
|
||||
click_button 'New'
|
||||
click_link "accept_event_#{@event.id}"
|
||||
expect(flash).to eq('Event accepted!')
|
||||
expect(page.has_content?('Unconfirmed')).to be true
|
||||
expect(page).to have_content 'Event accepted!'
|
||||
expect(page).to have_content 'Unconfirmed'
|
||||
@event.reload
|
||||
expect(@event.state).to eq('unconfirmed')
|
||||
end
|
||||
|
|
@ -52,11 +52,11 @@ feature Event do
|
|||
scenario 'restarts review of a proposal', feature: true, js: true do
|
||||
@event.reject!(@options)
|
||||
visit admin_conference_program_events_path(conference.short_title)
|
||||
expect(page.has_content?('Example Proposal')).to be true
|
||||
expect(page).to have_content 'Example Proposal'
|
||||
|
||||
click_button 'Rejected'
|
||||
click_link "restart_event_#{@event.id}"
|
||||
expect(flash).to eq('Review started!')
|
||||
expect(page).to have_content 'Review started!'
|
||||
@event.reload
|
||||
expect(@event.state).to eq('new')
|
||||
end
|
||||
|
|
@ -83,7 +83,7 @@ feature Event do
|
|||
fill_in 'event_abstract', with: 'Lorem ipsum abstract'
|
||||
|
||||
click_button 'Create Proposal'
|
||||
expect(flash).to eq('Proposal was successfully submitted.')
|
||||
expect(page).to have_content 'Proposal was successfully submitted.'
|
||||
|
||||
expect(Event.count).to eq(expected_count_event)
|
||||
expect(User.count).to eq(expected_count_user)
|
||||
|
|
@ -101,7 +101,7 @@ feature Event do
|
|||
select('Easy', from: 'event[difficulty_level_id]')
|
||||
|
||||
click_button 'Update Proposal'
|
||||
expect(flash).to eq('Proposal was successfully updated.')
|
||||
expect(page).to have_content 'Proposal was successfully updated.'
|
||||
end
|
||||
|
||||
scenario 'signed_in user submits a valid proposal', feature: true, js: true do
|
||||
|
|
@ -119,7 +119,7 @@ feature Event do
|
|||
fill_in 'event_description', with: 'Lorem ipsum description'
|
||||
|
||||
click_button 'Create Proposal'
|
||||
expect(flash).to eq('Proposal was successfully submitted.')
|
||||
expect(page).to have_content 'Proposal was successfully submitted.'
|
||||
|
||||
expect(current_path).to eq(conference_program_proposals_path(conference.short_title))
|
||||
expect(Event.count).to eq(expected_count)
|
||||
|
|
@ -128,11 +128,10 @@ feature Event do
|
|||
scenario 'confirms a proposal', feature: true, js: true do
|
||||
sign_in participant
|
||||
visit conference_program_proposals_path(conference.short_title)
|
||||
expect(page.has_content?('Example Proposal')).to be true
|
||||
expect(page).to have_content 'Example Proposal'
|
||||
expect(@event.state).to eq('unconfirmed')
|
||||
click_link "confirm_proposal_#{@event.id}"
|
||||
expect(flash)
|
||||
.to eq('The proposal was confirmed. Please register to attend the conference.')
|
||||
expect(page).to have_content 'The proposal was confirmed. Please register to attend the conference.'
|
||||
expect(current_path).to eq(new_conference_conference_registration_path(conference.short_title))
|
||||
@event.reload
|
||||
expect(@event.state).to eq('confirmed')
|
||||
|
|
@ -142,9 +141,9 @@ feature Event do
|
|||
sign_in participant
|
||||
@event.confirm!
|
||||
visit conference_program_proposals_path(conference.short_title)
|
||||
expect(page.has_content?('Example Proposal')).to be true
|
||||
expect(page).to have_content 'Example Proposal'
|
||||
click_link "delete_proposal_#{@event.id}"
|
||||
expect(flash).to eq('Proposal was successfully withdrawn.')
|
||||
expect(page).to have_content 'Proposal was successfully withdrawn.'
|
||||
@event.reload
|
||||
expect(@event.state).to eq('withdrawn')
|
||||
end
|
||||
|
|
|
|||
54
spec/models/booth_spec.rb
Normal file
54
spec/models/booth_spec.rb
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Booth' do
|
||||
subject { create(:booth) }
|
||||
let!(:conference) { create(:conference) }
|
||||
|
||||
describe 'validation' do
|
||||
it 'has a valid factory' do
|
||||
expect(build(:booth)).to be_valid
|
||||
end
|
||||
|
||||
it { is_expected.to validate_presence_of(:reasoning) }
|
||||
it { is_expected.to validate_presence_of(:description) }
|
||||
it { is_expected.to validate_presence_of(:responsibles) }
|
||||
it { is_expected.to validate_presence_of(:submitter_relationship) }
|
||||
it { is_expected.to validate_presence_of(:website_url) }
|
||||
|
||||
it 'is not valid without a title' do
|
||||
is_expected.to validate_presence_of(:title)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'association' do
|
||||
it { is_expected.to belong_to(:conference) }
|
||||
it { is_expected.to have_many(:booth_requests) }
|
||||
end
|
||||
|
||||
describe '#transition_possible?(transition)' do
|
||||
shared_examples 'transition_possible?(transition)' do |state, transition, expected|
|
||||
it "returns #{expected} for #{transition} transition, when the booth is #{state}}" do
|
||||
my_booth = create(:booth, state: state)
|
||||
expect(my_booth.transition_possible?(transition.to_sym)).to eq expected
|
||||
end
|
||||
end
|
||||
|
||||
states = [:new, :withdrawn, :to_accept, :accepted, :to_reject, :rejected, :canceled]
|
||||
transitions = [:restart, :withdraw, :accept, :reject, :to_accept, :to_reject, :cancel]
|
||||
|
||||
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: 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 } }
|
||||
|
||||
states.each do |state|
|
||||
transitions.each do |transition|
|
||||
it_behaves_like 'transition_possible?(transition)', state, transition, states_transitions[state.to_sym][transition.to_sym]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue