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

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

87 lines
2.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
describe "PointInTime" do
fab!(:user)
fab!(:topic)
fab!(:automation) do
Fabricate(:automation, trigger: DiscourseAutomation::Triggers::POINT_IN_TIME)
end
context "when updating trigger" do
context "when date is in future" do
it "creates a pending automation" do
expect {
automation.upsert_field!(
"execute_at",
"date_time",
{ value: 2.hours.from_now },
target: "trigger",
)
}.to change { DiscourseAutomation::PendingAutomation.count }.by(1)
expect(DiscourseAutomation::PendingAutomation.last.execute_at).to be_within_one_minute_of(
2.hours.from_now,
)
end
end
context "when date is in past" do
it "doesnt create a pending automation" do
expect {
automation.upsert_field!(
"execute_at",
"date_time",
{ value: 2.hours.ago },
target: "trigger",
)
}.not_to change { DiscourseAutomation::PendingAutomation.count }
end
end
end
context "when updating automation" do
fab!(:automation) do
Fabricate(:automation, trigger: DiscourseAutomation::Triggers::POINT_IN_TIME, script: "test")
end
before do
DiscourseAutomation::Scriptable.add("test") do
triggerables [DiscourseAutomation::Triggers::POINT_IN_TIME]
field :test, component: :text
end
automation.upsert_field!(
"execute_at",
"date_time",
{ value: 2.hours.from_now },
target: "trigger",
)
automation.upsert_field!("test", "text", { value: "something" }, target: "script")
end
context "when execute_at changes" do
it "resets the pending automations" do
expect {
automation.upsert_field!(
"execute_at",
"date_time",
{ value: 3.hours.from_now },
target: "trigger",
)
}.to change { DiscourseAutomation::PendingAutomation.last.execute_at }
expect(DiscourseAutomation::PendingAutomation.count).to eq(1)
end
end
context "when a field other than execute_at changes" do
it "doesn't reset the pending automations" do
expect {
automation.upsert_field!("test", "text", { value: "somethingelse" }, target: "script")
}.to_not change { DiscourseAutomation::PendingAutomation.last.execute_at }
expect(DiscourseAutomation::PendingAutomation.count).to eq(1)
end
end
end
end