ADR 0593 §7: the composer with its refusals leaves mesh-sdk, so mesh-sdk carries no composition rule. The catalogue functions only the node-engine's composition reaches (Resolve, Resolution's Compose, Declaration, DataItems, LeftOut, Rules and the rest, the settings, placeholder and template refusals, the rendering helpers) are copied with their tests into internal/compose/resolution; a method of a mesh-sdk shape becomes a function taking it first. The composition calls its own copies, and the captured catalogue its tests read lives here now, shared by mesh-compose's tests. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
43 lines
1.6 KiB
Go
43 lines
1.6 KiB
Go
package resolution
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
mcat "git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// An operator's value reaches a file from the assignment's settings, the node's layer over the
|
|
// mesh's (novox/hq ADR 0112, ADR 0155), and a value nothing set is refused by name.
|
|
func TestASettingReachesAFileFromTheLayers(t *testing.T) {
|
|
file := map[string]any{"id": "env", "type": "file", "path": "/x/mail.env",
|
|
"content": "DOMAIN=${setting:domain}\nSITENAME=${setting:sitename}\nWORKERS=${setting:workers}\n"}
|
|
layers := []mcat.Layer{
|
|
{From: "the mesh", Values: map[string]any{"domain": "example.tld", "sitename": "Mesh", "workers": float64(4)}},
|
|
{From: "this node", Values: map[string]any{"sitename": "This one"}},
|
|
}
|
|
if err := settingInto(file, layers, "mail"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if file["content"] != "DOMAIN=example.tld\nSITENAME=This one\nWORKERS=4\n" {
|
|
t.Fatalf("filled as %q", file["content"])
|
|
}
|
|
}
|
|
|
|
func TestASettingNothingSetIsRefusedByName(t *testing.T) {
|
|
file := map[string]any{"id": "env", "type": "file", "content": "DOMAIN=${setting:domain}\n"}
|
|
err := settingInto(file, []mcat.Layer{{From: "the mesh", Values: map[string]any{"other": "x"}}}, "mail")
|
|
if err == nil {
|
|
t.Fatal("a setting nothing set was written as something")
|
|
}
|
|
for _, want := range []string{"${setting:domain}", "settings set mail", "set today: other"} {
|
|
if !strings.Contains(err.Error(), want) {
|
|
t.Fatalf("the refusal lacks %q: %v", want, err)
|
|
}
|
|
}
|
|
// Left as it was: the literal placeholder must never reach a machine.
|
|
if file["content"] != "DOMAIN=${setting:domain}\n" {
|
|
t.Fatalf("content was changed on refusal: %q", file["content"])
|
|
}
|
|
}
|