Files
summercms/examples/hello/hello_test.go
Jakub Zych 255de605b1 test(01-02): add failing test for layered compass config
- Cover six-level precedence, env mapping, .env, Set/Persist/Reload
- Require HasConfig merge before plugin Register
- Assert hello command observes overlay and plugin defaults
2026-09-16 13:13:02 +02:00

92 lines
2.2 KiB
Go

package main
import (
"bytes"
"crypto/sha256"
"os"
"os/exec"
"strings"
"testing"
)
func TestGreeterHelloPrintsLayeredConfig(t *testing.T) {
got := runHello(t, nil)
want := "name=hello-app posts_per_page=10 debug=false"
if got != want {
t.Fatalf("output = %q, want %q", got, want)
}
}
func TestGreeterHelloSeesDevelopmentOverlay(t *testing.T) {
got := runHello(t, map[string]string{"SUMMER_ENV": "development"})
want := "name=hello-dev posts_per_page=10 debug=true"
if got != want {
t.Fatalf("output = %q, want %q", got, want)
}
}
func TestGreeterHelloSeesEnvVarOverrideOfPluginDefault(t *testing.T) {
got := runHello(t, map[string]string{
"SUMMER_GOLEM15__HELLO__POSTS_PER_PAGE": "25",
})
want := "name=hello-app posts_per_page=25 debug=false"
if got != want {
t.Fatalf("output = %q, want %q", got, want)
}
}
func runHello(t *testing.T, env map[string]string) string {
t.Helper()
for k, v := range env {
t.Setenv(k, v)
}
var buf bytes.Buffer
if err := run([]string{"greeter:hello"}, &buf); err != nil {
t.Fatalf("greeter:hello: %v", err)
}
return strings.TrimSpace(buf.String())
}
func TestBuiltBinaryGreeterHello(t *testing.T) {
first := runSummerBuild(t)
h1 := generatedHash(t)
second := runSummerBuild(t)
h2 := generatedHash(t)
if h1 != h2 {
t.Fatalf("generated files changed on second build\nfirst:\n%s\nsecond:\n%s", first, second)
}
cmd := exec.Command("./bin/hello", "greeter:hello")
out, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("bin/hello greeter:hello: %v\n%s", err, out)
}
if got := strings.TrimSpace(string(out)); got != "name=hello-app posts_per_page=10 debug=false" {
t.Fatalf("output = %q, want layered production config", got)
}
}
func runSummerBuild(t *testing.T) string {
t.Helper()
cmd := exec.Command("go", "run", "../../cmd/summer", "build")
cmd.Dir = "."
out, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("summer build: %v\n%s", err, out)
}
return string(out)
}
func generatedHash(t *testing.T) [32]byte {
t.Helper()
var buf bytes.Buffer
for _, name := range []string{"main.go", "plugins.gen.go"} {
body, err := os.ReadFile(name)
if err != nil {
t.Fatal(err)
}
buf.Write(body)
}
return sha256.Sum256(buf.Bytes())
}