From 7e4d91adaf7d112ee9f097f0466016a186200355 Mon Sep 17 00:00:00 2001 From: Aditya Prakash Date: Sat, 12 Mar 2016 17:46:50 +0530 Subject: [PATCH] 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. --- ...conference_registration_controller_spec.rb | 121 +++++++++++++----- spec/features/conference_registration_spec.rb | 2 +- spec/models/registration_spec.rb | 2 +- 3 files changed, 88 insertions(+), 37 deletions(-) diff --git a/spec/controllers/conference_registration_controller_spec.rb b/spec/controllers/conference_registration_controller_spec.rb index 78870f25..e00e37af 100644 --- a/spec/controllers/conference_registration_controller_spec.rb +++ b/spec/controllers/conference_registration_controller_spec.rb @@ -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 diff --git a/spec/features/conference_registration_spec.rb b/spec/features/conference_registration_spec.rb index 6fa644fe..ff7f000d 100644 --- a/spec/features/conference_registration_spec.rb +++ b/spec/features/conference_registration_spec.rb @@ -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 diff --git a/spec/models/registration_spec.rb b/spec/models/registration_spec.rb index d9ea534f..cf87466b 100644 --- a/spec/models/registration_spec.rb +++ b/spec/models/registration_spec.rb @@ -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