58 lines
2.3 KiB
Go
58 lines
2.3 KiB
Go
package catalogue
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// issue 831: a moved module's merging file is not handed (ADR 0349 clause 17, the lead's limit): the controller
|
|
// fills and merges it as for a module not moved, and the module's other files stay handed.
|
|
func TestAMovedModulesMergingFileIsFilledTheOldWayAndItsPlainFileIsHanded(t *testing.T) {
|
|
raw := strings.Replace(handedNotifier, `{"id":"legacy"`,
|
|
`{"id":"settings","type":"file","path":"${machine:account-home}/.config/notify/settings.json","owner":"${machine:account}","mode":"0644","template":"files/settings.json","merge":"json","takes-config":["width"]},
|
|
{"id":"legacy"`, 1)
|
|
moved := strings.Replace(raw, `"version":"1",`, `"version":"1","moved":true,`, 1)
|
|
built := []Built{{Name: "files", Kind: ArtifactArchive,
|
|
Reference: ArtifactStoreScheme + "notify/files/blobs/sha256:" + strings.Repeat("d", 64),
|
|
Digest: "sha256:" + strings.Repeat("d", 64),
|
|
Texts: map[string]string{"rc": notifierText, "settings.json": "{\"theme\": \"dark\"}\n"}}}
|
|
cb, _ := composeWith(t, notifierOn(t, held(t, raw, built)), handingTo("store:5000"))
|
|
c, got := composeWith(t, notifierOn(t, held(t, moved, built)), handingTo("store:5000"))
|
|
var merged, plain map[string]any
|
|
for _, r := range c.Resources {
|
|
switch r["id"] {
|
|
case "notify.settings":
|
|
merged = r
|
|
case "notify.configuration":
|
|
plain = r
|
|
}
|
|
}
|
|
if merged == nil || plain == nil {
|
|
t.Fatalf("not composed: %s", got)
|
|
}
|
|
if text, _ := merged["content"].(string); !strings.Contains(text, `"theme"`) || merged["owner-at-runtime"] != nil {
|
|
t.Fatalf("the merging file is not filled the old way: %v", merged)
|
|
}
|
|
if plain["content"] != nil || plain["owner-at-runtime"] != "owned" {
|
|
t.Fatalf("the plain file is not handed: %v", plain)
|
|
}
|
|
for _, p := range c.Filled {
|
|
if strings.HasSuffix(p, "settings.json") {
|
|
t.Fatalf("the merging file is named among the filled files: %v", c.Filled)
|
|
}
|
|
}
|
|
if len(c.Plans["notify"].Files) != 1 || c.Plans["notify"].Files[0].ID != "configuration" {
|
|
t.Fatalf("the plan is %+v", c.Plans)
|
|
}
|
|
if len(c.Unplaced) > 0 {
|
|
t.Fatalf("unplaced: %v", c.Unplaced)
|
|
}
|
|
// byte-identical to the not-moved composition
|
|
for _, r := range cb.Resources {
|
|
if r["id"] == "notify.settings" && !reflect.DeepEqual(r, merged) {
|
|
t.Fatalf("the merging file differs from the not-moved composition:\nbefore %v\nnow %v", r, merged)
|
|
}
|
|
}
|
|
}
|