# frozen_string_literal: true require_relative "../discourse_automation_helper" 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