diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index 5fdbeecd..d46cb219 100644 --- a/app/controllers/schedules_controller.rb +++ b/app/controllers/schedules_controller.rb @@ -1,17 +1,14 @@ class SchedulesController < ApplicationController - load_and_authorize_resource protect_from_forgery with: :null_session before_action :respond_to_options load_resource :conference, find_by: :short_title load_resource :program, through: :conference, singleton: true, except: :index + before_action :presence_of_selected_schedule + load_and_authorize_resource :selected_schedule, through: :program, singleton: true def show @rooms = @conference.venue.rooms if @conference.venue schedules = @program.selected_event_schedules - unless schedules - redirect_to events_conference_schedule_path(@conference.short_title) - end - @events_xml = schedules.map(&:event).group_by{ |event| event.time.to_date } if schedules @dates = @conference.start_date..@conference.end_date @step_minutes = @program.schedule_interval.minutes @@ -49,4 +46,9 @@ class SchedulesController < ApplicationController format.html { head :ok } end if request.options? end + + def presence_of_selected_schedule + return if @program.selected_event_schedules + redirect_to root_path, notice: 'Program is yet to be scheduled.' + end end diff --git a/app/models/ability.rb b/app/models/ability.rb index 40965719..807d99ed 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -34,10 +34,6 @@ class Ability can [:show], Conference do |conference| conference.splashpage && conference.splashpage.public == true end - # Can view the schedule - can [:schedule, :events], Conference do |conference| - conference.program.cfp && conference.program.schedule_public - end can :show, Event do |event| event.state == 'confirmed' diff --git a/app/views/conferences/_conference_details.html.haml b/app/views/conferences/_conference_details.html.haml index d5bafad4..274c28eb 100644 --- a/app/views/conferences/_conference_details.html.haml +++ b/app/views/conferences/_conference_details.html.haml @@ -21,7 +21,7 @@ - if !@conference || @conference != conference - if conference.splashpage && conference.splashpage.public = link_to "View Conference", conference_path(conference.short_title), class: 'btn btn-default' - - if conference.program and conference.program.schedule_public + - if conference.program and conference.program.selected_event_schedules and conference.program.schedule_public = link_to "Schedule", conference_schedule_path(conference.short_title), class: 'btn btn-default' - if conference.registration_open? - if conference.user_registered?(current_user) diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index 02aa4882..1169d6d3 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -23,6 +23,10 @@ describe 'User' do let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) } let(:conference_public) { create(:full_conference, splashpage: create(:splashpage, public: true)) } + # Other schedule which is either public or not_public. + let(:schedule_public) { create(:schedule, program: create(:program, schedule_public: true))} + let(:schedule_not_public) { create(:schedule, program: create(:program, schedule_public: false))} + let(:event_confirmed) { create(:event, state: 'confirmed') } let(:event_unconfirmed) { create(:event) } @@ -51,12 +55,8 @@ describe 'User' do it{ should be_able_to(:show, conference_public)} it{ should_not be_able_to(:show, conference_not_public)} - it do - conference_public.program.schedule_public = true - conference_public.program.save - should be_able_to(:schedule, conference_public) - end - it{ should_not be_able_to(:schedule, conference_not_public)} + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } it{ should be_able_to(:show, event_confirmed)} it{ should_not be_able_to(:show, event_unconfirmed)} @@ -102,6 +102,9 @@ describe 'User' do it{ should_not be_able_to(:new, Registration.new(conference_id: conference_with_closed_registration.id))} it{ should_not be_able_to(:create, Registration.new(conference_id: conference_with_closed_registration.id))} + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } + it{ should be_able_to(:index, Ticket) } it{ should be_able_to(:manage, TicketPurchase.new(user_id: user.id)) } @@ -136,6 +139,9 @@ describe 'User' do it{ should be_able_to(:manage, :all) } it{ should_not be_able_to(:destroy, my_conference.program) } it{ should_not be_able_to(:destroy, my_venue) } + + it{ should be_able_to(:show, schedule_public) } + it{ should be_able_to(:show, schedule_not_public) } end shared_examples 'user with any role' do @@ -244,6 +250,9 @@ describe 'User' do it{ should be_able_to(:manage, my_conference.tickets.first) } it{ should_not be_able_to(:manage, conference_public.tickets.first) } + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } + it{ should be_able_to(:manage, my_registration) } it{ should_not be_able_to(:manage, other_registration) } @@ -315,6 +324,9 @@ describe 'User' do it{ should_not be_able_to(:manage, my_conference.tickets.first) } it{ should_not be_able_to(:manage, conference_public.tickets.first) } + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } + it{ should_not be_able_to(:manage, my_registration) } it{ should_not be_able_to(:manage, other_registration) } @@ -382,6 +394,9 @@ describe 'User' do it{ should_not be_able_to(:manage, my_conference.tickets.first) } it{ should_not be_able_to(:manage, conference_public.tickets.first) } + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } + it{ should be_able_to(:manage, my_registration) } it{ should_not be_able_to(:manage, other_registration) } @@ -449,6 +464,9 @@ describe 'User' do it{ should_not be_able_to(:manage, my_conference.tickets.first) } it{ should_not be_able_to(:manage, conference_public.tickets.first) } + it{ should be_able_to(:show, schedule_public) } + it{ should_not be_able_to(:show, schedule_not_public) } + it{ should_not be_able_to(:manage, registration) } it{ should_not be_able_to(:manage, other_registration) }