From af08dabc12fd9f37ff8a1ee8f3e47123d1d49d69 Mon Sep 17 00:00:00 2001 From: charliequinn Date: Fri, 19 Aug 2016 14:49:59 +0100 Subject: [PATCH] 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 --- .../conference_registrations_controller.rb | 30 ++++--- app/models/ability.rb | 16 ++-- ...conference_registration_controller_spec.rb | 78 ++++++++++++++----- 3 files changed, 78 insertions(+), 46 deletions(-) diff --git a/app/controllers/conference_registrations_controller.rb b/app/controllers/conference_registrations_controller.rb index 176f7937..7cb38eca 100644 --- a/app/controllers/conference_registrations_controller.rb +++ b/app/controllers/conference_registrations_controller.rb @@ -1,6 +1,7 @@ class ConferenceRegistrationsController < ApplicationController - before_filter :authenticate_user!, except: [:new, :create] + before_action :authenticate_user!, unless: :allow_guests? load_resource :conference, find_by: :short_title + before_action :user_already_registered, only: :new authorize_resource :conference_registrations, class: Registration, except: [:new, :create] before_action :set_registration, only: [:edit, :update, :destroy, :show] @@ -8,21 +9,6 @@ class ConferenceRegistrationsController < ApplicationController @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." - # 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 = @registration.build_user end @@ -96,6 +82,18 @@ class ConferenceRegistrationsController < ApplicationController 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 @registration = Registration.find_by(conference: @conference, user: current_user) unless @registration diff --git a/app/models/ability.rb b/app/models/ability.rb index 760f43fe..4e255200 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -45,16 +45,17 @@ class Ability # can view Commercials of confirmed Events can :show, Commercial, commercialable_type: 'Event', commercialable_id: Event.where(state: 'confirmed').pluck(:id) can [:show, :create], User + + can [:new, :create], Registration do |registration| + conference = registration.conference + conference.registration_open? && registration.new_record? && !conference.registration_limit_exceeded? + end + unless ENV['OSEM_ICHAIN_ENABLED'] == 'true' can :show, Registration do |registration| registration.new_record? end - can [:new, :create], Registration do |registration| - conference = registration.conference - conference.registration_open? && registration.new_record? && !conference.registration_limit_exceeded? - end - can :show, Event do |event| event.new_record? end @@ -74,11 +75,6 @@ class Ability 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 :manage, TicketPurchase, user_id: user.id can [:new, :create], Payment, user_id: user.id diff --git a/spec/controllers/conference_registration_controller_spec.rb b/spec/controllers/conference_registration_controller_spec.rb index 377e884e..4c62b367 100644 --- a/spec/controllers/conference_registration_controller_spec.rb +++ b/spec/controllers/conference_registration_controller_spec.rb @@ -44,6 +44,10 @@ describe ConferenceRegistrationsController, type: :controller do 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 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." end @@ -213,37 +217,71 @@ describe ConferenceRegistrationsController, type: :controller do context 'user is not signed in' do describe 'GET #new' do - before do - @registration_period = create(:registration_period, conference: conference) - end - - context 'OSEM_ICHAIN_ENABLED is true' do + context 'registration period open' do before do - stub_const('ENV', ENV.to_hash.merge('OSEM_ICHAIN_ENABLED' => 'true')) - get :new, conference_id: conference.short_title + @registration_period = create(:registration_period, conference: conference) end - it 'redirects to root' do - expect(response).to redirect_to root_path + 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 cannot register and they need to sign in' do + expect(flash[:alert]).to eq 'You need to sign in or sign up before continuing.' + end end - 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?" + 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 'user variable exists' do + expect(assigns(:user)).not_to be_nil + end + + it 'renders the new template' do + expect(response).to render_template('new') + end 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 + 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 - it 'user variable exists' do - expect(assigns(:user)).not_to be_nil - 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 'renders the new template' do - expect(response).to render_template('new') + 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