mirror of
https://github.com/discourse/discourse.git
synced 2024-12-30 23:46:54 +08:00
99 lines
2.7 KiB
Ruby
99 lines
2.7 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
describe "UserPromoted" do
|
||
|
before { SiteSetting.discourse_automation_enabled = true }
|
||
|
|
||
|
fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||
|
fab!(:automation) do
|
||
|
Fabricate(:automation, trigger: DiscourseAutomation::Triggers::USER_PROMOTED)
|
||
|
end
|
||
|
|
||
|
it "runs without any restrictions" do
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[1]) }
|
||
|
|
||
|
expect(list.length).to eq(1)
|
||
|
expect(list[0]["kind"]).to eq("user_promoted")
|
||
|
expect(list[0]["placeholders"]).to eq(
|
||
|
{ "trust_level_transition" => "from new user to basic user" },
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it "does not run if the user is being demoted" do
|
||
|
user.change_trust_level!(TrustLevel[4])
|
||
|
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[1]) }
|
||
|
|
||
|
expect(list).to eq([])
|
||
|
end
|
||
|
|
||
|
context "when there is a group restriction" do
|
||
|
let!(:group) { Fabricate(:group) }
|
||
|
before do
|
||
|
automation.upsert_field!(
|
||
|
"restricted_group",
|
||
|
"group",
|
||
|
{ "value" => group.id },
|
||
|
target: "trigger",
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it "does not run if the user is not part of the group" do
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[1]) }
|
||
|
|
||
|
expect(list).to eq([])
|
||
|
end
|
||
|
|
||
|
it "does run if the user is part of the group" do
|
||
|
Fabricate(:group_user, group: group, user: user)
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[1]) }
|
||
|
|
||
|
expect(list.length).to eq(1)
|
||
|
expect(list[0]["kind"]).to eq("user_promoted")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when there is a trust_level_transition restriction" do
|
||
|
before do
|
||
|
automation.upsert_field!(
|
||
|
"trust_level_transition",
|
||
|
"choices",
|
||
|
{ "value" => "TL01" },
|
||
|
target: "trigger",
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it "does not run if the trust level transition does not match" do
|
||
|
user.change_trust_level!(TrustLevel[2])
|
||
|
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[3]) }
|
||
|
|
||
|
expect(list).to eq([])
|
||
|
end
|
||
|
|
||
|
it "does run if the trust level transition matches" do
|
||
|
user.change_trust_level!(TrustLevel[0])
|
||
|
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[1]) }
|
||
|
|
||
|
expect(list.length).to eq(1)
|
||
|
expect(list[0]["kind"]).to include("user_promoted")
|
||
|
end
|
||
|
|
||
|
it "does run if the transition is for all trust levels" do
|
||
|
automation.upsert_field!(
|
||
|
"trust_level_transition",
|
||
|
"choices",
|
||
|
{ "value" => "TLALL" },
|
||
|
target: "trigger",
|
||
|
)
|
||
|
|
||
|
user.change_trust_level!(TrustLevel[2])
|
||
|
|
||
|
list = capture_contexts { user.change_trust_level!(TrustLevel[4]) }
|
||
|
|
||
|
expect(list.length).to eq(1)
|
||
|
expect(list[0]["kind"]).to eq("user_promoted")
|
||
|
end
|
||
|
end
|
||
|
end
|