discourse/plugins/automation/spec/triggers/pm_created_spec.rb
Martin Brennan 48d13cb231
UX: Use a dropdown for SSL mode for group SMTP (#27932)
Our old group SMTP SSL option was a checkbox,
but this was not ideal because there are actually
3 different ways SSL can be used when sending
SMTP:

* None
* SSL/TLS
* STARTTLS

We got around this before with specific overrides
for Gmail, but it's not flexible enough and now people
want to use other providers. It's best to be clear,
though it is a technical detail. We provide a way
to test the SMTP settings before saving them so there
should be little chance of messing this up.

This commit also converts GroupEmailSettings to a glimmer
component.
2024-07-18 10:33:14 +10:00

238 lines
6.1 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
describe "PMCreated" do
before do
SiteSetting.discourse_automation_enabled = true
SiteSetting.personal_email_time_window_seconds = 0
Group.refresh_automatic_groups!
end
fab!(:user)
fab!(:automation) { Fabricate(:automation, trigger: DiscourseAutomation::Triggers::PM_CREATED) }
context "when creating a PM to a user" do
fab!(:target_user) { Fabricate(:user) }
let(:basic_topic_params) do
{
title: "hello world topic",
raw: "my name is fred",
archetype: Archetype.private_message,
target_usernames: [target_user.username],
}
end
before do
automation.upsert_field!(
"restricted_user",
"user",
{ value: target_user.username },
target: "trigger",
)
end
it "fires the trigger" do
list = capture_contexts { PostCreator.create(user, basic_topic_params) }
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("pm_created")
end
context "when user is not targeted" do
fab!(:user2) { Fabricate(:user) }
it "doesn't fire the trigger" do
list =
capture_contexts do
PostCreator.create(
user,
basic_topic_params.merge({ target_usernames: [user2.username] }),
)
end
expect(list).to be_blank
end
end
context "when trust_levels are restricted" do
before do
automation.upsert_field!(
"valid_trust_levels",
"trust-levels",
{ value: [2] },
target: "trigger",
)
end
context "when trust level is allowed" do
it "fires the trigger" do
list =
capture_contexts do
user.trust_level = TrustLevel[2]
user.save!
PostCreator.create(user, basic_topic_params)
end
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("pm_created")
end
end
context "when trust level is not allowed" do
it "doesnt fire the trigger" do
list =
capture_contexts do
user.trust_level = TrustLevel[1]
user.save!
PostCreator.create(user, basic_topic_params)
end
expect(list).to be_blank
end
end
end
context "when staff users ignored" do
before do
automation.upsert_field!("ignore_staff", "boolean", { value: true }, target: "trigger")
end
it "doesnt fire the trigger" do
list =
capture_contexts do
user.moderator = true
user.save!
PostCreator.create(user, basic_topic_params)
end
expect(list).to be_blank
end
end
end
context "when creating a PM to a group" do
fab!(:target_group) { Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]) }
let(:basic_topic_params) do
{
title: "hello world topic",
raw: "my name is fred",
archetype: Archetype.private_message,
target_group_names: [target_group.name],
}
end
before do
automation.upsert_field!(
"restricted_group",
"group",
{ value: target_group.id },
target: "trigger",
)
end
it "fires the trigger" do
list = capture_contexts { PostCreator.create(user, basic_topic_params) }
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("pm_created")
end
context "when members of the group are ignored" do
before do
automation.upsert_field!(
"ignore_group_members",
"boolean",
{ value: true },
target: "trigger",
)
end
it "doesnt fire the trigger" do
list =
capture_contexts do
user.groups << target_group
PostCreator.create(user, basic_topic_params)
end
expect(list).to be_blank
end
end
context "when the PM is being created from an incoming email" do
before do
target_group.update!(
email_username: "team@somesmtpaddress.com",
incoming_email: "team@somesmtpaddress.com|suppor+team@bar.com",
smtp_server: "smtp.test.com",
smtp_port: 587,
smtp_ssl_mode: Group.smtp_ssl_modes[:starttls],
smtp_enabled: true,
)
SiteSetting.email_in = true
end
it "fires the trigger" do
list =
capture_contexts do
Email::Receiver.new(email("email_to_group_email_username_1")).process!
end
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("pm_created")
end
context "when the restricted group does not match" do
before do
automation.upsert_field!(
"restricted_group",
"group",
{ value: Fabricate(:group).id },
target: "trigger",
)
end
it "doesnt fire the trigger" do
list =
capture_contexts do
Email::Receiver.new(email("email_to_group_email_username_1")).process!
end
expect(list).to be_blank
end
end
context "when the incoming email is automated" do
before { SiteSetting.block_auto_generated_emails = false }
it "fires the trigger" do
list =
capture_contexts do
Email::Receiver.new(email("email_to_group_email_username_auto_generated")).process!
end
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq("pm_created")
end
context "when ignore_automated is true" do
before do
automation.upsert_field!(
"ignore_automated",
"boolean",
{ value: true },
target: "trigger",
)
end
it "doesn't fire the trigger" do
list =
capture_contexts do
Email::Receiver.new(email("email_to_group_email_username_auto_generated")).process!
end
expect(list).to be_blank
end
end
end
end
end
end