From 361e149e86b9734efe99dddd5b7bc5f23c4c4db1 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 16:40:48 +0300 Subject: [PATCH 1/6] allow for organizers to also manage users --- app/models/ability.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/ability.rb b/app/models/ability.rb index 559c46c3..141651d4 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -67,7 +67,7 @@ class Ability signed_in(user) # Inherit abilities from signed user # 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 [:index, :show, :gallery_photos], Conference can :manage, Conference, id: conf_ids_for_organizer From c546229a163960f400155fce9f57db8c7329c110 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 20:42:34 +0300 Subject: [PATCH 2/6] make second user admin --- app/models/user.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 08d70dad..02d61183 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -50,8 +50,7 @@ class User < ActiveRecord::Base end def setup_role - self.is_admin = true if User.count == 0 - roles << Role.where(name: 'Admin') if User.count == 1 + self.is_admin = true if User.count == 1 end # Gets the roles of the user, groups them by role.name and returns the resource(s) of each role From 6ab2de4dd99c19b05c1145c2399070c8df8ee120 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 22:01:04 +0300 Subject: [PATCH 3/6] address the issue of second user becoming an admin automatically. --- spec/controllers/admin/conferences_controller_spec.rb | 3 ++- spec/factories/users.rb | 6 ++++++ spec/models/ability_spec.rb | 3 ++- spec/models/user_spec.rb | 6 +++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index d6a93804..249689d3 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -4,7 +4,8 @@ describe Admin::ConferenceController 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!(: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) { create(:user, role_ids: organizer_role.id) } diff --git a/spec/factories/users.rb b/spec/factories/users.rb index d404aefb..ce82fb78 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -22,5 +22,11 @@ FactoryGirl.define do factory :organizer do after(:create) { |user| user.role_ids = create(:organizer_role).id } end + + factory :deleted_user do + after(:create) { |user| user.email = 'deleted@localhost.osem', + name = 'User deleted', + biography = 'Data is no longer available for deleted user.' } + end end end diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index a95613ba..082ba894 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -4,7 +4,8 @@ require 'cancan/matchers' describe 'User' do describe 'Abilities' do 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(:conference_not_public) { create(:conference, make_conference_public: false) } let(:conference_public) { create(:conference, make_conference_public: true)} diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fbae0ef3..05ccc045 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' describe User do # It is necessary to use bang version of let to build roles before user - let!(:user_admin) { create(:user) } - let!(:admin) { create(:admin) } + let!(:deleted_user) { create(:deleted_user) } + let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin. let!(:participant) { create(:user) } let!(:conference) { create(:conference) } let!(:organizer_role) { create(:organizer_role, resource: conference) } @@ -13,7 +13,7 @@ describe User do let!(:user) { create(:user) } 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) end From a2b8806e35ab34db3ea264750b46b907e9eb1fc5 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 22:20:28 +0300 Subject: [PATCH 4/6] fix --- spec/factories/users.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index ce82fb78..e1aa7955 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -24,9 +24,7 @@ FactoryGirl.define do end factory :deleted_user do - after(:create) { |user| user.email = 'deleted@localhost.osem', - name = 'User deleted', - biography = 'Data is no longer available for deleted user.' } + 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 From 6890802a783ffc419382973e6bcb68bf30d299d7 Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Sun, 10 Aug 2014 11:41:35 +0530 Subject: [PATCH 5/6] User deletion --- app/controllers/admin/users_controller.rb | 1 + app/controllers/registrations_controller.rb | 6 +++++ app/models/event.rb | 1 - app/models/event_user.rb | 6 +++++ app/models/user.rb | 15 +++++++++++ app/views/admin/users/index.html.haml | 12 ++++++++- app/views/devise/registrations/edit.html.haml | 1 + spec/features/user_spec.rb | 27 ++++++++++++++----- 8 files changed, 60 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index d5a52787..610fffdf 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -30,6 +30,7 @@ module Admin def edit; end def destroy + sign_out @user @user.destroy redirect_to admin_users_path, notice: 'User got deleted' end diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index e19a0a18..8731cbb3 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -54,6 +54,12 @@ class RegistrationsController < Devise::RegistrationsController end end + def destroy + sign_out current_user + current_user.destroy + redirect_to root_path + end + protected def after_update_path_for(resource) diff --git a/app/models/event.rb b/app/models/event.rb index 92bfeb15..5cb9c4ba 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -205,7 +205,6 @@ class Event < ActiveRecord::Base end alert end - private def abstract_limit diff --git a/app/models/event_user.rb b/app/models/event_user.rb index 2f71d330..be44a003 100644 --- a/app/models/event_user.rb +++ b/app/models/event_user.rb @@ -5,4 +5,10 @@ class EventUser < ActiveRecord::Base belongs_to :event belongs_to :user + + def self.create_deleted_eventuser(user,event) + event_role = event.event_users.where(user: user).first.event_role + event.event_users.where(user: user).destroy_all + EventUser.create(user: User.find_by(email: 'deleted@localhost.osem'), event: event, event_role: event_role) + end end diff --git a/app/models/user.rb b/app/models/user.rb index 02d61183..88cbf054 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -122,6 +122,21 @@ class User < ActiveRecord::Base 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 + EventUser.create_deleted_eventuser(self,event) + end + end + super + end + end + private def biography_limit diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index dd004b4a..032c7d8e 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -53,4 +53,14 @@ disabled: true, class: 'btn btn-primary disabled btn-danger', role: 'button' - else = 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 + } ); + } ); +>>>>>>> User deletion diff --git a/app/views/devise/registrations/edit.html.haml b/app/views/devise/registrations/edit.html.haml index b7714d18..578d8fe7 100644 --- a/app/views/devise/registrations/edit.html.haml +++ b/app/views/devise/registrations/edit.html.haml @@ -33,3 +33,4 @@ = f.input :current_password, input_html: {autocomplete: 'off'}, 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'} + = link_to 'Delete', registration_path(resource_name), method: :delete , data: { confirm: 'Are you sure ?'},class: "btn btn-primary btn-danger" diff --git a/spec/features/user_spec.rb b/spec/features/user_spec.rb index 6a7b12f6..e105cbf1 100644 --- a/spec/features/user_spec.rb +++ b/spec/features/user_spec.rb @@ -5,15 +5,28 @@ feature User do shared_examples 'admin ability' do scenario 'deletes a user', feature: true, js: true do sign_in(create(:admin)) + @user = create(:user) visit admin_users_path expected_count = User.count - 1 - page.all('btn btn-primary btn-danger') do - click_link 'Delete' - page.evaluate_script('window.confirm = function() { return true; }') - page.click('OK') - expect(flash).to eq('User got deleted') - expect(User.count).to eq(expected_count) - end + 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) + sign_out + end + scenario 'deletes a user with scheduled events', feature: true, js: true do + sign_in(create(:admin)) + @user = create(:user) + deleted_user = create(:user, email: 'deleted@localhost.osem', name: 'User deleted', biography: 'Data is no longer available for deleted user.') + @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 end end From 8e8d049af03e47bba91fbcea3a04d6973510cafb Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Thu, 11 Sep 2014 19:01:48 +0530 Subject: [PATCH 6/6] User deletion fixes --- app/models/event.rb | 1 + app/models/event_user.rb | 6 ------ app/models/user.rb | 4 +++- app/views/admin/users/index.html.haml | 1 - spec/features/user_spec.rb | 3 +-- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index 5cb9c4ba..92bfeb15 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -205,6 +205,7 @@ class Event < ActiveRecord::Base end alert end + private def abstract_limit diff --git a/app/models/event_user.rb b/app/models/event_user.rb index be44a003..2f71d330 100644 --- a/app/models/event_user.rb +++ b/app/models/event_user.rb @@ -5,10 +5,4 @@ class EventUser < ActiveRecord::Base belongs_to :event belongs_to :user - - def self.create_deleted_eventuser(user,event) - event_role = event.event_users.where(user: user).first.event_role - event.event_users.where(user: user).destroy_all - EventUser.create(user: User.find_by(email: 'deleted@localhost.osem'), event: event, event_role: event_role) - end end diff --git a/app/models/user.rb b/app/models/user.rb index 88cbf054..547900e5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -130,7 +130,9 @@ class User < ActiveRecord::Base if event.start_time.nil? || event.start_time > DateTime.now event.destroy else - EventUser.create_deleted_eventuser(self,event) + 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 diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 032c7d8e..d604f5b6 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -63,4 +63,3 @@ "bLengthChange": false } ); } ); ->>>>>>> User deletion diff --git a/spec/features/user_spec.rb b/spec/features/user_spec.rb index e105cbf1..2ee21353 100644 --- a/spec/features/user_spec.rb +++ b/spec/features/user_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' feature User do - shared_examples 'admin ability' do scenario 'deletes a user', feature: true, js: true do sign_in(create(:admin)) @@ -17,7 +16,7 @@ feature User do scenario 'deletes a user with scheduled events', feature: true, js: true do sign_in(create(:admin)) @user = create(:user) - deleted_user = create(:user, email: 'deleted@localhost.osem', name: 'User deleted', biography: 'Data is no longer available for deleted 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