FIX: Show right message when permanently deleting topic (#14717)

This commit is contained in:
Bianca Nenciu 2021-10-26 18:31:15 +03:00 committed by GitHub
parent dfb7924105
commit 0c6f9d7c67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 10 deletions

View File

@ -1755,6 +1755,15 @@ class Topic < ActiveRecord::Base
).performed!
end
def cannot_permanently_delete_reason(user)
if self.posts_count > 0
I18n.t('post.cannot_permanently_delete.many_posts')
elsif self.deleted_by_id == user&.id && self.deleted_at >= Post::PERMANENT_DELETE_TIMER.ago
time_left = RateLimiter.time_left(Post::PERMANENT_DELETE_TIMER.to_i - Time.zone.now.to_i + self.deleted_at.to_i)
I18n.t('post.cannot_permanently_delete.wait_or_different_admin', time_left: time_left)
end
end
private
def invite_to_private_message(invited_by, target_user, guardian)
@ -1815,15 +1824,6 @@ class Topic < ActiveRecord::Base
def apply_per_day_rate_limit_for(key, method_name)
RateLimiter.new(user, "#{key}-per-day", SiteSetting.get(method_name), 1.day.to_i)
end
def cannot_permanently_delete_reason(user)
if self.posts_count > 1
I18n.t('post.cannot_permanently_delete.many_posts')
elsif self.deleted_by_id == user&.id && self.deleted_at >= Post::PERMANENT_DELETE_TIMER.ago
time_left = RateLimiter.time_left(Post::PERMANENT_DELETE_TIMER.to_i - Time.zone.now.to_i + self.deleted_at.to_i)
I18n.t('post.cannot_permanently_delete.wait_or_different_admin', time_left: time_left)
end
end
end
# == Schema Information

View File

@ -156,7 +156,7 @@ module TopicGuardian
def can_permanently_delete_topic?(topic)
return false if !SiteSetting.can_permanently_delete
return false if !topic
return false if topic.posts_count > 1
return false if topic.posts_count > 0
return false if !is_admin? || !can_see_topic?(topic)
return false if !topic.deleted_at
return false if topic.deleted_by_id == @user.id && topic.deleted_at >= Post::PERMANENT_DELETE_TIMER.ago

View File

@ -1755,4 +1755,22 @@ describe Post do
post.publish_change_to_clients!(:created)
end
end
describe "#cannot_permanently_delete_reason" do
fab!(:post) { Fabricate(:post) }
fab!(:admin) { Fabricate(:admin) }
before do
freeze_time
PostDestroyer.new(admin, post).destroy
end
it 'returns error message if same admin and time did not pass' do
expect(post.cannot_permanently_delete_reason(admin)).to eq(I18n.t('post.cannot_permanently_delete.wait_or_different_admin', time_left: RateLimiter.time_left(Post::PERMANENT_DELETE_TIMER.to_i)))
end
it 'returns nothing if different admin' do
expect(post.cannot_permanently_delete_reason(Fabricate(:admin))).to eq(nil)
end
end
end

View File

@ -2936,4 +2936,34 @@ describe Topic do
end
end
end
describe "#cannot_permanently_delete_reason" do
fab!(:post) { Fabricate(:post) }
let!(:topic) { post.topic }
fab!(:admin) { Fabricate(:admin) }
before do
freeze_time
end
it 'returns error message if topic has more posts' do
post_2 = PostCreator.create!(Fabricate(:user), topic_id: topic.id, raw: 'some post content')
PostDestroyer.new(admin, post).destroy
expect(topic.reload.cannot_permanently_delete_reason(Fabricate(:admin))).to eq(I18n.t('post.cannot_permanently_delete.many_posts'))
PostDestroyer.new(admin, post_2).destroy
expect(topic.reload.cannot_permanently_delete_reason(Fabricate(:admin))).to eq(nil)
end
it 'returns error message if same admin and time did not pass' do
PostDestroyer.new(admin, post).destroy
expect(topic.reload.cannot_permanently_delete_reason(admin)).to eq(I18n.t('post.cannot_permanently_delete.wait_or_different_admin', time_left: RateLimiter.time_left(Post::PERMANENT_DELETE_TIMER.to_i)))
end
it 'returns nothing if different admin' do
PostDestroyer.new(admin, post).destroy
expect(topic.reload.cannot_permanently_delete_reason(Fabricate(:admin))).to eq(nil)
end
end
end