package test import ( "RenewCMS/internal/infrastructure/config" "os" "strings" "testing" ) const maxSourceEnv = "IMAGE_VARIANT_MAX_SOURCE_BYTES" func readRepositoryFile(t *testing.T, relative string) string { t.Helper() content, err := os.ReadFile("../" + relative) if err != nil { t.Fatalf("cannot read %s: %v", relative, err) } return string(content) } func between(source string, opening string, closing string) string { start := strings.Index(source, opening) if start < 0 { return "" } rest := source[start+len(opening):] end := strings.Index(rest, closing) if end < 0 { return rest } return rest[:end] } func TestImageVariantMaxSourceBytesSetting(t *testing.T) { rows := []struct { value string unset bool want int64 failure bool }{ {unset: true, want: 10485760}, {value: "2048", want: 2048}, {value: "1", want: 1}, {value: "0", failure: true}, {value: "-5", failure: true}, {value: "many", failure: true}, {value: "1.5", failure: true}, } for _, row := range rows { name := row.value if row.unset { name = "unset" } t.Run("The env var is loaded: "+name, func(t *testing.T) { setBaseSettingsEnv(t) if row.unset { t.Setenv(maxSourceEnv, "") } else { t.Setenv(maxSourceEnv, row.value) } settings, err := config.NewSettingsFromEnv() if row.failure { if err == nil || !strings.Contains(err.Error(), maxSourceEnv) { t.Errorf("err = %v", err) } return } if err != nil || settings.ImageVariantMaxSourceBytes != row.want { t.Errorf("value = %d, err = %v", settings.ImageVariantMaxSourceBytes, err) } }) } } func TestImageVariantMaxSourceBytesDocumentation(t *testing.T) { t.Run("The default is listed in envDefaults and not in requiredEnvVars", func(t *testing.T) { main := readRepositoryFile(t, "cmd/server/main.go") defaults := between(main, "var envDefaults = map[string]string{", "\n}") required := between(main, "var requiredEnvVars = []string{", "\n}") if !strings.Contains(defaults, "config.EnvImageVariantMaxSourceBytes") || strings.Contains(required, "ImageVariant") || strings.Contains(required, maxSourceEnv) { t.Error("the default is misplaced") } }) t.Run("The constant name and default are the documented ones", func(t *testing.T) { if config.EnvImageVariantMaxSourceBytes != maxSourceEnv || config.DefaultImageVariantMaxSourceBytes != "10485760" { t.Errorf("constants = %q %q", config.EnvImageVariantMaxSourceBytes, config.DefaultImageVariantMaxSourceBytes) } }) for _, document := range []string{".env.example", "docs/configuration.md"} { t.Run("The env var is documented in "+document, func(t *testing.T) { if !strings.Contains(readRepositoryFile(t, document), maxSourceEnv) { t.Errorf("%s does not mention %s", document, maxSourceEnv) } }) } }