Cut metadata history over to shared model
This commit is contained in:
@@ -40,12 +40,16 @@ func TestPublicHistoricalPathsEnumerateContextualShapes(t *testing.T) {
|
||||
if len(metadata.History(paths[6])) == 0 {
|
||||
t.Fatal("enumerated numeric path lost history")
|
||||
}
|
||||
assertPublicShapeHistory(t, metadata, configkit.LayerCLI)
|
||||
if _, ok := metadata.Lookup(configkit.Keys("shape", "0")); ok {
|
||||
t.Fatal("mapping-key path resolved against the effective sequence")
|
||||
}
|
||||
if len((configkit.Metadata{}).HistoricalPaths()) != 0 {
|
||||
t.Fatal("zero metadata contains historical paths")
|
||||
}
|
||||
if (configkit.Metadata{}).History(configkit.Keys("shape")) != nil {
|
||||
t.Fatal("zero metadata contains history")
|
||||
}
|
||||
|
||||
paths[1] = configkit.Keys("mutated")
|
||||
if again := metadata.HistoricalPaths(); !reflect.DeepEqual(pathStrings(again), want) {
|
||||
@@ -53,6 +57,60 @@ func TestPublicHistoricalPathsEnumerateContextualShapes(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublicHistoryUsesResolutionShapeAttribution(t *testing.T) {
|
||||
loaded, err := configkit.Load[map[string]any](configkit.Bytes("main", []byte("shape: {'0': base}\n")), configkit.Options[map[string]any]{
|
||||
Definition: configkit.Definition[map[string]any]{
|
||||
Resolve: func(configuration *map[string]any, resolution *configkit.Resolution) error {
|
||||
(*configuration)["shape"] = []any{"replacement"}
|
||||
resolution.Record(configkit.Keys("shape"), configkit.ChangeNormalization, "replace numeric mapping key")
|
||||
return nil
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
assertPublicShapeHistory(t, loaded.Metadata(), configkit.LayerResolution)
|
||||
}
|
||||
|
||||
func assertPublicShapeHistory(t *testing.T, metadata configkit.Metadata, operationLayer configkit.Layer) {
|
||||
t.Helper()
|
||||
|
||||
keyPath := configkit.Keys("shape", "0")
|
||||
indexPath := configkit.Keys("shape").Index(0)
|
||||
keyHistory := metadata.History(keyPath)
|
||||
indexHistory := metadata.History(indexPath)
|
||||
if len(keyHistory) == 0 || len(indexHistory) == 0 {
|
||||
t.Fatalf("explicit shape histories = key %#v, index %#v", keyHistory, indexHistory)
|
||||
}
|
||||
var keyDefinition, keyReplacement, indexReplacement bool
|
||||
for _, change := range keyHistory {
|
||||
keyDefinition = keyDefinition || change.Origin.Layer == configkit.LayerBase
|
||||
keyReplacement = keyReplacement || change.Origin.Layer == operationLayer && change.Path.String() == "/shape"
|
||||
}
|
||||
for _, change := range indexHistory {
|
||||
if change.Origin.Layer == configkit.LayerBase {
|
||||
t.Fatalf("introduced index inherited mapping-key history: %#v", indexHistory)
|
||||
}
|
||||
indexReplacement = indexReplacement || change.Origin.Layer == operationLayer && change.Path.String() == "/shape"
|
||||
for _, previous := range change.Previous {
|
||||
if previous.Layer == configkit.LayerBase {
|
||||
t.Fatalf("introduced index inherited mapping-key previous origin: %#v", change)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !keyDefinition || !keyReplacement || !indexReplacement {
|
||||
t.Fatalf("shape histories missed applicable definitions or replacement: key %#v, index %#v", keyHistory, indexHistory)
|
||||
}
|
||||
parsed, err := configkit.ParsePath("/shape/0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if parsedHistory := metadata.History(parsed); len(parsedHistory) == 0 {
|
||||
t.Fatal("parsed numeric query lost contextual history")
|
||||
}
|
||||
}
|
||||
|
||||
func pathStrings(paths []configkit.Path) []string {
|
||||
result := make([]string, len(paths))
|
||||
for index, path := range paths {
|
||||
|
||||
Reference in New Issue
Block a user