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