diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index cbd8300d..77eee354 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -36,6 +36,7 @@ module Admin def destroy @user = User.find(params[:id]) + @user.events.destroy_all @user.destroy redirect_to admin_users_path, notice: 'User got deleted' end diff --git a/app/models/user.rb b/app/models/user.rb index afcce0b4..cd0037cc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -16,7 +16,7 @@ class User < ActiveRecord::Base :name, :email_public, :biography, :nickname, :affiliation has_many :event_users, dependent: :destroy - has_many :events, -> { uniq }, through: :event_users + has_many :events, -> { uniq }, through: :event_users, dependent: :destroy has_many :registrations, dependent: :destroy has_many :votes, dependent: :destroy has_many :voted_events, through: :votes, source: :events diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index d66a475d..b7c5e7ea 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -70,7 +70,7 @@ - if current_user.id == user.id or user.role_ids.include? 3 =link_to 'Delete',admin_user_path(user), :method => :delete , :data => {:confirm => 'Are you sure ?'}, :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" + =link_to 'Delete',admin_user_path(user), :method=> :delete , :data=> {:confirm => 'Are you sure ?'},:class => "btn btn-primary btn-danger", id: "user-delete-#{user.id}" :javascript diff --git a/spec/features/user_spec.rb b/spec/features/user_spec.rb index 5e5a57df..8c2e2b8f 100644 --- a/spec/features/user_spec.rb +++ b/spec/features/user_spec.rb @@ -9,15 +9,13 @@ feature User do shared_examples 'admin ability' do scenario 'deletes a user', feature: true, js: true do sign_in(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 'can modify roles', feature: true, js: true do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ffbcb1c4..ad2eeb26 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -26,6 +26,11 @@ describe User do expect(user_with_all_roles.roles[2]).to eq(admin_role) end + it { should have_many(:events).dependent(:destroy) } + it { should have_many(:event_users).dependent(:destroy) } + it { should have_many(:registrations).dependent(:destroy) } + it { should have_many(:votes).dependent(:destroy) } + describe '#role?' do shared_examples '#role?' do |user, role, expected| it "returns #{expected} for #{role}" do