mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Show right message when permanently deleting topic (#14717)
This commit is contained in:
parent
dfb7924105
commit
0c6f9d7c67
@ -1755,6 +1755,15 @@ class Topic < ActiveRecord::Base
|
|||||||
).performed!
|
).performed!
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def invite_to_private_message(invited_by, target_user, guardian)
|
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)
|
def apply_per_day_rate_limit_for(key, method_name)
|
||||||
RateLimiter.new(user, "#{key}-per-day", SiteSetting.get(method_name), 1.day.to_i)
|
RateLimiter.new(user, "#{key}-per-day", SiteSetting.get(method_name), 1.day.to_i)
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
|
@ -156,7 +156,7 @@ module TopicGuardian
|
|||||||
def can_permanently_delete_topic?(topic)
|
def can_permanently_delete_topic?(topic)
|
||||||
return false if !SiteSetting.can_permanently_delete
|
return false if !SiteSetting.can_permanently_delete
|
||||||
return false if !topic
|
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 !is_admin? || !can_see_topic?(topic)
|
||||||
return false if !topic.deleted_at
|
return false if !topic.deleted_at
|
||||||
return false if topic.deleted_by_id == @user.id && topic.deleted_at >= Post::PERMANENT_DELETE_TIMER.ago
|
return false if topic.deleted_by_id == @user.id && topic.deleted_at >= Post::PERMANENT_DELETE_TIMER.ago
|
||||||
|
@ -1755,4 +1755,22 @@ describe Post do
|
|||||||
post.publish_change_to_clients!(:created)
|
post.publish_change_to_clients!(:created)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
@ -2936,4 +2936,34 @@ describe Topic do
|
|||||||
end
|
end
|
||||||
end
|
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
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user