- store/sqlite: 75.4% (repos + db coverage) - host/sub2api: 80.8% (httptest mock server, pure function tests) - app: 74.2% (handler error paths, NewActionSet closures) - pack: 72.4% - provision: 75.2% - access: 77.3% - config: 94.7% (lookup mock tests) All tests pass: build, vet, race, coverage gates.
86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package integration_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"sub2api-cn-relay-manager/internal/app"
|
|
"sub2api-cn-relay-manager/internal/config"
|
|
)
|
|
|
|
func TestLoadStartupFromEnvUsesDefaultsWhenOptionalValuesMissing(t *testing.T) {
|
|
t.Setenv("SUB2API_CRM_LISTEN_ADDR", "")
|
|
t.Setenv("SUB2API_CRM_SQLITE_DSN", "")
|
|
|
|
cfg, err := config.LoadStartupFromEnv()
|
|
if err != nil {
|
|
t.Fatalf("LoadStartupFromEnv() returned error: %v", err)
|
|
}
|
|
|
|
if cfg.Server.ListenAddr != config.DefaultListenAddr {
|
|
t.Fatalf("ListenAddr = %q, want %q", cfg.Server.ListenAddr, config.DefaultListenAddr)
|
|
}
|
|
|
|
if cfg.Database.SQLiteDSN != config.DefaultSQLiteDSN {
|
|
t.Fatalf("SQLiteDSN = %q, want %q", cfg.Database.SQLiteDSN, config.DefaultSQLiteDSN)
|
|
}
|
|
}
|
|
|
|
func TestLoadStartupFromEnvAppliesOverrides(t *testing.T) {
|
|
t.Setenv("SUB2API_CRM_LISTEN_ADDR", "127.0.0.1:9090")
|
|
t.Setenv("SUB2API_CRM_SQLITE_DSN", "file:custom.db?_foreign_keys=on")
|
|
|
|
cfg, err := config.LoadStartupFromEnv()
|
|
if err != nil {
|
|
t.Fatalf("LoadStartupFromEnv() returned error: %v", err)
|
|
}
|
|
|
|
if cfg.Server.ListenAddr != "127.0.0.1:9090" {
|
|
t.Fatalf("ListenAddr = %q, want %q", cfg.Server.ListenAddr, "127.0.0.1:9090")
|
|
}
|
|
|
|
if cfg.Database.SQLiteDSN != "file:custom.db?_foreign_keys=on" {
|
|
t.Fatalf("SQLiteDSN = %q, want %q", cfg.Database.SQLiteDSN, "file:custom.db?_foreign_keys=on")
|
|
}
|
|
}
|
|
|
|
func TestLoadAdminTokenFromEnvReturnsToken(t *testing.T) {
|
|
t.Setenv("SUB2API_CRM_ADMIN_TOKEN", "admin-token")
|
|
|
|
token, err := config.LoadAdminTokenFromEnv()
|
|
if err != nil {
|
|
t.Fatalf("LoadAdminTokenFromEnv() returned error: %v", err)
|
|
}
|
|
|
|
if token != "admin-token" {
|
|
t.Fatalf("token = %q, want %q", token, "admin-token")
|
|
}
|
|
}
|
|
|
|
func TestLoadAdminTokenFromEnvReturnsErrorWhenMissing(t *testing.T) {
|
|
t.Setenv("SUB2API_CRM_ADMIN_TOKEN", "")
|
|
|
|
_, err := config.LoadAdminTokenFromEnv()
|
|
if err == nil {
|
|
t.Fatal("LoadAdminTokenFromEnv() error = nil, want validation error")
|
|
}
|
|
}
|
|
|
|
func TestBootstrapBuildsServerWithStartupConfigAndAdminToken(t *testing.T) {
|
|
t.Setenv("SUB2API_CRM_LISTEN_ADDR", ":8181")
|
|
t.Setenv("SUB2API_CRM_ADMIN_TOKEN", "admin-token")
|
|
|
|
server, err := app.Bootstrap(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("Bootstrap() returned error: %v", err)
|
|
}
|
|
|
|
if server == nil {
|
|
t.Fatal("Bootstrap() returned nil server")
|
|
}
|
|
|
|
if server.Addr() != ":8181" {
|
|
t.Fatalf("Bootstrap Addr = %q, want %q", server.Addr(), ":8181")
|
|
}
|
|
}
|