test(chat,playout): enable test suite, coverage gate, switch to pure-Go SQLite driver

This commit is contained in:
zwitschi committed 2026-08-07 14:06:30 +02:00
1 parent b3a10ba3ef
commit e8a43b8a79
16 files changed
+3257 -8

No files matched your search

+267
View File
@@ -0,0 +1,267 @@
package config
import (
"os"
"testing"
"time"
)
func TestPlaylistPath(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "/app/playlist/playlist.txt"},
{"custom", "/custom/playlist.txt", "/custom/playlist.txt"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("PLAYLIST_PATH", tt.env)
defer os.Unsetenv("PLAYLIST_PATH")
} else {
os.Unsetenv("PLAYLIST_PATH")
}
if got := PlaylistPath(); got != tt.expected {
t.Errorf("PlaylistPath() = %q, want %q", got, tt.expected)
}
})
}
}
func TestMediaDir(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "/app/media"},
{"custom", "/data/media", "/data/media"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("MEDIA_DIR", tt.env)
defer os.Unsetenv("MEDIA_DIR")
} else {
os.Unsetenv("MEDIA_DIR")
}
if got := MediaDir(); got != tt.expected {
t.Errorf("MediaDir() = %q, want %q", got, tt.expected)
}
})
}
}
func TestAdminUsername(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "admin"},
{"custom", "superadmin", "superadmin"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("ADMIN_USERNAME", tt.env)
defer os.Unsetenv("ADMIN_USERNAME")
} else {
os.Unsetenv("ADMIN_USERNAME")
}
if got := AdminUsername(); got != tt.expected {
t.Errorf("AdminUsername() = %q, want %q", got, tt.expected)
}
})
}
}
func TestAdminPassword(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "admin"},
{"custom", "secret123", "secret123"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("ADMIN_PASSWORD", tt.env)
defer os.Unsetenv("ADMIN_PASSWORD")
} else {
os.Unsetenv("ADMIN_PASSWORD")
}
if got := AdminPassword(); got != tt.expected {
t.Errorf("AdminPassword() = %q, want %q", got, tt.expected)
}
})
}
}
func TestAdminSessionTTL(t *testing.T) {
tests := []struct {
name string
env string
expected time.Duration
}{
{"default", "", 12 * time.Hour},
{"custom", "24", 24 * time.Hour},
{"zero", "0", 12 * time.Hour},
{"negative", "-5", 12 * time.Hour},
{"invalid", "abc", 12 * time.Hour},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("ADMIN_SESSION_TTL_HOURS", tt.env)
defer os.Unsetenv("ADMIN_SESSION_TTL_HOURS")
} else {
os.Unsetenv("ADMIN_SESSION_TTL_HOURS")
}
if got := AdminSessionTTL(); got != tt.expected {
t.Errorf("AdminSessionTTL() = %v, want %v", got, tt.expected)
}
})
}
}
func TestRateLimitMax(t *testing.T) {
tests := []struct {
name string
env string
expected int
}{
{"default", "", 10},
{"custom", "20", 20},
{"zero", "0", 10},
{"negative", "-5", 10},
{"invalid", "abc", 10},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("CHAT_RATE_LIMIT_MAX", tt.env)
defer os.Unsetenv("CHAT_RATE_LIMIT_MAX")
} else {
os.Unsetenv("CHAT_RATE_LIMIT_MAX")
}
if got := RateLimitMax(); got != tt.expected {
t.Errorf("RateLimitMax() = %d, want %d", got, tt.expected)
}
})
}
}
func TestRateLimitWindow(t *testing.T) {
tests := []struct {
name string
env string
expected time.Duration
}{
{"default", "", 10 * time.Second},
{"custom", "30", 30 * time.Second},
{"zero", "0", 10 * time.Second},
{"negative", "-5", 10 * time.Second},
{"invalid", "abc", 10 * time.Second},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("CHAT_RATE_LIMIT_WINDOW_S", tt.env)
defer os.Unsetenv("CHAT_RATE_LIMIT_WINDOW_S")
} else {
os.Unsetenv("CHAT_RATE_LIMIT_WINDOW_S")
}
if got := RateLimitWindow(); got != tt.expected {
t.Errorf("RateLimitWindow() = %v, want %v", got, tt.expected)
}
})
}
}
func TestChatPort(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "3000"},
{"custom", "8080", "8080"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("CHAT_PORT", tt.env)
defer os.Unsetenv("CHAT_PORT")
} else {
os.Unsetenv("CHAT_PORT")
}
if got := ChatPort(); got != tt.expected {
t.Errorf("ChatPort() = %q, want %q", got, tt.expected)
}
})
}
}
func TestRedisAddress(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", "redis:6379"},
{"custom", "redis.example.com:6380", "redis.example.com:6380"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("REDIS_URL", tt.env)
defer os.Unsetenv("REDIS_URL")
} else {
os.Unsetenv("REDIS_URL")
}
if got := RedisAddress(); got != tt.expected {
t.Errorf("RedisAddress() = %q, want %q", got, tt.expected)
}
})
}
}
func TestDatabaseURL(t *testing.T) {
tests := []struct {
name string
env string
expected string
}{
{"default", "", ""},
{"sqlite", "sqlite://test.db", "sqlite://test.db"},
{"postgres", "postgres://user:pass@localhost/db", "postgres://user:pass@localhost/db"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.env != "" {
os.Setenv("DATABASE_URL", tt.env)
defer os.Unsetenv("DATABASE_URL")
} else {
os.Unsetenv("DATABASE_URL")
}
if got := DatabaseURL(); got != tt.expected {
t.Errorf("DatabaseURL() = %q, want %q", got, tt.expected)
}
})
}
}