We were assigning variants in a controller, in the context of a request. However, when sending emails, there is no request and no controller is involved, so we also need to set the variant in the ApplicationMailer class.
100 lines
3.1 KiB
Ruby
100 lines
3.1 KiB
Ruby
require "rails_helper"
|
|
|
|
describe ApplicationMailer do
|
|
describe "#default_url_options" do
|
|
it "returns the same options on the default tenant" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return({ host: "consul.dev" })
|
|
|
|
expect(ApplicationMailer.new.default_url_options).to eq({ host: "consul.dev" })
|
|
end
|
|
|
|
it "returns the host with a subdomain on other tenants" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return({ host: "consul.dev" })
|
|
allow(Tenant).to receive(:current_schema).and_return("my")
|
|
|
|
expect(ApplicationMailer.new.default_url_options).to eq({ host: "my.consul.dev" })
|
|
end
|
|
|
|
it "uses lvh.me for subdomains when the host is localhost" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return({ host: "localhost", port: 3000 })
|
|
allow(Tenant).to receive(:current_schema).and_return("dev")
|
|
|
|
expect(ApplicationMailer.new.default_url_options).to eq({ host: "dev.lvh.me", port: 3000 })
|
|
end
|
|
end
|
|
|
|
describe "#set_asset_host" do
|
|
let(:mailer) { ApplicationMailer.new }
|
|
|
|
it "returns a host based on the default_url_options by default" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return(host: "consul.dev")
|
|
|
|
mailer.set_asset_host
|
|
|
|
expect(mailer.asset_host).to eq "http://consul.dev"
|
|
end
|
|
|
|
it "considers options like port and protocol" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return(
|
|
host: "localhost",
|
|
protocol: "https",
|
|
port: 3000
|
|
)
|
|
|
|
mailer.set_asset_host
|
|
|
|
expect(mailer.asset_host).to eq "https://localhost:3000"
|
|
end
|
|
|
|
it "returns the host with a subdomain on other tenants" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return(host: "consul.dev")
|
|
allow(Tenant).to receive(:current_schema).and_return("my")
|
|
|
|
mailer.set_asset_host
|
|
|
|
expect(mailer.asset_host).to eq "http://my.consul.dev"
|
|
end
|
|
|
|
it "uses lvh.me for subdomains when the host is localhost" do
|
|
allow(ActionMailer::Base).to receive(:default_url_options).and_return(host: "localhost", port: 3000)
|
|
allow(Tenant).to receive(:current_schema).and_return("dev")
|
|
|
|
mailer.set_asset_host
|
|
|
|
expect(mailer.asset_host).to eq "http://dev.lvh.me:3000"
|
|
end
|
|
|
|
it "returns the asset host when set manually" do
|
|
default_asset_host = ActionMailer::Base.asset_host
|
|
|
|
begin
|
|
ActionMailer::Base.asset_host = "http://consulassets.dev"
|
|
|
|
mailer.set_asset_host
|
|
|
|
expect(mailer.asset_host).to eq "http://consulassets.dev"
|
|
ensure
|
|
ActionMailer::Base.asset_host = default_asset_host
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#set_variant" do
|
|
let(:mailer) { ApplicationMailer.new }
|
|
|
|
it "uses the default tenant by default" do
|
|
mailer.set_variant
|
|
|
|
expect(mailer.lookup_context.variants).to eq [:public]
|
|
end
|
|
|
|
it "uses the current tenant schema when defined" do
|
|
allow(Tenant).to receive(:current_schema).and_return("random-name")
|
|
|
|
mailer.set_variant
|
|
|
|
expect(mailer.lookup_context.variants).to eq [:"random-name"]
|
|
end
|
|
end
|
|
end
|