discourse/spec/mailers/invite_mailer_spec.rb
Ted Johansson 6ab1a19e93
DEV: Convert min_trust_level_to_allow_invite to groups ()
We're changing the implementation of trust levels to use groups. Part of this is to have site settings that reference trust levels use groups instead. It converts the min_trust_level_to_allow_invite  site setting to invite_allowed_groups.

Nothing much of note. This is used in one place and there's no fallout.
2023-12-18 12:07:36 +08:00

169 lines
5.0 KiB
Ruby

# frozen_string_literal: true
RSpec.describe InviteMailer do
describe "send_invite" do
context "when inviting to site" do
context "with default invite message" do
fab!(:invite)
let(:invite_mail) { InviteMailer.send_invite(invite) }
it "renders the invitee email" do
expect(invite_mail.to).to eql([invite.email])
end
it "renders the subject" do
expect(invite_mail.subject).to be_present
end
it "renders site domain name in subject" do
expect(invite_mail.subject).to match(Discourse.current_hostname)
end
it "renders the body" do
expect(invite_mail.body).to be_present
end
it "renders the inviter email" do
expect(invite_mail.from).to eql([SiteSetting.notification_email])
end
it "renders invite link" do
expect(invite_mail.body.encoded).to match(
"#{Discourse.base_url}/invites/#{invite.invite_key}",
)
end
end
context "with custom invite message" do
fab!(:invite) do
Fabricate(:invite, custom_message: "Hey, you <b>should</b> join this forum!\n\nWelcome!")
end
context "when custom message includes invite link" do
let(:custom_invite_mail) { InviteMailer.send_invite(invite) }
it "renders the invitee email" do
expect(custom_invite_mail.to).to eql([invite.email])
end
it "renders the subject" do
expect(custom_invite_mail.subject).to be_present
end
it "renders site domain name in subject" do
expect(custom_invite_mail.subject).to match(Discourse.current_hostname)
end
it "renders the body" do
expect(custom_invite_mail.body).to be_present
end
it "renders custom_message, stripping HTML" do
expect(custom_invite_mail.body.encoded).to match(
"Hey, you should join this forum! Welcome!",
)
end
it "renders the inviter email" do
expect(custom_invite_mail.from).to eql([SiteSetting.notification_email])
end
it "renders invite link" do
expect(custom_invite_mail.body.encoded).to match(
"#{Discourse.base_url}/invites/#{invite.invite_key}",
)
end
end
end
end
context "when inviting to topic" do
fab!(:trust_level_2) { Fabricate(:user, trust_level: 2, refresh_auto_groups: true) }
let(:topic) do
Fabricate(
:topic,
excerpt: "Topic invite support is now available in Discourse!",
user: trust_level_2,
)
end
context "with default invite message" do
let(:invite) do
topic.invite(topic.user, "name@example.com")
Invite.find_by(invited_by_id: topic.user.id)
end
let(:invite_mail) { InviteMailer.send_invite(invite, invite_to_topic: true) }
it "renders the invitee email" do
expect(invite_mail.to).to eql(["name@example.com"])
end
it "renders the subject" do
expect(invite_mail.subject).to be_present
end
it "renders topic title in subject" do
expect(invite_mail.subject).to match(topic.title)
end
it "renders site domain name in subject" do
expect(invite_mail.subject).to match(Discourse.current_hostname)
end
it "renders the body" do
expect(invite_mail.body).to be_present
end
it "renders the inviter email" do
expect(invite_mail.from).to eql([SiteSetting.notification_email])
end
it "renders invite link" do
expect(invite_mail.body.encoded).to match(
"#{Discourse.base_url}/invites/#{invite.invite_key}",
)
end
it "renders topic title" do
expect(invite_mail.body.encoded).to match(topic.title)
end
it "respects the private_email setting" do
SiteSetting.private_email = true
message = invite_mail
expect(message.body.to_s).not_to include(topic.title)
expect(message.body.to_s).not_to include(topic.slug)
end
end
context "with custom invite message" do
let(:invite) do
topic.invite(
topic.user,
"name@example.com",
nil,
"Hey, I thought you might enjoy this topic!",
)
Invite.find_by(invited_by_id: topic.user.id)
end
let(:custom_invite_mail) { InviteMailer.send_invite(invite) }
it "renders custom_message" do
expect(custom_invite_mail.body.encoded).to match(
"Hey, I thought you might enjoy this topic!",
)
end
it "renders invite link" do
expect(custom_invite_mail.body.encoded).to match(
"#{Discourse.base_url}/invites/#{invite.invite_key}",
)
end
end
end
end
end