FIX: Private message can be set to publish in the future.
This commit is contained in:
parent
3861bd2793
commit
73180c8a19
|
@ -8,7 +8,13 @@ module Jobs
|
||||||
return if topic.blank?
|
return if topic.blank?
|
||||||
|
|
||||||
PostTimestampChanger.new(timestamp: Time.zone.now, topic: topic).change! do
|
PostTimestampChanger.new(timestamp: Time.zone.now, topic: topic).change! do
|
||||||
topic.change_category_to_id(topic_status_update.category_id)
|
if topic.private_message?
|
||||||
|
topic = TopicConverter.new(topic, Discourse.system_user)
|
||||||
|
.convert_to_public_topic(topic_status_update.category_id)
|
||||||
|
else
|
||||||
|
topic.change_category_to_id(topic_status_update.category_id)
|
||||||
|
end
|
||||||
|
|
||||||
topic.update_columns(visible: true)
|
topic.update_columns(visible: true)
|
||||||
topic_status_update.trash!(Discourse.system_user)
|
topic_status_update.trash!(Discourse.system_user)
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,9 +7,19 @@ class TopicConverter
|
||||||
@user = user
|
@user = user
|
||||||
end
|
end
|
||||||
|
|
||||||
def convert_to_public_topic
|
def convert_to_public_topic(category_id = nil)
|
||||||
Topic.transaction do
|
Topic.transaction do
|
||||||
@topic.category_id = SiteSetting.allow_uncategorized_topics ? SiteSetting.uncategorized_category_id : Category.where(read_restricted: false).first.id
|
@topic.category_id =
|
||||||
|
if category_id
|
||||||
|
category_id
|
||||||
|
elsif SiteSetting.allow_uncategorized_topics
|
||||||
|
SiteSetting.uncategorized_category_id
|
||||||
|
else
|
||||||
|
Category.where(read_restricted: false)
|
||||||
|
.where.not(id: SiteSetting.uncategorized_category_id)
|
||||||
|
.first.id
|
||||||
|
end
|
||||||
|
|
||||||
@topic.archetype = Archetype.default
|
@topic.archetype = Archetype.default
|
||||||
@topic.save
|
@topic.save
|
||||||
update_user_stats
|
update_user_stats
|
||||||
|
|
|
@ -37,7 +37,7 @@ RSpec.describe Jobs::PublishTopicToCategory do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should publish the topic to the new category correctly' do
|
it 'should publish the topic to the new category' do
|
||||||
Timecop.travel(1.hour.ago) { topic.update!(visible: false) }
|
Timecop.travel(1.hour.ago) { topic.update!(visible: false) }
|
||||||
|
|
||||||
message = MessageBus.track_publish do
|
message = MessageBus.track_publish do
|
||||||
|
@ -56,4 +56,32 @@ RSpec.describe Jobs::PublishTopicToCategory do
|
||||||
expect(message.data[:reload_topic]).to be_present
|
expect(message.data[:reload_topic]).to be_present
|
||||||
expect(message.data[:refresh_stream]).to be_present
|
expect(message.data[:refresh_stream]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'when topic is a private message' do
|
||||||
|
before do
|
||||||
|
expect { topic.convert_to_private_message(Discourse.system_user) }
|
||||||
|
.to change { topic.private_message? }.to(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it 'should publish the topic to the new category' do
|
||||||
|
described_class.new.execute(topic_status_update_id: topic.topic_status_update.id)
|
||||||
|
|
||||||
|
message = MessageBus.track_publish do
|
||||||
|
described_class.new.execute(topic_status_update_id: topic.topic_status_update.id)
|
||||||
|
end.first
|
||||||
|
|
||||||
|
topic.reload
|
||||||
|
expect(topic.category).to eq(another_category)
|
||||||
|
expect(topic.visible).to eq(true)
|
||||||
|
expect(topic.private_message?).to eq(false)
|
||||||
|
|
||||||
|
%w{created_at bumped_at updated_at last_posted_at}.each do |attribute|
|
||||||
|
expect(topic.public_send(attribute)).to be_within(1.second).of(Time.zone.now)
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(message.data[:reload_topic]).to be_present
|
||||||
|
expect(message.data[:refresh_stream]).to be_present
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,13 +5,42 @@ describe TopicConverter do
|
||||||
context 'convert_to_public_topic' do
|
context 'convert_to_public_topic' do
|
||||||
let(:admin) { Fabricate(:admin) }
|
let(:admin) { Fabricate(:admin) }
|
||||||
let(:author) { Fabricate(:user) }
|
let(:author) { Fabricate(:user) }
|
||||||
|
let(:category) { Fabricate(:category) }
|
||||||
let(:private_message) { Fabricate(:private_message_topic, user: author) }
|
let(:private_message) { Fabricate(:private_message_topic, user: author) }
|
||||||
|
|
||||||
context 'success' do
|
context 'success' do
|
||||||
it "converts private message to regular topic" do
|
it "converts private message to regular topic" do
|
||||||
topic = private_message.convert_to_public_topic(admin)
|
SiteSetting.allow_uncategorized_topics = true
|
||||||
|
topic = described_class.new(private_message, admin).convert_to_public_topic
|
||||||
|
topic.reload
|
||||||
|
|
||||||
expect(topic).to be_valid
|
expect(topic).to be_valid
|
||||||
expect(topic.archetype).to eq("regular")
|
expect(topic.archetype).to eq("regular")
|
||||||
|
expect(topic.category_id).to eq(SiteSetting.uncategorized_category_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'when uncategorized category is not allowed' do
|
||||||
|
before do
|
||||||
|
SiteSetting.allow_uncategorized_topics = false
|
||||||
|
category.update!(read_restricted: false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should convert private message into the right category' do
|
||||||
|
topic = described_class.new(private_message, admin).convert_to_public_topic
|
||||||
|
topic.reload
|
||||||
|
|
||||||
|
expect(topic).to be_valid
|
||||||
|
expect(topic.archetype).to eq("regular")
|
||||||
|
expect(topic.category_id).to eq(category.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'when a custom category_id is given' do
|
||||||
|
it 'should convert private message into the right category' do
|
||||||
|
topic = described_class.new(private_message, admin).convert_to_public_topic(category.id)
|
||||||
|
|
||||||
|
expect(topic.reload.category).to eq(category)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "updates user stats" do
|
it "updates user stats" do
|
||||||
|
|
Loading…
Reference in New Issue