Files
backend_fiesta/config/mail_test.go
2026-09-30 14:58:30 +05:30

96 lines
3.6 KiB
Go

package config
import "testing"
// Confirms docs/MAIL_SETUP.md is telling the truth about the committed `.env`:
// a sender is set, a host is not, and the server therefore reports mail OFF with
// a reason naming the variable — rather than trying and failing to send.
func TestCommittedEnvLeavesMailOffWithAReason(t *testing.T) {
t.Setenv("MAIL_HOST", "")
t.Setenv("MAIL_PORT", "587")
t.Setenv("MAIL_FROM", "care@nearledaily.com")
t.Setenv("MAIL_FROM_NAME", "Nearle")
t.Setenv("MAIL_CONSOLE_URL", "https://app.nearledaily.com")
cfg := MailFromEnv()
if cfg.Enabled() {
t.Fatal("mail reported as enabled with no host")
}
if cfg.Why() == "" || cfg.Why()[:9] != "MAIL_HOST" {
t.Fatalf("the reason does not name the missing variable: %q", cfg.Why())
}
// And with the Postal host supplied from .env.secrets, it comes on and the
// link points at the MERCHANT console.
t.Setenv("MAIL_HOST", "postal.nearledaily.com")
on := MailFromEnv()
if !on.Enabled() {
t.Fatalf("still off with a host set: %s", on.Why())
}
if got := on.InviteLink("i1.abc.def"); got != "https://app.nearledaily.com/set-password?t=i1.abc.def" {
t.Fatalf("the invitation would point at %q", got)
}
if on.Address() != "postal.nearledaily.com:587" {
t.Fatalf("wrong SMTP address: %q", on.Address())
}
}
/* ── Google App Passwords ────────────────────────────────────────────────── */
func TestAGoogleAppPasswordSurvivesBeingPastedWithItsSpaces(t *testing.T) {
// Google shows it as "abcd efgh ijkl mnop". The spaces are presentation.
// Pasted verbatim they reach Gmail, which refuses the login — reported as
// "the mail server refused our credentials", sending somebody to revoke a
// password that was fine.
t.Setenv("MAIL_HOST", "smtp.gmail.com")
t.Setenv("MAIL_PORT", "587")
t.Setenv("MAIL_USERNAME", "care@nearledaily.com")
t.Setenv("MAIL_PASSWORD", "abcd efgh ijkl mnop")
t.Setenv("MAIL_FROM", "care@nearledaily.com")
t.Setenv("MAIL_CONSOLE_URL", "https://app.nearledaily.com")
if got := MailFromEnv().Password; got != "abcdefghijklmnop" {
t.Fatalf("password reached the relay as %q", got)
}
}
func TestAnAlreadyCleanAppPasswordIsUntouched(t *testing.T) {
t.Setenv("MAIL_HOST", "smtp.gmail.com")
t.Setenv("MAIL_PASSWORD", "abcdefghijklmnop")
if got := MailFromEnv().Password; got != "abcdefghijklmnop" {
t.Fatalf("got %q", got)
}
}
func TestAnotherRelaysPasswordIsNeverEdited(t *testing.T) {
// A secret is a secret. Another relay's password may legitimately contain a
// space, and stripping it there turns a working credential into a silent
// authentication failure — this bug pointed the other way.
for _, host := range []string{"smtp.sendgrid.net", "email-smtp.ap-south-1.amazonaws.com", "postal.nearledaily.com"} {
t.Setenv("MAIL_HOST", host)
t.Setenv("MAIL_PASSWORD", "two words here x")
if got := MailFromEnv().Password; got != "two words here x" {
t.Errorf("%s: password was edited to %q", host, got)
}
}
}
func TestSomethingThatIsNotAnAppPasswordIsLeftAlone(t *testing.T) {
// Only the exact shape Google issues — sixteen alphanumerics — is treated
// as display formatting. Anything else is somebody's real password.
t.Setenv("MAIL_HOST", "smtp.gmail.com")
for _, password := range []string{
"short one", // not 16 after stripping
"a much longer pass phrase here", // not 16
"abcd efgh ijkl mno!", // punctuation: not an App Password
} {
t.Setenv("MAIL_PASSWORD", password)
if got := MailFromEnv().Password; got != password {
t.Errorf("%q was rewritten to %q", password, got)
}
}
}