FIX: couldn't delete users who voted on a poll

This commit is contained in:
Régis Hanol 2018-11-23 11:45:53 +01:00
parent 606faa2ee5
commit f402d0d74f
2 changed files with 32 additions and 4 deletions

View File

@ -359,6 +359,10 @@ after_initialize do
end
end
User.class_eval do
has_many :poll_votes, dependent: :delete_all
end
validate(:post, :validate_polls) do |force = nil|
return unless self.raw_changed? || force
@ -427,10 +431,6 @@ after_initialize do
PollVote.where(user_id: source_user.id).update_all(user_id: target_user.id)
end
on(:user_destroyed) do |user|
PollVote.where(user_id: user.id).delete_all
end
register_post_custom_field_type(DiscoursePoll::HAS_POLLS, :boolean)
topic_view_post_custom_fields_whitelister { [DiscoursePoll::HAS_POLLS] }

View File

@ -0,0 +1,28 @@
require "rails_helper"
describe Admin::UsersController do
let(:admin) { Fabricate(:admin) }
before { sign_in(admin) }
describe '#destroy' do
let(:delete_me) { Fabricate(:user) }
context "user has voted" do
let!(:topic) { Fabricate(:topic, user: admin) }
let!(:post) { Fabricate(:post, topic: topic, user: admin, raw: "[poll]\n- a\n- b\n[/poll]") }
it "deletes the user" do
poll = Poll.last
PollVote.create!(user: delete_me, poll: poll, poll_option: poll.poll_options.first)
delete "/admin/users/#{delete_me.id}.json"
expect(response.status).to eq(200)
expect(User.exists?(id: delete_me.id)).to eq(false)
expect(PollVote.exists?(user_id: delete_me.id)).to eq(false)
end
end
end
end