2016-02-29 00:21:24 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
|
|
describe ConferenceRegistrationsController, type: :controller do
|
|
|
|
|
let!(:first_user) { create(:user) }
|
|
|
|
|
let(:conference) { create(:conference) }
|
|
|
|
|
let(:conference_with_open_registration) { create(:conference) }
|
|
|
|
|
let!(:open_registration_period) { create(:registration_period, conference: conference_with_open_registration, start_date: Date.current - 6.days) }
|
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
|
|
|
|
|
|
context 'user is not signed in' do
|
|
|
|
|
describe 'GET #new' do
|
2016-03-12 17:46:50 +05:30
|
|
|
context 'ichain is disabled' do
|
|
|
|
|
before do
|
|
|
|
|
get :new, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'assigns conference, registration and user variable' do
|
|
|
|
|
expect(assigns(:conference)).to eq conference_with_open_registration
|
|
|
|
|
expect(assigns(:registration)).to be_instance_of Registration
|
|
|
|
|
expect(assigns(:user)).to be_instance_of User
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'renders the new template' do
|
|
|
|
|
expect(response).to render_template('new')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-29 00:21:24 +05:30
|
|
|
context 'ichain is enabled' do
|
|
|
|
|
before do
|
|
|
|
|
CONFIG['authentication']['ichain']['enabled'] = true
|
|
|
|
|
get :new, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
after { CONFIG['authentication']['ichain']['enabled'] = false }
|
|
|
|
|
|
|
|
|
|
it 'redirects to root path' do
|
|
|
|
|
expect(response).to redirect_to root_path
|
|
|
|
|
end
|
2016-03-12 17:46:50 +05:30
|
|
|
|
|
|
|
|
it 'shows error in flash message' do
|
|
|
|
|
expect(flash[:alert]).to match 'You are not authorized to access this page. Maybe you need to sign in?'
|
|
|
|
|
end
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'POST #create' do
|
|
|
|
|
before do
|
|
|
|
|
post :create, user: attributes_for(:user),
|
|
|
|
|
registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'assigns user variable' do
|
|
|
|
|
expect(assigns(:user)).not_to be_nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'signs in registration user' do
|
|
|
|
|
expect(controller.current_user).not_to be_nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows success message in flash notice' do
|
|
|
|
|
expect(flash[:notice]).to match('You are now registered and will be receiving E-Mail notifications.')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to registration show path' do
|
|
|
|
|
expect(response).to redirect_to conference_conference_registrations_path(conference_with_open_registration.short_title)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'creates a new registration' do
|
|
|
|
|
expect(Registration.count).to eq 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'user is signed in' do
|
|
|
|
|
before { sign_in(user) }
|
|
|
|
|
|
|
|
|
|
describe 'GET #new' do
|
2016-03-12 17:46:50 +05:30
|
|
|
context 'successful request' do
|
|
|
|
|
before do
|
|
|
|
|
get :new, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'assigns registration and user variables' do
|
|
|
|
|
expect(assigns(:registration)).to be_instance_of(Registration)
|
|
|
|
|
expect(assigns(:user)).to be_instance_of(User)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'renders the new template' do
|
|
|
|
|
expect(response).to render_template('new')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-29 00:21:24 +05:30
|
|
|
context 'user is registered to conference' do
|
|
|
|
|
before do
|
|
|
|
|
create(:registration, user: user, conference: conference_with_open_registration)
|
|
|
|
|
get :new, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to edit registration page' do
|
|
|
|
|
expect(response).to redirect_to edit_conference_conference_registrations_path(conference_with_open_registration.short_title)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'registration limit has reached' do
|
|
|
|
|
before do
|
|
|
|
|
conference_with_open_registration.update_attributes(registration_limit: 1)
|
|
|
|
|
create(:registration, conference: conference_with_open_registration)
|
|
|
|
|
get :new, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to root path' do
|
|
|
|
|
expect(response).to redirect_to root_path
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows error in flash message' do
|
|
|
|
|
expect(flash[:alert]).to match "Sorry, registration limit exceeded for #{conference_with_open_registration.title}"
|
|
|
|
|
end
|
|
|
|
|
end
|
2016-03-12 17:46:50 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'GET #show' do
|
|
|
|
|
before do
|
|
|
|
|
@registration = create(:registration, conference: conference_with_open_registration, user: user)
|
|
|
|
|
end
|
2016-02-29 00:21:24 +05:30
|
|
|
|
|
|
|
|
context 'successful request' do
|
|
|
|
|
before do
|
2016-03-12 17:46:50 +05:30
|
|
|
get :show, conference_id: conference_with_open_registration.short_title
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
2016-03-12 17:46:50 +05:30
|
|
|
it 'assigns conference, registration and workshops variables' do
|
|
|
|
|
expect(assigns(:conference)).to eq conference_with_open_registration
|
|
|
|
|
expect(assigns(:registration)).to eq @registration
|
|
|
|
|
expect(assigns(:workshops)).to eq @registration.workshops
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
2016-03-12 17:46:50 +05:30
|
|
|
it 'renders the show template' do
|
|
|
|
|
expect(response).to render_template('show')
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'user has purchased a ticket' do
|
|
|
|
|
before do
|
|
|
|
|
@ticket = create(:ticket, conference: conference_with_open_registration)
|
|
|
|
|
@purchased_ticket = create(:ticket_purchase, conference: conference_with_open_registration,
|
|
|
|
|
user: user,
|
|
|
|
|
ticket: @ticket)
|
|
|
|
|
get :show, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'assigns price of purchased tickets to total_price and purchased tickets to tickets' do
|
|
|
|
|
expect(assigns(:total_price)).to eq Money.new(10000, 'USD')
|
|
|
|
|
expect(assigns(:tickets)).to match_array [@purchased_ticket]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'user has not purchased any ticket' do
|
|
|
|
|
before do
|
|
|
|
|
get :show, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'assigns 0 dollars to total_price and empty array to tickets variables' do
|
|
|
|
|
expect(assigns(:total_price)).to eq Money.new(0, 'USD')
|
|
|
|
|
expect(assigns(:tickets)).to match_array []
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'GET #edit' do
|
|
|
|
|
before do
|
2016-03-12 17:46:50 +05:30
|
|
|
@registration = create(:registration, conference: conference_with_open_registration, user: user)
|
2016-02-29 00:21:24 +05:30
|
|
|
get :edit, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
2016-03-12 17:46:50 +05:30
|
|
|
it 'assigns conference and registration variable' do
|
|
|
|
|
expect(assigns(:conference)).to eq conference_with_open_registration
|
|
|
|
|
expect(assigns(:registration)).to eq @registration
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-29 00:21:24 +05:30
|
|
|
it 'renders the edit template' do
|
|
|
|
|
expect(response).to render_template('edit')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'POST #create' do
|
2016-03-12 17:46:50 +05:30
|
|
|
context 'successfully registers' do
|
|
|
|
|
it 'assigns user variable' do
|
2016-02-29 00:21:24 +05:30
|
|
|
post :create, registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
2016-03-12 17:46:50 +05:30
|
|
|
expect(assigns(:user)).to eq user
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
2016-03-12 17:46:50 +05:30
|
|
|
it 'creates a new registration' do
|
|
|
|
|
expect do
|
|
|
|
|
post :create, registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end.to change{ Registration.count }.by 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'tickets are available' do
|
|
|
|
|
before do
|
|
|
|
|
create(:ticket, conference: conference_with_open_registration)
|
|
|
|
|
post :create, registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to conference tickets path' do
|
|
|
|
|
expect(response).to redirect_to conference_tickets_path(conference_with_open_registration.short_title)
|
|
|
|
|
end
|
2016-03-12 17:46:50 +05:30
|
|
|
end
|
2016-02-29 00:21:24 +05:30
|
|
|
|
2016-03-12 17:46:50 +05:30
|
|
|
context 'tickets are not available' do
|
|
|
|
|
before do
|
|
|
|
|
post :create, registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to registration show path' do
|
|
|
|
|
expect(response).to redirect_to conference_conference_registrations_path(conference_with_open_registration.short_title)
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'registration save fails' do
|
|
|
|
|
before do
|
|
|
|
|
allow_any_instance_of(Registration).to receive(:save).and_return(false)
|
|
|
|
|
post :create, registration: attributes_for(:registration),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'renders the new template' do
|
|
|
|
|
expect(response).to render_template('new')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not create registration' do
|
|
|
|
|
expect(Registration.count).to eq 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'PATCH #update' do
|
|
|
|
|
before do
|
|
|
|
|
@registration = create(:registration,
|
|
|
|
|
conference: conference_with_open_registration,
|
|
|
|
|
user: user,
|
|
|
|
|
arrival: Date.new(2014, 04, 25))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'updates successfully' do
|
|
|
|
|
before do
|
|
|
|
|
patch :update, registration: attributes_for(:registration, arrival: Date.new(2014, 04, 29)),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to registration show path' do
|
|
|
|
|
expect(response).to redirect_to conference_conference_registrations_path(conference_with_open_registration.short_title)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows success message in flash notice' do
|
|
|
|
|
expect(flash[:notice]).to match('Registration was successfully updated.')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'updates the registration' do
|
|
|
|
|
@registration.reload
|
|
|
|
|
expect(@registration.arrival).to eq Date.new(2014, 04, 29)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'update fails' do
|
|
|
|
|
before do
|
|
|
|
|
allow_any_instance_of(Registration).to receive(:update_attributes).and_return(false)
|
|
|
|
|
patch :update, registration: attributes_for(:registration, arrival: Date.new(2014, 04, 27)),
|
|
|
|
|
conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'renders edit template' do
|
|
|
|
|
expect(response).to render_template('edit')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows error in flash message' do
|
2016-03-12 17:46:50 +05:30
|
|
|
expect(flash[:error]).to match "Could not update your registration for The dog and pony show: #{@registration.errors.full_messages.join('. ')}."
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not update the registration' do
|
|
|
|
|
@registration.reload
|
|
|
|
|
expect(@registration.arrival).to eq Date.new(2014, 04, 25)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'DELETE #destroy' do
|
|
|
|
|
before do
|
|
|
|
|
@registration = create(:registration, conference: conference_with_open_registration, user: user)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'deletes successfully' do
|
|
|
|
|
before do
|
|
|
|
|
delete :destroy, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to root path' do
|
|
|
|
|
expect(response).to redirect_to root_path
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows success message in flash notice' do
|
2016-03-12 17:46:50 +05:30
|
|
|
expect(flash[:notice]).to match('You are not registered for The dog and pony show anymore!')
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'deletes the registration' do
|
|
|
|
|
expect(Registration.count).to eq 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'delete fails' do
|
|
|
|
|
before do
|
|
|
|
|
allow_any_instance_of(Registration).to receive(:destroy).and_return(false)
|
|
|
|
|
delete :destroy, conference_id: conference_with_open_registration.short_title
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'redirects to registration show path' do
|
|
|
|
|
expect(response).to redirect_to conference_conference_registrations_path(conference_with_open_registration.short_title)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'shows error in flash message' do
|
2016-03-12 17:46:50 +05:30
|
|
|
expect(flash[:error]).to match "Could not delete your registration for The dog and pony show: #{@registration.errors.full_messages.join('. ')}."
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not delete the registration' do
|
2016-03-12 17:46:50 +05:30
|
|
|
expect(assigns(:registration)).to eq @registration
|
2016-02-29 00:21:24 +05:30
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|