This commit is contained in:
root
2026-09-19 20:21:47 +02:00
commit 0798933b05
62 changed files with 7658 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
package config
import (
"flag"
"testing"
)
func bind(t *testing.T, args ...string) (*Config, error) {
t.Helper()
fs := flag.NewFlagSet("t", flag.ContinueOnError)
c, err := Bind(fs)
if err != nil {
return nil, err
}
if err := fs.Parse(args); err != nil {
t.Fatal(err)
}
return c, nil
}
func TestBindDefaults(t *testing.T) {
c, err := bind(t)
if err != nil || *c != Default() {
t.Fatalf("got %+v, %v", c, err)
}
}
func TestBindEnvAndFlagPrecedence(t *testing.T) {
t.Setenv("WH_SEED", "42")
t.Setenv("WH_TICKS_PER_DAY", "720")
t.Setenv("WH_ASTEROIDS", "60")
c, err := bind(t)
if err != nil {
t.Fatal(err)
}
if c.Seed != 42 || c.TicksPerDay != 720 || c.AsteroidCount != 60 || c.CyclesPerTick != Default().CyclesPerTick {
t.Fatalf("env not applied: %+v", c)
}
if err := c.Validate(); err != nil {
t.Fatal(err)
}
c, err = bind(t, "-seed", "7")
if err != nil || c.Seed != 7 || c.TicksPerDay != 720 {
t.Fatalf("flag should override env only for itself: %+v, %v", c, err)
}
}
func TestBindRejectsBadEnv(t *testing.T) {
for _, v := range []string{"lots", "-3", "1.5"} {
t.Setenv("WH_SEED", v)
if _, err := bind(t); err == nil {
t.Errorf("WH_SEED=%q should be rejected", v)
}
}
t.Setenv("WH_SEED", "")
t.Setenv("WH_COMM_BYTES", "big")
if _, err := bind(t); err == nil {
t.Error("WH_COMM_BYTES=big should be rejected")
}
}
func TestDatabaseURL(t *testing.T) {
t.Setenv("DATABASE_URL", "")
if DatabaseURL() != "sqlite:wh.db" {
t.Fatal("default")
}
t.Setenv("DATABASE_URL", "postgres://x")
if DatabaseURL() != "postgres://x" {
t.Fatal("env")
}
}