package config import ( "runtime" "testing" ) func TestNewReadsPort(t *testing.T) { tests := map[string]int{ "": defaultPort, "1": 1, "9090": 9090, "65535": 65535, } for value, want := range tests { t.Run(value, func(t *testing.T) { t.Setenv("PORT", value) t.Setenv("XDG_DATA_HOME", "") cfg, err := New() if err != nil { t.Fatalf("New() with PORT=%q: %v", value, err) } if cfg.Port != want { t.Errorf("New() with PORT=%q: Port = %d, want %d", value, cfg.Port, want) } }) } } func TestNewRefusesInvalidPort(t *testing.T) { for _, value := range []string{"0", "65536", "-1", "http", "80.5"} { t.Run(value, func(t *testing.T) { t.Setenv("PORT", value) t.Setenv("XDG_DATA_HOME", "") if _, err := New(); err == nil { t.Errorf("New() with PORT=%q returned no error", value) } }) } } func TestNewRefusesRelativeXDGDataHome(t *testing.T) { if runtime.GOOS == "darwin" { t.Skip("macOS does not read XDG_DATA_HOME") } t.Setenv("PORT", "") t.Setenv("XDG_DATA_HOME", "relative/path") if _, err := New(); err == nil { t.Error("New() with a relative XDG_DATA_HOME returned no error") } t.Setenv("XDG_DATA_HOME", "/var/lib") if _, err := New(); err != nil { t.Errorf("New() with XDG_DATA_HOME=/var/lib: %v", err) } }