discourse/plugins/automation/spec/scripts/topic_required_words_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

73 lines
2.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
describe "TopicRequiredWords" do
fab!(:user)
fab!(:category) { Fabricate(:category, user: user) }
fab!(:topic) { Fabricate(:topic, category: category) }
fab!(:automation) do
Fabricate(
:automation,
script: DiscourseAutomation::Scripts::TOPIC_REQUIRED_WORDS,
trigger: DiscourseAutomation::Triggers::TOPIC,
)
end
before do
SiteSetting.discourse_automation_enabled = true
topic.upsert_custom_fields(discourse_automation_ids: automation.id)
automation.upsert_field!("words", "text_list", { value: %w[#foo #bar] })
end
describe "editing/creating a post" do
before do
automation.upsert_field!("restricted_topic", "text", { value: topic.id }, target: "trigger")
end
context "when topic has a topic_required_words automation associated" do
context "when post has at least a required word" do
it "validates the post" do
post_creator = PostCreator.new(user, topic_id: topic.id, raw: "this is quite cool #foo")
post = post_creator.create
expect(post.valid?).to be(true)
end
end
context "when post has no required word" do
it "doesnt validate the post" do
post_creator = PostCreator.new(user, topic_id: topic.id, raw: "this is quite cool")
post = post_creator.create
expect(post.valid?).to be(false)
end
end
end
context "when topic has no topic_required_words automation associated" do
context "when post has no required word" do
it "validates the post" do
no_automation_topic = create_topic(category: category)
post_creator =
PostCreator.new(user, topic_id: no_automation_topic.id, raw: "this is quite cool")
post = post_creator.create
expect(post.valid?).to be(true)
end
end
end
end
describe "moving posts" do
fab!(:admin)
fab!(:first_post) { Fabricate(:post, topic: topic, raw: "this is quite cool #foo") }
fab!(:post) { Fabricate(:post, topic: topic, raw: "this is quite cool #bar") }
fab!(:destination_topic) { Fabricate(:post).topic }
it "works" do
expect do
topic.move_posts(admin, [post.id], destination_topic_id: destination_topic.id)
end.to_not raise_error
expect(topic.posts.where(post_type: Post.types[:regular]).size).to eq(1)
expect(destination_topic.posts.where(post_type: Post.types[:regular]).size).to eq(2)
end
end
end