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