DEV: trash category definition topic instead of destroying. (#14356)

After deleting a category, we should soft-delete the category definition topic instead of hard deleting it. Else it causes issues while doing the user merge action if the source user has an orphan post that belongs to the deleted topic.
This commit is contained in:
Vinoth Kannan 2021-09-20 11:20:49 +05:30 committed by GitHub
parent a29a6522d0
commit a8b2e7e343
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View File

@ -25,7 +25,7 @@ class Category < ActiveRecord::Base
register_custom_field_type(REQUIRE_REPLY_APPROVAL, :boolean)
register_custom_field_type(NUM_AUTO_BUMP_DAILY, :integer)
belongs_to :topic, dependent: :destroy
belongs_to :topic
belongs_to :topic_only_relative_url,
-> { select "id, title, slug" },
class_name: "Topic",
@ -67,6 +67,7 @@ class Category < ActiveRecord::Base
validates :slug, exclusion: { in: RESERVED_SLUGS }
after_create :create_category_definition
after_destroy :trash_category_definition
before_save :apply_permissions
before_save :downcase_email
@ -296,6 +297,10 @@ class Category < ActiveRecord::Base
end
end
def trash_category_definition
self.topic&.trash!
end
def topic_url
if has_attribute?("topic_slug")
Topic.relative_url(topic_id, read_attribute(:topic_slug))

View File

@ -538,7 +538,7 @@ describe Category do
it 'is deleted correctly' do
@category.destroy
expect(Category.exists?(id: @category_id)).to be false
expect(Topic.exists?(id: @topic_id)).to be false
expect(Topic.with_deleted.where.not(deleted_at: nil).exists?(id: @topic_id)).to be true
expect(SiteSetting.shared_drafts_category).to be_blank
end