mirror of
https://github.com/discourse/discourse.git
synced 2024-12-21 16:03:43 +08:00
3d4faf3272
Automation (previously known as discourse-automation) is now a core plugin.
76 lines
2.2 KiB
Ruby
76 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "../discourse_automation_helper"
|
|
|
|
describe "GiftExchange" do
|
|
fab!(:automation) do
|
|
Fabricate(
|
|
:automation,
|
|
script: DiscourseAutomation::Scripts::GIFT_EXCHANGE,
|
|
trigger: DiscourseAutomation::Triggers::POINT_IN_TIME,
|
|
)
|
|
end
|
|
fab!(:gift_group) { Fabricate(:group) }
|
|
fab!(:user_1) { Fabricate(:user) }
|
|
fab!(:user_2) { Fabricate(:user) }
|
|
fab!(:user_3) { Fabricate(:user) }
|
|
|
|
before do
|
|
SiteSetting.discourse_automation_enabled = true
|
|
|
|
gift_group.add(user_1)
|
|
gift_group.add(user_2)
|
|
gift_group.add(user_3)
|
|
|
|
automation.upsert_field!(
|
|
"gift_exchangers_group",
|
|
"group",
|
|
{ value: gift_group.id },
|
|
target: "script",
|
|
)
|
|
automation.upsert_field!(
|
|
"giftee_assignment_messages",
|
|
"pms",
|
|
{
|
|
value: [
|
|
{
|
|
title: "Gift {{year}}",
|
|
raw: "@{{gifter_username}} you should send a gift to {{giftee_username}}",
|
|
},
|
|
],
|
|
},
|
|
target: "script",
|
|
)
|
|
end
|
|
|
|
context "when run from point_in_time trigger" do
|
|
before do
|
|
automation.upsert_field!(
|
|
"execute_at",
|
|
"date_time",
|
|
{ value: 3.hours.from_now },
|
|
target: "trigger",
|
|
)
|
|
end
|
|
|
|
it "creates expected PM" do
|
|
freeze_time 6.hours.from_now do
|
|
expect {
|
|
Jobs::DiscourseAutomationTracker.new.execute
|
|
|
|
raws = Post.order(created_at: :desc).limit(3).pluck(:raw)
|
|
expect(raws.any? { |r| r.start_with?("@#{user_1.username}") }).to be_truthy
|
|
expect(raws.any? { |r| r.start_with?("@#{user_2.username}") }).to be_truthy
|
|
expect(raws.any? { |r| r.start_with?("@#{user_3.username}") }).to be_truthy
|
|
expect(raws.any? { |r| r.end_with?("#{user_1.username}") }).to be_truthy
|
|
expect(raws.any? { |r| r.end_with?("#{user_2.username}") }).to be_truthy
|
|
expect(raws.any? { |r| r.end_with?("#{user_3.username}") }).to be_truthy
|
|
|
|
title = Post.order(created_at: :desc).limit(3).map { |post| post.topic.title }.uniq.first
|
|
expect(title).to eq("Gift #{Time.zone.now.year}")
|
|
}.to change { Post.count }.by(3) # each pair receives a PM
|
|
end
|
|
end
|
|
end
|
|
end
|