39 lines
1.5 KiB
Go
39 lines
1.5 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/catalogue"
|
|
)
|
|
|
|
func TestPreferencesListedFromTheStores(t *testing.T) {
|
|
open := aMesh(t)
|
|
ctx := t.Context()
|
|
register(t, open, catalogue.Manifest{Module: "notes", Version: "1",
|
|
Settings: map[string]catalogue.SettingDeclaration{
|
|
"font-size": {Kind: catalogue.KindPreference, Default: float64(10), Why: "readable at 100 DPI"},
|
|
},
|
|
Resources: []map[string]any{{"id": "rc", "type": "file", "path": "/etc/notes.conf", "mode": "0644",
|
|
"content": "font = ${setting:font-size}\n"}}})
|
|
if _, err := assign(ctx, open, "laptop", "notes"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := open.inventory.SetSettings(ctx, "laptop", "notes", map[string]any{"font-size": float64(16)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
all := stdoutOf(t, func() error { return settingsCommand(ctx, []string{"preferences"}) })
|
|
if !strings.Contains(all, "notes (on laptop)") || !strings.Contains(all, "laptop: 16 (the node)") ||
|
|
!strings.Contains(all, "font-size, default 10: readable at 100 DPI") {
|
|
t.Fatalf("the listing:\n%s", all)
|
|
}
|
|
if got := stdoutOf(t, func() error { return settingsCommand(ctx, []string{"preferences", "--node", "anchor"}) }); got != "no module on anchor declares a preference\n" {
|
|
t.Fatalf("a machine without the module:\n%s", got)
|
|
}
|
|
if err := settingsCommand(ctx, []string{"preferences", "--node", "nowhere"}); err == nil {
|
|
t.Fatal("a machine the mesh does not know was answered")
|
|
}
|
|
}
|