phase 0 complete

This commit is contained in:
2026-08-14 11:29:11 -06:00
parent 4da16c7573
commit 85df9a208e
102 changed files with 25019 additions and 30 deletions
+96
View File
@@ -0,0 +1,96 @@
package config
import "testing"
func clearEnv(t *testing.T) {
t.Helper()
keys := []string{
"DATABASE_URL", "HTTP_PORT", "BASE_URL", "SESSION_SECRET", "UPLOAD_DIR",
"MAX_UPLOAD_MB", "MEILI_URL", "MEILI_KEY", "SMTP_HOST", "SMTP_PORT",
"SMTP_USER", "SMTP_PASS", "SMTP_FROM", "GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET",
"GITEA_URL", "GITEA_CLIENT_ID", "GITEA_CLIENT_SECRET", "CULL_AFTER_DAYS", "LOG_LEVEL",
}
for _, k := range keys {
t.Setenv(k, "")
}
}
func validRequired(t *testing.T) {
t.Helper()
t.Setenv("DATABASE_URL", "postgres://localhost/solopm")
t.Setenv("BASE_URL", "http://localhost:8080")
t.Setenv("SESSION_SECRET", "01234567890123456789012345678901")
}
func TestLoad_MissingRequired(t *testing.T) {
clearEnv(t)
_, err := Load()
if err == nil {
t.Fatal("expected error for missing required vars, got nil")
}
}
func TestLoad_ShortSessionSecret(t *testing.T) {
clearEnv(t)
t.Setenv("DATABASE_URL", "postgres://localhost/solopm")
t.Setenv("BASE_URL", "http://localhost:8080")
t.Setenv("SESSION_SECRET", "tooshort")
_, err := Load()
if err == nil {
t.Fatal("expected error for short SESSION_SECRET, got nil")
}
}
func TestLoad_Defaults(t *testing.T) {
clearEnv(t)
validRequired(t)
c, err := Load()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if c.HTTPPort != "8080" {
t.Errorf("HTTPPort = %q, want 8080", c.HTTPPort)
}
if c.UploadDir != "./uploads" {
t.Errorf("UploadDir = %q, want ./uploads", c.UploadDir)
}
if c.MaxUploadMB != 25 {
t.Errorf("MaxUploadMB = %d, want 25", c.MaxUploadMB)
}
if c.CullAfterDays != 30 {
t.Errorf("CullAfterDays = %d, want 30", c.CullAfterDays)
}
if c.LogLevel != "info" {
t.Errorf("LogLevel = %q, want info", c.LogLevel)
}
if c.SearchEnabled() {
t.Error("SearchEnabled() = true, want false when MEILI_URL/KEY unset")
}
if c.EmailEnabled() {
t.Error("EmailEnabled() = true, want false when SMTP_HOST unset")
}
}
func TestLoad_SearchEnabled(t *testing.T) {
clearEnv(t)
validRequired(t)
t.Setenv("MEILI_URL", "http://meilisearch:7700")
t.Setenv("MEILI_KEY", "key")
c, err := Load()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !c.SearchEnabled() {
t.Error("SearchEnabled() = false, want true when MEILI_URL/KEY set")
}
}
func TestLoad_InvalidInt(t *testing.T) {
clearEnv(t)
validRequired(t)
t.Setenv("MAX_UPLOAD_MB", "not-a-number")
_, err := Load()
if err == nil {
t.Fatal("expected error for non-integer MAX_UPLOAD_MB, got nil")
}
}