mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
Topic can have null user_id when user was nuked
This commit is contained in:
parent
117fc8db58
commit
d76486a48b
4 changed files with 37 additions and 5 deletions
|
@ -196,10 +196,13 @@ ORDER BY p.created_at desc
|
|||
group_ids = topic.category.groups.pluck("groups.id")
|
||||
end
|
||||
|
||||
MessageBus.publish("/users/#{action.user.username.downcase}",
|
||||
action.id,
|
||||
user_ids: [user_id],
|
||||
group_ids: group_ids )
|
||||
if action.user
|
||||
MessageBus.publish("/users/#{action.user.username.downcase}",
|
||||
action.id,
|
||||
user_ids: [user_id],
|
||||
group_ids: group_ids )
|
||||
end
|
||||
|
||||
action
|
||||
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class AllowNullUserIdOnTopics < ActiveRecord::Migration
|
||||
def up
|
||||
change_column :topics, :user_id, :integer, null: true
|
||||
end
|
||||
|
||||
def down
|
||||
change_column :topics, :user_id, :integer, null: false
|
||||
end
|
||||
end
|
|
@ -25,6 +25,9 @@ class UserDestroyer
|
|||
end
|
||||
end
|
||||
PostDestroyer.new(@staff, post).destroy
|
||||
if post.topic and post.post_number == 1
|
||||
Topic.unscoped.where(id: post.topic.id).update_all(user_id: nil)
|
||||
end
|
||||
end
|
||||
raise PostsExistError if user.reload.post_count != 0
|
||||
end
|
||||
|
|
|
@ -87,7 +87,10 @@ describe UserDestroyer do
|
|||
end
|
||||
|
||||
context 'user has posts' do
|
||||
let!(:post) { Fabricate(:post, user: @user) }
|
||||
let!(:topic_starter) { Fabricate(:user) }
|
||||
let!(:topic) { Fabricate(:topic, user: topic_starter) }
|
||||
let!(:first_post) { Fabricate(:post, user: topic_starter, topic: topic) }
|
||||
let!(:post) { Fabricate(:post, user: @user, topic: topic) }
|
||||
|
||||
context "delete_posts is false" do
|
||||
subject(:destroy) { UserDestroyer.new(@admin).destroy(@user) }
|
||||
|
@ -123,6 +126,20 @@ describe UserDestroyer do
|
|||
post.reload.deleted_at.should_not be_nil
|
||||
post.user_id.should be_nil
|
||||
end
|
||||
|
||||
it "does not delete topics started by others in which the user has replies" do
|
||||
destroy
|
||||
topic.reload.deleted_at.should be_nil
|
||||
topic.user_id.should_not be_nil
|
||||
end
|
||||
|
||||
it "deletes topics started by the deleted user" do
|
||||
spammer_topic = Fabricate(:topic, user: @user)
|
||||
spammer_post = Fabricate(:post, user: @user, topic: spammer_topic)
|
||||
destroy
|
||||
spammer_topic.reload.deleted_at.should_not be_nil
|
||||
spammer_topic.user_id.should be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue