From f37d3095e1bc3a991f66c1cf2edcddb13f01b8cc Mon Sep 17 00:00:00 2001 From: AEtherC0r3 Date: Mon, 19 Jun 2017 17:35:46 +0300 Subject: [PATCH] Rework cfp abilities --- .rubocop.yml | 1 + app/models/ability.rb | 7 ++++++- app/views/admin/cfps/index.html.haml | 2 +- spec/features/ability_spec.rb | 14 ++++++++++++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index cff7046b..22e17db0 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -29,3 +29,4 @@ Metrics/ClassLength: Metrics/BlockLength: Exclude: - 'spec/models/conference_spec.rb' + - 'spec/features/ability_spec.rb' diff --git a/app/models/ability.rb b/app/models/ability.rb index bdf554cc..6fa8c12f 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -139,6 +139,11 @@ class Ability cannot :destroy, Venue do |venue| venue.conference.program.events.where.not(room_id: nil).any? end + + # Can't create cfp if there are no available cfp types + cannot [:new, :create], Cfp do |cfp| + cfp.program.remaining_cfp_types.empty? + end end def signed_in_with_organizer_role(user) @@ -166,7 +171,7 @@ class Ability can :manage, Program, conference_id: conf_ids_for_organizer can :manage, Schedule, program: { conference_id: conf_ids_for_organizer } can :manage, EventSchedule, schedule: { program: { conference_id: conf_ids_for_organizer } } - can :manage, Cfp, program: { conference_id: conf_ids_for_organizer} + can :manage, Cfp, program: { conference_id: conf_ids_for_organizer } can :manage, Event, program: { conference_id: conf_ids_for_organizer} can :manage, EventType, program: { conference_id: conf_ids_for_organizer} can :manage, Track, program: { conference_id: conf_ids_for_organizer} diff --git a/app/views/admin/cfps/index.html.haml b/app/views/admin/cfps/index.html.haml index 16ab8e84..0067229c 100644 --- a/app/views/admin/cfps/index.html.haml +++ b/app/views/admin/cfps/index.html.haml @@ -30,7 +30,7 @@ .btn-group = link_to 'Edit', edit_admin_conference_program_cfp_path(@conference.short_title, cfp.id), method: :get, class: 'btn btn-primary' = link_to 'Delete', admin_conference_program_cfp_path(@conference.short_title, cfp.id), method: 'delete', class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete the CfP?' } -- if @program.remaining_cfp_types.length > 0 +- if can? :new, @program.cfps.new .row .col-md-12.text-right = link_to 'Create Call for Papers', new_admin_conference_program_cfp_path(@conference.short_title), class: 'btn btn-primary' diff --git a/spec/features/ability_spec.rb b/spec/features/ability_spec.rb index 162123f4..fe3a3c36 100644 --- a/spec/features/ability_spec.rb +++ b/spec/features/ability_spec.rb @@ -110,7 +110,12 @@ feature 'Has correct abilities' do expect(current_path).to eq(edit_admin_conference_program_path(conference1.short_title)) visit new_admin_conference_program_cfp_path(conference1.short_title) - expect(current_path).to eq(new_admin_conference_program_cfp_path(conference1.short_title)) + expect(current_path).to eq root_path + + conference1.program.cfp.destroy! + visit new_admin_conference_program_cfp_path(conference1.short_title) + expect(current_path).to eq new_admin_conference_program_cfp_path(conference1.short_title) + create(:cfp, program: conference1.program) visit edit_admin_conference_program_cfp_path(conference1.short_title, conference1.program.cfp) expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference1.short_title, conference1.program.cfp)) @@ -322,7 +327,12 @@ feature 'Has correct abilities' do expect(current_path).to eq(edit_admin_conference_program_path(conference2.short_title)) visit new_admin_conference_program_cfp_path(conference2.short_title) - expect(current_path).to eq(new_admin_conference_program_cfp_path(conference2.short_title)) + expect(current_path).to eq root_path + + conference2.program.cfp.destroy! + visit new_admin_conference_program_cfp_path(conference2.short_title) + expect(current_path).to eq new_admin_conference_program_cfp_path(conference2.short_title) + create(:cfp, program: conference2.program) visit edit_admin_conference_program_cfp_path(conference2.short_title, conference2.program.cfp) expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference2.short_title, conference2.program.cfp))