Note that, for everything to work consistently, we need to make sure that the default locale is one of the available locales. Also note that we aren't overwriting the `#save ` method set by globalize. I didn't feel too comfortable changing a monkey-patch which ideally shouldn't be there in the first place, I haven't found a case where `Globalize.locale` is `nil` (since it defaults to `I18n.locale`, which should never be `nil`), so using `I18n.default_locale` probably doesn't affect us.
120 lines
3.8 KiB
Ruby
120 lines
3.8 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Mailer do
|
|
describe "#comment" do
|
|
it "sends emails in the user's locale" do
|
|
user = create(:user, locale: "es")
|
|
proposal = create(:proposal, author: user)
|
|
comment = create(:comment, commentable: proposal)
|
|
|
|
email = I18n.with_locale :en do
|
|
Mailer.comment(comment)
|
|
end
|
|
|
|
expect(email.subject).to include("comentado")
|
|
end
|
|
|
|
it "reads the from address at runtime" do
|
|
Setting["mailer_from_name"] = "New organization"
|
|
Setting["mailer_from_address"] = "new@consul.dev"
|
|
|
|
email = Mailer.comment(create(:comment))
|
|
|
|
expect(email).to deliver_from "New organization <new@consul.dev>"
|
|
end
|
|
|
|
it "sends emails for comments on legislation proposals" do
|
|
email = Mailer.comment(create(:legislation_proposal_comment))
|
|
|
|
expect(email.subject).to include("commented on your proposal")
|
|
end
|
|
end
|
|
|
|
describe "#user_invite" do
|
|
it "uses the default locale setting" do
|
|
Setting["locales.default"] = "es"
|
|
|
|
Mailer.user_invite("invited@consul.dev").deliver_now
|
|
|
|
expect(ActionMailer::Base.deliveries.last.body.to_s).to match "<html lang=\"es\""
|
|
end
|
|
end
|
|
|
|
describe "#manage_subscriptions_token" do
|
|
let(:user) { create(:user) }
|
|
let(:proposal) { create(:proposal, author: user) }
|
|
let(:comment) { create(:comment, commentable: proposal) }
|
|
|
|
it "generates a subscriptions token when the receiver doesn't have one" do
|
|
user.update!(subscriptions_token: nil)
|
|
|
|
Mailer.comment(comment).deliver_now
|
|
|
|
expect(user.reload.subscriptions_token).to be_present
|
|
end
|
|
|
|
it "uses the existing subscriptions token when the receivesr already has one" do
|
|
user.update!(subscriptions_token: "subscriptions_token_value")
|
|
|
|
Mailer.comment(comment).deliver_now
|
|
|
|
expect(user.subscriptions_token).to eq "subscriptions_token_value"
|
|
end
|
|
end
|
|
|
|
describe "multitenancy" do
|
|
it "uses the current tenant when using delayed jobs", :delay_jobs do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return({ host: "consul.dev" })
|
|
create(:tenant, schema: "delay")
|
|
|
|
Tenant.switch("delay") do
|
|
Setting["org_name"] = "Delayed tenant"
|
|
|
|
Mailer.delay.user_invite("test@consul.dev")
|
|
end
|
|
|
|
Delayed::Worker.new.work_off
|
|
body = ActionMailer::Base.deliveries.last.body.to_s
|
|
expect(body).to match "Delayed tenant"
|
|
expect(body).to match "href=\"http://delay.consul.dev/"
|
|
expect(body).to match "src=\"http://delay.consul.dev/"
|
|
end
|
|
|
|
describe "SMTP settings" do
|
|
let(:default_settings) { { address: "mail.consul.dev", username: "main" } }
|
|
let(:super_settings) { { address: "super.consul.dev", username: "super" } }
|
|
|
|
before do
|
|
allow(Rails.application).to receive(:secrets).and_return(ActiveSupport::OrderedOptions.new.merge(
|
|
smtp_settings: default_settings,
|
|
tenants: {
|
|
supermailer: { smtp_settings: super_settings }
|
|
}
|
|
))
|
|
end
|
|
|
|
it "does not overwrite the settings for the default tenant" do
|
|
Mailer.user_invite("test@consul.dev").deliver_now
|
|
|
|
expect(ActionMailer::Base.deliveries.last.delivery_method.settings).to eq({})
|
|
end
|
|
|
|
it "uses specific secret settings for tenants overwriting them" do
|
|
allow(Tenant).to receive(:current_schema).and_return("supermailer")
|
|
|
|
Mailer.user_invite("test@consul.dev").deliver_now
|
|
|
|
expect(ActionMailer::Base.deliveries.last.delivery_method.settings).to eq super_settings
|
|
end
|
|
|
|
it "uses the default secret settings for other tenants" do
|
|
allow(Tenant).to receive(:current_schema).and_return("ultramailer")
|
|
|
|
Mailer.user_invite("test@consul.dev").deliver_now
|
|
|
|
expect(ActionMailer::Base.deliveries.last.delivery_method.settings).to eq default_settings
|
|
end
|
|
end
|
|
end
|
|
end
|