108 lines
2.6 KiB
Go
108 lines
2.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestFirstNonEmptyReturnsFirstNonBlank(t *testing.T) {
|
|
if got := firstNonEmpty("", "b", "c"); got != "b" {
|
|
t.Fatalf("got %q, want %q", got, "b")
|
|
}
|
|
}
|
|
|
|
func TestFirstNonEmptyReturnsEmptyWhenAllBlank(t *testing.T) {
|
|
if got := firstNonEmpty("", "", ""); got != "" {
|
|
t.Fatalf("got %q, want empty", got)
|
|
}
|
|
}
|
|
|
|
func TestFirstNonEmptySkipsWhitespaceOnly(t *testing.T) {
|
|
if got := firstNonEmpty(" ", "x"); got != "x" {
|
|
t.Fatalf("got %q, want %q", got, "x")
|
|
}
|
|
}
|
|
|
|
func TestTruthyRecognises1TrueYesYOn(t *testing.T) {
|
|
for _, v := range []string{"1", "true", "True", "TRUE", "yes", "Yes", "y", "Y", "on", "ON"} {
|
|
if !truthy(v) {
|
|
t.Fatalf("truthy(%q) = false, want true", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTruthyReturnsFalseForEmptyAndGarbage(t *testing.T) {
|
|
for _, v := range []string{"", "0", "false", "no", "off", "maybe"} {
|
|
if truthy(v) {
|
|
t.Fatalf("truthy(%q) = true, want false", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLoadDefaults(t *testing.T) {
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load(): %v", err)
|
|
}
|
|
if cfg.Port != "3000" {
|
|
t.Fatalf("Port = %q, want %q", cfg.Port, "3000")
|
|
}
|
|
if cfg.DatabaseFile != "mal.db" {
|
|
t.Fatalf("DatabaseFile = %q, want %q", cfg.DatabaseFile, "mal.db")
|
|
}
|
|
if cfg.EpisodeAvailabilityMode != EpisodeAvailabilityModeAuto {
|
|
t.Fatalf("EpisodeAvailabilityMode = %q, want %q", cfg.EpisodeAvailabilityMode, EpisodeAvailabilityModeAuto)
|
|
}
|
|
}
|
|
|
|
func TestLoadReadsEnv(t *testing.T) {
|
|
os.Setenv("PORT", "8080")
|
|
os.Setenv("DATABASE_FILE", "/tmp/test.db")
|
|
os.Setenv("MAL_CORS_ALLOW_ALL", "1")
|
|
os.Setenv("MAL_JIKAN_TRACE", "true")
|
|
defer func() {
|
|
os.Unsetenv("PORT")
|
|
os.Unsetenv("DATABASE_FILE")
|
|
os.Unsetenv("MAL_CORS_ALLOW_ALL")
|
|
os.Unsetenv("MAL_JIKAN_TRACE")
|
|
}()
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load(): %v", err)
|
|
}
|
|
if cfg.Port != "8080" {
|
|
t.Fatalf("Port = %q, want %q", cfg.Port, "8080")
|
|
}
|
|
if cfg.DatabaseFile != "/tmp/test.db" {
|
|
t.Fatalf("DatabaseFile = %q, want %q", cfg.DatabaseFile, "/tmp/test.db")
|
|
}
|
|
if !cfg.CORSAllowAll {
|
|
t.Fatal("CORSAllowAll = false, want true")
|
|
}
|
|
if !cfg.JikanTrace {
|
|
t.Fatal("JikanTrace = false, want true")
|
|
}
|
|
}
|
|
|
|
func TestLoadInvalidEpisodeAvailabilityMode(t *testing.T) {
|
|
os.Setenv("EPISODE_AVAILABILITY_MODE", "invalid")
|
|
defer os.Unsetenv("EPISODE_AVAILABILITY_MODE")
|
|
|
|
_, err := Load()
|
|
if err == nil {
|
|
t.Fatal("expected error for invalid EPISODE_AVAILABILITY_MODE")
|
|
}
|
|
}
|
|
|
|
func TestLoadEmptyPortIsError(t *testing.T) {
|
|
os.Setenv("PORT", "")
|
|
os.Setenv("DATABASE_FILE", "mal.db")
|
|
defer os.Unsetenv("PORT")
|
|
|
|
_, err := Load()
|
|
if err == nil {
|
|
t.Fatal("expected error for empty PORT")
|
|
}
|
|
}
|