* feat: create a from_email_address and a reply_to_email_address * feat: update other mailers with the new SMTP email settings * test: update all spec files * fix: use the SMTP::Settings value * fix tests * spec: fix the comma * feat: tighten some logic * fix: test * fix tests * fix tests * final fix test commit * fix test * fix test * oops * feat: add a reply_to for Devise Mailer * chore: update the description * use a proc for reply_to * feat: update text * Update spec/mailers/digest_mailer_spec.rb Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com> * Update spec/mailers/verification_mailer_spec.rb Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com> * Update spec/mailers/shared_examples/renders_proper_email_headers.rb Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com> * refactor: move OPTIONS to a helper as its only being used in the view layer Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>
198 lines
7.4 KiB
Ruby
198 lines
7.4 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe ForemInstance, type: :model do
|
|
describe "deployed_at" do
|
|
before do
|
|
allow(ENV).to receive(:[])
|
|
described_class.instance_variable_set(:@deployed_at, nil)
|
|
end
|
|
|
|
after do
|
|
described_class.instance_variable_set(:@deployed_at, nil)
|
|
end
|
|
|
|
it "sets the RELEASE_FOOTPRINT if present" do
|
|
allow(ApplicationConfig).to receive(:[]).with("RELEASE_FOOTPRINT").and_return("A deploy date")
|
|
expect(described_class.deployed_at).to eq(ApplicationConfig["RELEASE_FOOTPRINT"])
|
|
end
|
|
|
|
it "sets the HEROKU_RELEASE_CREATED_AT if the RELEASE_FOOTPRINT is not present" do
|
|
allow(ApplicationConfig).to receive(:[]).with("RELEASE_FOOTPRINT").and_return("")
|
|
allow(ENV).to receive(:[]).with("HEROKU_RELEASE_CREATED_AT").and_return("A deploy date set on Heroku")
|
|
expect(described_class.deployed_at).to eq(ENV["HEROKU_RELEASE_CREATED_AT"])
|
|
end
|
|
|
|
it "sets to current time if HEROKU_RELEASE_CREATED_AT and RELEASE_FOOTPRINT are not present" do
|
|
Timecop.freeze do
|
|
allow(ApplicationConfig).to receive(:[]).with("RELEASE_FOOTPRINT").and_return("")
|
|
allow(ENV).to receive(:[]).with("HEROKU_RELEASE_CREATED_AT").and_return("")
|
|
expect(described_class.deployed_at).to eq(Time.current.to_s)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "latest_commit_id" do
|
|
before do
|
|
described_class.instance_variable_set(:@latest_commit_id, nil)
|
|
end
|
|
|
|
it "sets the FOREM_BUILD_SHA if present" do
|
|
allow(ApplicationConfig).to receive(:[]).with("FOREM_BUILD_SHA").and_return("A commit id")
|
|
stub_const("ENV", ENV.to_h.merge("HEROKU_SLUG_COMMIT" => ""))
|
|
expect(described_class.latest_commit_id).to eq(ApplicationConfig["FOREM_BUILD_SHA"])
|
|
end
|
|
|
|
it "sets the HEROKU_RELEASE_CREATED_AT if the RELEASE_FOOTPRINT is not present" do
|
|
allow(ApplicationConfig).to receive(:[]).with("FOREM_BUILD_SHA").and_return("")
|
|
stub_const("ENV", ENV.to_h.merge("HEROKU_SLUG_COMMIT" => "A Commit ID set from Heroku"))
|
|
expect(described_class.latest_commit_id).to eq(ENV["HEROKU_SLUG_COMMIT"])
|
|
end
|
|
end
|
|
|
|
describe ".local?" do
|
|
it "returns true if the .app_domain points to localhost" do
|
|
allow(Settings::General).to receive(:app_domain).and_return("localhost:3000")
|
|
|
|
expect(described_class.local?).to be(true)
|
|
end
|
|
|
|
it "returns false if the .app_domain points to a regular domain" do
|
|
allow(Settings::General).to receive(:app_domain).and_return("forem.dev")
|
|
|
|
expect(described_class.local?).to be(false)
|
|
end
|
|
end
|
|
|
|
describe ".dev_to?" do
|
|
it "returns true if the .app_domain is dev.to" do
|
|
allow(Settings::General).to receive(:app_domain).and_return("dev.to")
|
|
|
|
expect(described_class.dev_to?).to be(true)
|
|
end
|
|
|
|
it "returns false if the .app_domain is not dev.to" do
|
|
allow(Settings::General).to receive(:app_domain).and_return("forem.dev")
|
|
|
|
expect(described_class.dev_to?).to be(false)
|
|
end
|
|
end
|
|
|
|
describe ".smtp_enabled?" do
|
|
it "return false when no credential is provided" do
|
|
expect(described_class.smtp_enabled?).to be(false)
|
|
end
|
|
|
|
it "returns true if provided_minimum_settings?" do
|
|
allow(Settings::SMTP).to receive(:address).and_return("address")
|
|
allow(Settings::SMTP).to receive(:user_name).and_return("something")
|
|
allow(Settings::SMTP).to receive(:password).and_return("something")
|
|
|
|
expect(described_class.smtp_enabled?).to be(true)
|
|
end
|
|
|
|
it "returns true if sendgrid api key is available" do
|
|
ENV["SENDGRID_API_KEY"] = "something"
|
|
expect(described_class.smtp_enabled?).to be(true)
|
|
ENV["SENDGRID_API_KEY"] = nil
|
|
end
|
|
end
|
|
|
|
describe ".contact_email" do
|
|
let(:email) { "contact@dev.to" }
|
|
|
|
before do
|
|
allow(Settings::General).to receive(:contact_email).and_return(email)
|
|
end
|
|
|
|
it "sets the correct email" do
|
|
expect(described_class.contact_email).to be(email)
|
|
end
|
|
end
|
|
|
|
describe ".reply_to_email_address" do
|
|
context "when the minimum SMTP settings have been provided" do
|
|
let(:reply_to_email_address) { "custom_reply@forem.com" }
|
|
|
|
before do
|
|
allow(Settings::SMTP).to receive(:reply_to_email_address).and_return(reply_to_email_address)
|
|
allow(described_class).to receive(:email).and_return("noreply@forem.com")
|
|
allow(Settings::SMTP).to receive(:provided_minimum_settings?).and_return(true)
|
|
end
|
|
|
|
it "returns the correct email address" do
|
|
expect(described_class.reply_to_email_address).to be(reply_to_email_address)
|
|
end
|
|
end
|
|
|
|
context "when the minimum SMTP settings have not been provided" do
|
|
let(:reply_to_email_address) { "custom_reply@forem.com" }
|
|
let(:default_email_address) { "noreply@forem.com" }
|
|
|
|
before do
|
|
allow(Settings::SMTP).to receive(:reply_to_email_address).and_return(reply_to_email_address)
|
|
allow(described_class).to receive(:email).and_return(default_email_address)
|
|
allow(Settings::SMTP).to receive(:provided_minimum_settings?).and_return(false)
|
|
end
|
|
|
|
it "returns the correct email address" do
|
|
expect(described_class.reply_to_email_address).to be(default_email_address)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe ".from_email_address" do
|
|
context "when the minimum SMTP settings have been provided" do
|
|
let(:from_email_address) { "custom_noreply@forem.com" }
|
|
|
|
before do
|
|
allow(Settings::SMTP).to receive(:from_email_address).and_return(from_email_address)
|
|
allow(described_class).to receive(:email).and_return("noreply@forem.com")
|
|
allow(Settings::SMTP).to receive(:provided_minimum_settings?).and_return(true)
|
|
end
|
|
|
|
it "returns the correct email address" do
|
|
expect(described_class.from_email_address).to be(from_email_address)
|
|
end
|
|
end
|
|
|
|
context "when the minimum SMTP settings have not been provided" do
|
|
let(:from_email_address) { "custom_noreply@forem.com" }
|
|
let(:default_email_address) { "noreply@forem.com" }
|
|
|
|
before do
|
|
allow(Settings::SMTP).to receive(:from_email_address).and_return(from_email_address)
|
|
allow(described_class).to receive(:email).and_return(default_email_address)
|
|
allow(Settings::SMTP).to receive(:provided_minimum_settings?).and_return(false)
|
|
end
|
|
|
|
it "returns the correct email address" do
|
|
expect(described_class.from_email_address).to be(default_email_address)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe ".only_sendgrid_enabled?" do
|
|
it "returns false when the minimum SMTP settings are provided" do
|
|
allow(Settings::SMTP).to receive(:user_name).and_return("something")
|
|
allow(Settings::SMTP).to receive(:password).and_return("something")
|
|
allow(Settings::SMTP).to receive(:address).and_return("something")
|
|
|
|
expect(described_class.only_sendgrid_enabled?).to be(false)
|
|
end
|
|
|
|
it "returns false when Sendgrid is not enabled" do
|
|
allow(described_class).to receive(:sendgrid_enabled?).and_return(false)
|
|
expect(described_class.only_sendgrid_enabled?).to be(false)
|
|
end
|
|
|
|
it "returns true if Sendgrid is enabled and the minimum SMTP settings are not provided" do
|
|
allow(described_class).to receive(:sendgrid_enabled?).and_return(true)
|
|
|
|
allow(Settings::SMTP).to receive(:user_name).and_return(nil)
|
|
allow(Settings::SMTP).to receive(:password).and_return(nil)
|
|
allow(Settings::SMTP).to receive(:address).and_return(nil)
|
|
|
|
expect(described_class.only_sendgrid_enabled?).to be(true)
|
|
end
|
|
end
|
|
end
|