Update ConferenceRegistrationsController#new

- authenticate on all controller actions unless (OSEM_ICHAIN_ENABLED != true and
  action is 'new' or 'create')

- before_filter rename to before_action

- addition of before_action :user_already_registered on :new action (redirects
  to edit if user already registered)

- increased specs
This commit is contained in:
charliequinn 2016-08-19 14:49:59 +01:00
parent c6be0999b9
commit af08dabc12
3 changed files with 78 additions and 46 deletions

View file

@ -1,6 +1,7 @@
class ConferenceRegistrationsController < ApplicationController class ConferenceRegistrationsController < ApplicationController
before_filter :authenticate_user!, except: [:new, :create] before_action :authenticate_user!, unless: :allow_guests?
load_resource :conference, find_by: :short_title load_resource :conference, find_by: :short_title
before_action :user_already_registered, only: :new
authorize_resource :conference_registrations, class: Registration, except: [:new, :create] authorize_resource :conference_registrations, class: Registration, except: [:new, :create]
before_action :set_registration, only: [:edit, :update, :destroy, :show] before_action :set_registration, only: [:edit, :update, :destroy, :show]
@ -8,21 +9,6 @@ class ConferenceRegistrationsController < ApplicationController
@registration = Registration.new(conference_id: @conference.id) @registration = Registration.new(conference_id: @conference.id)
authorize! :new, @registration, message: "Sorry, you can not register for #{@conference.title}. Registration limit exceeded or the registration is not open." authorize! :new, @registration, message: "Sorry, you can not register for #{@conference.title}. Registration limit exceeded or the registration is not open."
# Redirect to registration edit when user is already registered
if @conference.user_registered?(current_user)
redirect_to edit_conference_conference_registration_path(@conference.short_title)
return
# ichain does not allow us to create users during registration
elsif (ENV['OSEM_ICHAIN_ENABLED'] == 'true') && !current_user
redirect_to root_path, alert: 'You need to sign in or sign up before continuing.'
return
end
# avoid openid sign_in to redirect to register/new when the sign_in user had already a registration
if current_user && @conference.user_registered?(current_user)
redirect_to edit_conference_conference_registration_path(@conference.short_title)
end
# @user variable needs to be set so that _sign_up_form_embedded works properly # @user variable needs to be set so that _sign_up_form_embedded works properly
@user = @registration.build_user @user = @registration.build_user
end end
@ -96,6 +82,18 @@ class ConferenceRegistrationsController < ApplicationController
protected protected
def allow_guests?
ENV['OSEM_ICHAIN_ENABLED'] != 'true' && params[:action].in?(['new', 'create'])
end
def user_already_registered
# Redirect to registration edit when user is already registered
if @conference.user_registered?(current_user)
redirect_to edit_conference_conference_registration_path(@conference.short_title)
return
end
end
def set_registration def set_registration
@registration = Registration.find_by(conference: @conference, user: current_user) @registration = Registration.find_by(conference: @conference, user: current_user)
unless @registration unless @registration

View file

@ -45,16 +45,17 @@ class Ability
# can view Commercials of confirmed Events # can view Commercials of confirmed Events
can :show, Commercial, commercialable_type: 'Event', commercialable_id: Event.where(state: 'confirmed').pluck(:id) can :show, Commercial, commercialable_type: 'Event', commercialable_id: Event.where(state: 'confirmed').pluck(:id)
can [:show, :create], User can [:show, :create], User
unless ENV['OSEM_ICHAIN_ENABLED'] == 'true'
can :show, Registration do |registration|
registration.new_record?
end
can [:new, :create], Registration do |registration| can [:new, :create], Registration do |registration|
conference = registration.conference conference = registration.conference
conference.registration_open? && registration.new_record? && !conference.registration_limit_exceeded? conference.registration_open? && registration.new_record? && !conference.registration_limit_exceeded?
end end
unless ENV['OSEM_ICHAIN_ENABLED'] == 'true'
can :show, Registration do |registration|
registration.new_record?
end
can :show, Event do |event| can :show, Event do |event|
event.new_record? event.new_record?
end end
@ -74,11 +75,6 @@ class Ability
can :manage, Registration, user_id: user.id can :manage, Registration, user_id: user.id
can [:new, :create], Registration do |registration|
conference = registration.conference
conference.registration_open? && !conference.registration_limit_exceeded?
end
can :index, Ticket can :index, Ticket
can :manage, TicketPurchase, user_id: user.id can :manage, TicketPurchase, user_id: user.id
can [:new, :create], Payment, user_id: user.id can [:new, :create], Payment, user_id: user.id

View file

@ -44,6 +44,10 @@ describe ConferenceRegistrationsController, type: :controller do
get :new, conference_id: conference.short_title get :new, conference_id: conference.short_title
end end
it 'redirects to root path' do
expect(response).to redirect_to root_path
end
it 'shows flash alert telling user they are unable to register' do it 'shows flash alert telling user they are unable to register' do
expect(flash[:alert]).to eq "Sorry, you can not register for #{conference.title}. Registration limit exceeded or the registration is not open." expect(flash[:alert]).to eq "Sorry, you can not register for #{conference.title}. Registration limit exceeded or the registration is not open."
end end
@ -213,6 +217,7 @@ describe ConferenceRegistrationsController, type: :controller do
context 'user is not signed in' do context 'user is not signed in' do
describe 'GET #new' do describe 'GET #new' do
context 'registration period open' do
before do before do
@registration_period = create(:registration_period, conference: conference) @registration_period = create(:registration_period, conference: conference)
end end
@ -224,11 +229,11 @@ describe ConferenceRegistrationsController, type: :controller do
end end
it 'redirects to root' do it 'redirects to root' do
expect(response).to redirect_to root_path expect(response).to redirect_to new_user_session_path
end end
it 'shows flash alert telling user they cannot register and they need to sign in' do it 'shows flash alert telling user they cannot register and they need to sign in' do
expect(flash[:alert]).to eq "Sorry, you can not register for #{conference.title}. Registration limit exceeded or the registration is not open. Maybe you need to sign in?" expect(flash[:alert]).to eq 'You need to sign in or sign up before continuing.'
end end
end end
@ -247,6 +252,39 @@ describe ConferenceRegistrationsController, type: :controller do
end end
end end
end end
context 'registration period not open' do
context 'OSEM_ICHAIN_ENABLED is true' do
before do
stub_const('ENV', ENV.to_hash.merge('OSEM_ICHAIN_ENABLED' => 'true'))
get :new, conference_id: conference.short_title
end
it 'redirects to root' do
expect(response).to redirect_to new_user_session_path
end
it 'shows flash alert telling user they need to sign in' do
expect(flash[:alert]).to eq 'You need to sign in or sign up before continuing.'
end
end
context 'OSEM_ICHAIN_ENABLED is false' do
before do
stub_const('ENV', ENV.to_hash.merge('OSEM_ICHAIN_ENABLED' => 'false'))
get :new, conference_id: conference.short_title
end
it 'redirects to root path' do
expect(response).to redirect_to root_path
end
it 'shows flash alert telling user they cannot register' do
expect(flash[:alert]).to eq "Sorry, you can not register for #{conference.title}. Registration limit exceeded or the registration is not open. Maybe you need to sign in?"
end
end
end
end
end end
end end