mirror of
https://github.com/discourse/discourse.git
synced 2024-12-19 20:54:00 +08:00
84 lines
2.3 KiB
Ruby
84 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "CloseTopic" do
|
|
fab!(:user)
|
|
fab!(:category) { Fabricate(:category, user: user) }
|
|
fab!(:topic) { Fabricate(:topic, category: category) }
|
|
fab!(:automation) { Fabricate(:automation, script: DiscourseAutomation::Scripts::CLOSE_TOPIC) }
|
|
|
|
before { automation.upsert_field!("topic", "text", { value: topic.id }, target: "script") }
|
|
|
|
context "with default params" do
|
|
it "works" do
|
|
expect(topic.closed).to be_falsey
|
|
|
|
automation.trigger!
|
|
topic.reload
|
|
|
|
expect(topic.closed).to be_truthy
|
|
|
|
closing_post = topic.posts.where(action_code: "closed.enabled").last
|
|
expect(closing_post.raw).to eq("")
|
|
expect(closing_post.user_id).to eq(-1)
|
|
end
|
|
end
|
|
|
|
context "with message" do
|
|
before do
|
|
automation.upsert_field!(
|
|
"message",
|
|
"text",
|
|
{ value: "dingity dongity dong, this topic is closed!" },
|
|
)
|
|
end
|
|
|
|
it "works" do
|
|
expect(topic.closed).to be_falsey
|
|
|
|
automation.trigger!
|
|
topic.reload
|
|
|
|
expect(topic.closed).to be_truthy
|
|
|
|
closing_post = topic.posts.where(action_code: "closed.enabled").last
|
|
expect(closing_post.raw).to eq("dingity dongity dong, this topic is closed!")
|
|
end
|
|
end
|
|
|
|
# NOTE: this is only possible because we skip validations for now.
|
|
# As soon as discourse-automation supports proper error handling and validations take place again,
|
|
# this test should be removed.
|
|
context "with very short message" do
|
|
before { automation.upsert_field!("message", "text", { value: "bye" }) }
|
|
|
|
it "closes the topic" do
|
|
expect(topic.closed).to be_falsey
|
|
|
|
automation.trigger!
|
|
topic.reload
|
|
|
|
expect(topic.closed).to be_truthy
|
|
|
|
closing_post = topic.posts.where(action_code: "closed.enabled").last
|
|
expect(closing_post.raw).to eq("bye")
|
|
end
|
|
end
|
|
|
|
context "with a specific user" do
|
|
fab!(:specific_user) { Fabricate(:user, admin: true) }
|
|
|
|
before { automation.upsert_field!("user", "user", { value: specific_user.username }) }
|
|
|
|
it "closes the topic" do
|
|
expect(topic.closed).to be_falsey
|
|
|
|
automation.trigger!
|
|
topic.reload
|
|
|
|
expect(topic.closed).to be_truthy
|
|
closing_post = topic.posts.where(action_code: "closed.enabled").last
|
|
expect(closing_post.user_id).to eq(specific_user.id)
|
|
end
|
|
end
|
|
end
|