discourse/plugins/automation/spec/triggers/stalled_wiki_spec.rb

192 lines
5.8 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
describe "StalledWiki" do
fab!(:topic_1) { Fabricate(:topic) }
fab!(:automation) { Fabricate(:automation, trigger: DiscourseAutomation::Triggers::STALLED_WIKI) }
fab!(:post_creator_1) { Fabricate(:user, admin: true) }
let!(:post) do
post_creator =
PostCreator.new(
post_creator_1,
topic_id: topic_1.id,
raw: "this is a post that will become a wiki",
)
post_creator.create
end
it "allows manual trigger" do
triggerable = DiscourseAutomation::Triggerable.new(automation.trigger)
expect(triggerable.settings[DiscourseAutomation::Triggerable::MANUAL_TRIGGER_KEY]).to eq(true)
end
describe "default" do
before do
automation.upsert_field!("stalled_after", "choices", { value: "PT10H" }, target: "trigger")
automation.upsert_field!("retriggered_after", "choices", { value: "PT1H" }, target: "trigger")
end
it "supports manual triggering" do
DiscourseAutomation::AutomationSerializer.new(automation, root: "automation").as_json
end
context "when the post has been revised recently" do
it "doesnt trigger" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 40.minutes.ago },
)
list = capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list.length).to eq(0)
end
end
context "when the post hasnt been revised recently" do
it "triggers" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 1.month.ago },
)
list = capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("stalled_wiki")
end
context "when trigger has a category" do
fab!(:category)
before do
automation.upsert_field!(
"stalled_after",
"choices",
{ value: "PT10H" },
target: "trigger",
)
automation.upsert_field!(
"retriggered_after",
"choices",
{ value: "PT1H" },
target: "trigger",
)
automation.upsert_field!(
"restricted_category",
"category",
{ value: category.id },
target: "trigger",
)
end
context "when the post is in a sub category" do
before do
subcategory = Fabricate(:category, parent_category: category)
subcategory.save!
post.topic.update(category: subcategory)
end
it "doesnt trigger" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 40.minutes.ago },
)
list =
capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list).to be_empty
end
end
context "when the post is in this category" do
before { post.topic.update(category: category) }
it "triggers" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 1.month.ago },
)
list =
capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("stalled_wiki")
end
end
context "when the post is not in this category" do
it "doesnt trigger" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 40.minutes.ago },
)
list =
capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list).to be_empty
end
end
end
context "when trigger hasnt been running recently" do
before { freeze_time 2.hours.from_now }
it "sets custom field" do
expect(post.reload.custom_fields["stalled_wiki_triggered_at"]).to eq(nil)
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 1.month.ago },
)
Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil)
expect(post.reload.custom_fields["stalled_wiki_triggered_at"]).to eq(Time.zone.now.to_s)
end
it "triggers again" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 2.months.ago },
)
post.upsert_custom_fields(stalled_wiki_triggered_at: 2.months.ago)
list = capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("stalled_wiki")
expect(post.reload.custom_fields["stalled_wiki_triggered_at"]).to eq(Time.zone.now.to_s)
end
end
context "when trigger has been running recently" do
before { freeze_time 2.hours.from_now }
it "doesnt trigger again" do
post.revise(
post_creator_1,
{ wiki: true },
{ force_new_version: true, revised_at: 1.month.ago },
)
post.upsert_custom_fields(stalled_wiki_triggered_at: 10.minutes.ago)
list = capture_contexts { Jobs::DiscourseAutomation::StalledWikiTracker.new.execute(nil) }
expect(list.length).to eq(0)
expect(post.reload.custom_fields["stalled_wiki_triggered_at"]).to eq(10.minutes.ago.to_s)
end
end
end
end
end