2024-04-03 23:20:43 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
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 {
|
2024-05-07 04:12:55 +08:00
|
|
|
Jobs::DiscourseAutomation::Tracker.new.execute
|
2024-04-03 23:20:43 +08:00
|
|
|
|
|
|
|
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
|