Improvements in registration specs

Check for true and not truthy in registration model spec.
Cover general cases in conf registration controller.
Add test for flash in new action when ichain is set and user is not signed in.
This commit is contained in:
Aditya Prakash 2016-03-12 17:46:50 +05:30
parent 5bff60ec7d
commit 7e4d91adaf
3 changed files with 88 additions and 37 deletions

View file

@ -9,6 +9,22 @@ describe ConferenceRegistrationsController, type: :controller do
context 'user is not signed in' do
describe 'GET #new' do
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
context 'ichain is enabled' do
before do
CONFIG['authentication']['ichain']['enabled'] = true
@ -20,6 +36,10 @@ describe ConferenceRegistrationsController, type: :controller do
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 'You are not authorized to access this page. Maybe you need to sign in?'
end
end
end
@ -56,6 +76,21 @@ describe ConferenceRegistrationsController, type: :controller do
before { sign_in(user) }
describe 'GET #new' do
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
context 'user is registered to conference' do
before do
create(:registration, user: user, conference: conference_with_open_registration)
@ -82,21 +117,6 @@ describe ConferenceRegistrationsController, type: :controller do
expect(flash[:alert]).to match "Sorry, registration limit exceeded for #{conference_with_open_registration.title}"
end
end
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
end
describe 'GET #show' do
@ -104,6 +124,22 @@ describe ConferenceRegistrationsController, type: :controller do
@registration = create(:registration, conference: conference_with_open_registration, user: user)
end
context 'successful request' do
before do
get :show, conference_id: conference_with_open_registration.short_title
end
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
end
it 'renders the show template' do
expect(response).to render_template('show')
end
end
context 'user has purchased a ticket' do
before do
@ticket = create(:ticket, conference: conference_with_open_registration)
@ -113,14 +149,6 @@ describe ConferenceRegistrationsController, type: :controller do
get :show, conference_id: conference_with_open_registration.short_title
end
it 'renders the show template' do
expect(response).to render_template('show')
end
it 'assigns workshops variable' do
expect(assigns(:workshops)).to eq @registration.workshops
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]
@ -141,33 +169,56 @@ describe ConferenceRegistrationsController, type: :controller do
describe 'GET #edit' do
before do
create(:registration, conference: conference_with_open_registration, user: user)
@registration = create(:registration, conference: conference_with_open_registration, user: user)
get :edit, conference_id: conference_with_open_registration.short_title
end
it 'assigns conference and registration variable' do
expect(assigns(:conference)).to eq conference_with_open_registration
expect(assigns(:registration)).to eq @registration
end
it 'renders the edit template' do
expect(response).to render_template('edit')
end
end
describe 'POST #create' do
context "tickets are available and user hasn't bought any" do
context 'successfully registers' do
it 'assigns user variable' do
post :create, registration: attributes_for(:registration),
conference_id: conference_with_open_registration.short_title
expect(assigns(:user)).to eq user
end
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
end
it 'assigns user variable' do
expect(assigns(:user)).to eq user
end
it 'redirects to conference tickets path' do
expect(response).to redirect_to conference_tickets_path(conference_with_open_registration.short_title)
end
end
it 'creates a new registration' do
expect(Registration.count).to eq 1
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)
end
end
@ -228,7 +279,7 @@ describe ConferenceRegistrationsController, type: :controller do
end
it 'shows error in flash message' do
expect(flash[:error]).to include 'Could not update your registration'
expect(flash[:error]).to match "Could not update your registration for The dog and pony show: #{@registration.errors.full_messages.join('. ')}."
end
it 'does not update the registration' do
@ -253,7 +304,7 @@ describe ConferenceRegistrationsController, type: :controller do
end
it 'shows success message in flash notice' do
expect(flash[:notice]).to match("You are not registered for #{conference_with_open_registration.title} anymore!")
expect(flash[:notice]).to match('You are not registered for The dog and pony show anymore!')
end
it 'deletes the registration' do
@ -272,11 +323,11 @@ describe ConferenceRegistrationsController, type: :controller do
end
it 'shows error in flash message' do
expect(flash[:error]).to include 'Could not delete your registration'
expect(flash[:error]).to match "Could not delete your registration for The dog and pony show: #{@registration.errors.full_messages.join('. ')}."
end
it 'does not delete the registration' do
expect(Registration.last).to eq @registration
expect(assigns(:registration)).to eq @registration
end
end
end

View file

@ -41,7 +41,7 @@ feature Registration do
click_link 'Unregister'
expect(conference.user_registered?(participant)).to be(false)
expect(current_path).to eq root_path
expect(flash).to eq "You are not registered for #{conference.title} anymore!"
expect(flash).to eq 'You are not registered for The dog and pony show anymore!'
end
scenario 'deletion of registration is unsuccessful' do

View file

@ -59,7 +59,7 @@ describe Registration do
describe '#subscribe_to_conference' do
it 'subscribes to conference' do
expect(subject).to receive(:subscribe_to_conference)
expect(subject.user.subscribed?(subject.conference)).to be_truthy
expect(subject.user.subscribed?(subject.conference)).to be true
end
end