package configkit_test import ( "fmt" "testing" "testing/fstest" configkit "gitea.maximumdirect.net/eric/ConfigKit" ) func TestFacadeItemScopesDoNotReinterpretGlobalRegistrations(t *testing.T) { t.Parallel() for _, layered := range []bool{false, true} { for _, dynamic := range []bool{false, true} { for _, missingOuterID := range []bool{false, true} { t.Run(fmt.Sprintf("layered=%t/dynamic=%t/missing-outer-id=%t", layered, dynamic, missingOuterID), func(t *testing.T) { payload := "prompts: [{text: helper}]\n" unused := configkit.SequenceIdentityAt(configkit.Keys("prompts"), "id") if dynamic { payload = "catalog: {local: {prompts: [{text: helper}]}}\n" unused = configkit.SequenceIdentityMatching(configkit.SequenceSelector{ configkit.SequenceLiteralKey("catalog"), configkit.SequenceAnyMappingKey(), configkit.SequenceLiteralKey("prompts"), }, "id") } item := "configkit: {imports: [{path: helper.yml}, {path: child.yml, destination: [children], placement: sequence-item}]}\n" if !missingOuterID { item += "id: outer\n" } files := configkit.NewFilesystem("items", fstest.MapFS{ "main.yml": {Data: []byte("configkit: {imports: [{path: item.yml, destination: [items], placement: sequence-item}]}\n")}, "item.yml": {Data: []byte(item)}, "helper.yml": {Data: []byte(payload)}, "child.yml": {Data: []byte("id: child\nconfigkit: {imports: [{path: child-helper.yml}]}\n")}, "child-helper.yml": {Data: []byte(payload)}, }) definition := configkit.Definition[map[string]any]{SequenceIdentities: []configkit.SequenceIdentity{ unused, configkit.SequenceIdentityAt(configkit.Keys("items"), "id"), }} var result *configkit.Result[map[string]any] var err error if layered { result, err = configkit.LoadLayered(configkit.Input{Source: files.File("main.yml"), Imports: true}, configkit.LayeredOptions[map[string]any]{Definition: definition}) } else { result, err = configkit.Load(files.File("main.yml"), configkit.Options[map[string]any]{Imports: true, Definition: definition}) } if missingOuterID { failure := requireFacadeLoadError(t, err) if result != nil || len(failure.Diagnostics()) != 1 || failure.Diagnostics()[0].Code != configkit.CodeComposeInvalid || failure.Diagnostics()[0].Path.String() != "/items/0/id" { t.Fatalf("outer constraint diagnostics = %#v", failure.Diagnostics()) } return } if err != nil { t.Fatal(err) } for _, record := range []configkit.Path{configkit.Keys("items").Index(0), configkit.Keys("items").Index(0).Key("children").Index(0)} { path := record if dynamic { path = path.Key("catalog").Key("local") } info, found := result.Metadata().Lookup(path.Key("prompts").Index(0).Key("text")) if !found || !info.Explicit { t.Fatalf("nested helper payload lost at %s", path) } } }) } } } }