Merge 8e8d049af0 into 1106f4e227
This commit is contained in:
commit
5fc5aba344
11 changed files with 68 additions and 17 deletions
|
|
@ -30,6 +30,7 @@ module Admin
|
||||||
def edit; end
|
def edit; end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
sign_out @user
|
||||||
@user.destroy
|
@user.destroy
|
||||||
redirect_to admin_users_path, notice: 'User got deleted'
|
redirect_to admin_users_path, notice: 'User got deleted'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,12 @@ class RegistrationsController < Devise::RegistrationsController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
sign_out current_user
|
||||||
|
current_user.destroy
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def after_update_path_for(resource)
|
def after_update_path_for(resource)
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ class Ability
|
||||||
|
|
||||||
signed_in(user) # Inherit abilities from signed user
|
signed_in(user) # Inherit abilities from signed user
|
||||||
# User with role
|
# User with role
|
||||||
can :manage, User if user.is_admin # ??? || (user.has_role? :organizer, :any)
|
can :manage, User if user.is_admin || (user.has_role? :organizer, :any)
|
||||||
can [:new, :create], Conference if user.is_admin || (user.has_role? :organizer, :any)
|
can [:new, :create], Conference if user.is_admin || (user.has_role? :organizer, :any)
|
||||||
can [:index, :show, :gallery_photos], Conference
|
can [:index, :show, :gallery_photos], Conference
|
||||||
can :manage, Conference, id: conf_ids_for_organizer
|
can :manage, Conference, id: conf_ids_for_organizer
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,7 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_role
|
def setup_role
|
||||||
self.is_admin = true if User.count == 0
|
self.is_admin = true if User.count == 1
|
||||||
roles << Role.where(name: 'Admin') if User.count == 1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Gets the roles of the user, groups them by role.name and returns the resource(s) of each role
|
# Gets the roles of the user, groups them by role.name and returns the resource(s) of each role
|
||||||
|
|
@ -132,6 +131,23 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
if self.events.blank?
|
||||||
|
super
|
||||||
|
else
|
||||||
|
self.events.each do |event|
|
||||||
|
if event.start_time.nil? || event.start_time > DateTime.now
|
||||||
|
event.destroy
|
||||||
|
else
|
||||||
|
event_role = event.event_users.where(user: self).first.event_role
|
||||||
|
event.event_users.where(user: self).destroy_all
|
||||||
|
EventUser.create(user: User.find_by(email: 'deleted@localhost.osem'), event: event, event_role: event_role)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def biography_limit
|
def biography_limit
|
||||||
|
|
|
||||||
|
|
@ -53,4 +53,13 @@
|
||||||
disabled: true, class: 'btn btn-primary disabled btn-danger', role: 'button'
|
disabled: true, class: 'btn btn-primary disabled btn-danger', role: 'button'
|
||||||
- else
|
- else
|
||||||
= link_to 'Delete',admin_user_path(user), method: :delete,
|
= link_to 'Delete',admin_user_path(user), method: :delete,
|
||||||
data: { confirm: 'Are you sure ?' }, class: 'btn btn-primary btn-danger'
|
data: { confirm: 'Are you sure ?' }, class: 'btn btn-primary btn-danger', id: "user-delete-#{user.id}"
|
||||||
|
|
||||||
|
|
||||||
|
:javascript
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#users').dataTable( {
|
||||||
|
"bPaginate": false,
|
||||||
|
"bLengthChange": false
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
|
||||||
|
|
@ -33,3 +33,4 @@
|
||||||
= f.input :current_password, input_html: {autocomplete: 'off'},
|
= f.input :current_password, input_html: {autocomplete: 'off'},
|
||||||
hint: '(we need your current password to confirm password or email changes)'
|
hint: '(we need your current password to confirm password or email changes)'
|
||||||
= f.action :submit, as: :button, label: 'Update', button_html: {class: 'btn btn-primary'}
|
= f.action :submit, as: :button, label: 'Update', button_html: {class: 'btn btn-primary'}
|
||||||
|
= link_to 'Delete', registration_path(resource_name), method: :delete , data: { confirm: 'Are you sure ?'},class: "btn btn-primary btn-danger"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ describe Admin::ConferenceController do
|
||||||
|
|
||||||
# It is necessary to use bang version of let to build roles before user
|
# It is necessary to use bang version of let to build roles before user
|
||||||
let(:conference) { create(:conference) }
|
let(:conference) { create(:conference) }
|
||||||
let!(:first_user) { create(:user) }
|
let!(:deleted_user) { create(:deleted_user) }
|
||||||
|
let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin.
|
||||||
let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) }
|
let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) }
|
||||||
|
|
||||||
let(:organizer) { create(:user, role_ids: organizer_role.id) }
|
let(:organizer) { create(:user, role_ids: organizer_role.id) }
|
||||||
|
|
|
||||||
|
|
@ -22,5 +22,9 @@ FactoryGirl.define do
|
||||||
factory :organizer do
|
factory :organizer do
|
||||||
after(:create) { |user| user.role_ids = create(:organizer_role).id }
|
after(:create) { |user| user.role_ids = create(:organizer_role).id }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :deleted_user do
|
||||||
|
after(:create) { |user| user.email = 'deleted@localhost.osem', user.name = 'User deleted', user.biography = 'Data is no longer available for deleted user.' }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,31 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
feature User do
|
feature User do
|
||||||
|
|
||||||
shared_examples 'admin ability' do
|
shared_examples 'admin ability' do
|
||||||
scenario 'deletes a user', feature: true, js: true do
|
scenario 'deletes a user', feature: true, js: true do
|
||||||
sign_in(create(:admin))
|
sign_in(create(:admin))
|
||||||
|
@user = create(:user)
|
||||||
visit admin_users_path
|
visit admin_users_path
|
||||||
expected_count = User.count - 1
|
expected_count = User.count - 1
|
||||||
page.all('btn btn-primary btn-danger') do
|
find("#user-delete-#{@user.id}").click
|
||||||
click_link 'Delete'
|
|
||||||
page.evaluate_script('window.confirm = function() { return true; }')
|
page.evaluate_script('window.confirm = function() { return true; }')
|
||||||
page.click('OK')
|
|
||||||
expect(flash).to eq('User got deleted')
|
expect(flash).to eq('User got deleted')
|
||||||
expect(User.count).to eq(expected_count)
|
expect(User.count).to eq(expected_count)
|
||||||
|
sign_out
|
||||||
end
|
end
|
||||||
|
scenario 'deletes a user with scheduled events', feature: true, js: true do
|
||||||
|
sign_in(create(:admin))
|
||||||
|
@user = create(:user)
|
||||||
|
deleted_user = create(:deleted_user, email:'deleted@localhost.osem')
|
||||||
|
@user.events << create(:event, start_time: DateTime.now)
|
||||||
|
event = @user.events.first
|
||||||
|
visit admin_users_path
|
||||||
|
expected_count = User.count - 1
|
||||||
|
find("#user-delete-#{@user.id}").click
|
||||||
|
page.evaluate_script('window.confirm = function() { return true; }')
|
||||||
|
expect(flash).to eq('User got deleted')
|
||||||
|
expect(User.count).to eq(expected_count)
|
||||||
|
expect(event.event_users.map{|x| User.find(x.user_id)}).to include(deleted_user)
|
||||||
sign_out
|
sign_out
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ require 'cancan/matchers'
|
||||||
describe 'User' do
|
describe 'User' do
|
||||||
describe 'Abilities' do
|
describe 'Abilities' do
|
||||||
subject(:ability){ Ability.new(user) }
|
subject(:ability){ Ability.new(user) }
|
||||||
let!(:first_user) { create(:user) } # automatically becomes admin
|
let!(:deleted_user) { create(:deleted_user) }
|
||||||
|
let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin.
|
||||||
let(:user){ nil }
|
let(:user){ nil }
|
||||||
let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) }
|
let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) }
|
||||||
let(:conference_public) { create(:conference, splashpage: create(:splashpage, public: true)) }
|
let(:conference_public) { create(:conference, splashpage: create(:splashpage, public: true)) }
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ require 'spec_helper'
|
||||||
describe User do
|
describe User do
|
||||||
|
|
||||||
# It is necessary to use bang version of let to build roles before user
|
# It is necessary to use bang version of let to build roles before user
|
||||||
let!(:user_admin) { create(:user) }
|
let!(:deleted_user) { create(:deleted_user) }
|
||||||
let!(:admin) { create(:admin) }
|
let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin.
|
||||||
let!(:participant) { create(:user) }
|
let!(:participant) { create(:user) }
|
||||||
let!(:conference) { create(:conference) }
|
let!(:conference) { create(:conference) }
|
||||||
let!(:organizer_role) { create(:organizer_role, resource: conference) }
|
let!(:organizer_role) { create(:organizer_role, resource: conference) }
|
||||||
|
|
@ -13,7 +13,7 @@ describe User do
|
||||||
let!(:user) { create(:user) }
|
let!(:user) { create(:user) }
|
||||||
|
|
||||||
it 'returns the correct role' do
|
it 'returns the correct role' do
|
||||||
expect(user_admin.is_admin).to eq(true)
|
expect(admin_user.is_admin).to eq(true)
|
||||||
expect(organizer.roles.first).to eq(organizer_role)
|
expect(organizer.roles.first).to eq(organizer_role)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue