diff --git a/app/models/ability.rb b/app/models/ability.rb index b71bee97..bd30a8fd 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -94,6 +94,7 @@ class Ability signed_in_with_volunteers_coordinator_role(user) if user.has_role? :volunteer_coordinator, :any # for users with any role + can :access, Admin can [:show], Conference can :index, Commercial, commercialable_type: 'Conference' cannot [:edit, :update, :destroy], Question, global: true diff --git a/app/views/layouts/_user_menu.html.haml b/app/views/layouts/_user_menu.html.haml index 5c22be72..da55935a 100644 --- a/app/views/layouts/_user_menu.html.haml +++ b/app/views/layouts/_user_menu.html.haml @@ -21,10 +21,7 @@ = link_to(destroy_user_session_path, :method=>'delete') do %span.fa.fa-minus Sign out -- if current_user.is_admin || (current_user.has_any_role? :admin, { :name => :organizer, :resource => :any }, - { :name => :cfp, :resource => :any }, - { :name => :info_desk, :resource => :any }, - { :name => :volunteer_coordinator, :resource => :any }) +- if can? :access, Admin %li.divider %li = link_to(admin_conference_index_path()) do diff --git a/spec/controllers/admin/comments_controller_spec.rb b/spec/controllers/admin/comments_controller_spec.rb index b8140640..b3ff0914 100644 --- a/spec/controllers/admin/comments_controller_spec.rb +++ b/spec/controllers/admin/comments_controller_spec.rb @@ -2,16 +2,19 @@ require 'spec_helper' describe Admin::CommentsController, type: :controller do + # It is necessary to use bang version of let to build roles before user + let(:conference) { create(:conference) } + let!(:first_user) { create(:user) } + let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) } + let(:organizer) { create(:user, role_ids: organizer_role.id, last_sign_in_at: Time.now - 1.day) } + let(:participant) { create(:user) } + let(:event) { create(:event, conference: conference) } + let(:comment) { create(:comment, commentable_type: 'Event', commentable_id: event.id) } + context 'not logged in user' do describe 'GET #index' do it 'renders the :index template' do - conference = create(:conference) - first_user = create(:user) - organizer_role = create(:role, name: 'organizer', resource: conference) - organizer = create(:user, role_ids: organizer_role.id) - event = create(:event, conference: conference) - comment = create(:comment, commentable_type: 'Event', commentable_id: event.id) - + comment get :index expect(response).to redirect_to(user_session_path) end @@ -19,16 +22,12 @@ describe Admin::CommentsController, type: :controller do end context 'logged in as admin, organizer or cfp' do + before :each do + sign_in(organizer) + end describe 'GET #index' do it 'populates a hash with comments' do - conference = create(:conference) - first_user = create(:user) - organizer_role = create(:role, name: 'organizer', resource: conference) - organizer = create(:user, role_ids: organizer_role.id) - event = create(:event, conference: conference) - comment = create(:comment, commentable_type: 'Event', commentable_id: event.id) - sign_in(organizer) - + comment get :index expect(assigns(:comments)).to be_a(Hash) # assigns(:comments).first returns an array of first pair key-value from hash. @@ -36,26 +35,12 @@ describe Admin::CommentsController, type: :controller do expect(assigns(:comments).first.first.title).to eq(comment.commentable.conference.title) end it 'has status 200: OK' do - conference = create(:conference) - first_user = create(:user) - organizer_role = create(:role, name: 'organizer', resource: conference) - organizer = create(:user, role_ids: organizer_role.id) - event = create(:event, conference: conference) - comment = create(:comment, commentable_type: 'Event', commentable_id: event.id) - sign_in(organizer) - + comment get :index expect(response).to have_http_status(:ok) end it 'renders the :index template' do - conference = create(:conference) - first_user = create(:user) - organizer_role = create(:role, name: 'organizer', resource: conference) - organizer = create(:user, role_ids: organizer_role.id) - event = create(:event, conference: conference) - comment = create(:comment, commentable_type: 'Event', commentable_id: event.id) - sign_in(organizer) - + comment get :index expect(response).to render_template(:index) end @@ -65,13 +50,8 @@ describe Admin::CommentsController, type: :controller do context 'logged in with any other role or normal user' do describe 'GET#index' do it 'requires organizer privileges' do - conference = create(:conference) - first_user = create(:user) - participant = create(:user) - event = create(:event, conference: conference) - comment = create(:comment, commentable_type: 'Event', commentable_id: event.id) sign_in(participant) - + comment get :index expect(response).to redirect_to(root_path) expect(flash[:alert]).to match('You are not authorized to access this area!') diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 1f566252..e5c0b7c1 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -6,7 +6,6 @@ FactoryGirl.define do sequence(:username) { |n| "username#{n}" } password 'changeme' password_confirmation 'changeme' - last_sign_in_at { Time.now - 10.days } confirmed_at { Time.now } biography <<-EOS Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim