mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 21:45:16 +08:00
f75a99e932
When a topic was published from a shared draft and it had tags, the users watching the tags were not notified. The problem was that the topics are usually created in a secret category and publishing it just moves an existent topic to the target category, without making any changes to the tags.
79 lines
2.4 KiB
Ruby
79 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'topic_publisher'
|
|
describe TopicPublisher do
|
|
|
|
context "shared drafts" do
|
|
fab!(:shared_drafts_category) { Fabricate(:category) }
|
|
fab!(:category) { Fabricate(:category) }
|
|
|
|
before do
|
|
SiteSetting.shared_drafts_category = shared_drafts_category.id
|
|
end
|
|
|
|
context "publishing" do
|
|
fab!(:topic) { Fabricate(:topic, category: shared_drafts_category, visible: false) }
|
|
fab!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) }
|
|
fab!(:moderator) { Fabricate(:moderator) }
|
|
fab!(:op) { Fabricate(:post, topic: topic) }
|
|
fab!(:user) { Fabricate(:user) }
|
|
fab!(:tag) { Fabricate(:tag) }
|
|
|
|
before do
|
|
# Create a revision
|
|
op.set_owner(Fabricate(:coding_horror), Discourse.system_user)
|
|
op.reload
|
|
end
|
|
|
|
it "will publish the topic properly" do
|
|
published_at = 1.hour.from_now.change(usec: 0)
|
|
freeze_time(published_at) do
|
|
TopicPublisher.new(topic, moderator, shared_draft.category_id).publish!
|
|
|
|
topic.reload
|
|
expect(topic.category).to eq(category)
|
|
expect(topic).to be_visible
|
|
expect(topic.created_at).to eq_time(published_at)
|
|
expect(topic.updated_at).to eq_time(published_at)
|
|
expect(topic.shared_draft).to be_blank
|
|
|
|
expect(UserHistory.where(
|
|
acting_user_id: moderator.id,
|
|
action: UserHistory.actions[:topic_published]
|
|
)).to be_present
|
|
|
|
op.reload
|
|
|
|
# Should delete any edits on the OP
|
|
expect(op.revisions.size).to eq(0)
|
|
expect(op.version).to eq(1)
|
|
expect(op.public_version).to eq(1)
|
|
expect(op.created_at).to eq_time(published_at)
|
|
expect(op.updated_at).to eq_time(published_at)
|
|
expect(op.last_version_at).to eq_time(published_at)
|
|
end
|
|
end
|
|
|
|
it "will notify users watching tag" do
|
|
Jobs.run_immediately!
|
|
|
|
TagUser.create!(
|
|
user_id: user.id,
|
|
tag_id: tag.id,
|
|
notification_level: NotificationLevels.topic_levels[:watching]
|
|
)
|
|
|
|
topic.update!(tags: [tag])
|
|
|
|
expect { TopicPublisher.new(topic, moderator, shared_draft.category_id).publish! }
|
|
.to change { Notification.count }.by(1)
|
|
|
|
topic.reload
|
|
expect(topic.tags).to contain_exactly(tag)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|