package config import ( "testing" "oneblog/internal/model" ) func TestOverlayDBWinsEnvFallsBack(t *testing.T) { env := &Config{ SiteURL: "https://env.example", GitHubClientID: "env-id", GitHubClientSecret: "env-sec", UploadsPublicBase: "https://cdn.example/", } st := model.Settings{ SiteURL: "https://db.example", GitHubClientSecret: "db-sec", } got := env.Overlay(st) if got.SiteURL != "https://db.example" { t.Errorf("SiteURL = %q, want db value", got.SiteURL) } if got.GitHubClientID != "env-id" { t.Errorf("GitHubClientID = %q, want env fallback", got.GitHubClientID) } if got.GitHubClientSecret != "db-sec" { t.Errorf("GitHubClientSecret = %q, want db value", got.GitHubClientSecret) } // env 原件不能被改掉 if env.SiteURL != "https://env.example" { t.Error("Overlay must not mutate the env config") } } // 存储端按凭据齐全与否重新判定,与 config.Load 的规则一致。 func TestOverlayStorageCompleteness(t *testing.T) { env := &Config{DataDir: "/tmp/one"} full := model.Settings{ S3Endpoint: "https://acct.r2.cloudflarestorage.com", R2Bucket: "b", R2AccessKey: "ak", R2SecretKey: "sk", } if c := env.Overlay(full); c.StorageDriver != "r2" { t.Errorf("complete R2 set: driver = %q, want r2", c.StorageDriver) } partial := full partial.R2SecretKey = "" if c := env.Overlay(partial); c.StorageDriver != "local" { t.Errorf("incomplete R2 set: driver = %q, want local", c.StorageDriver) } }