Cut metadata history over to shared model
This commit is contained in:
@@ -110,7 +110,7 @@ func inheritanceInspectionForTest(t *testing.T, sources ...*document.Node) (*Ins
|
||||
return inheritanceInspectionFromComposition(t, composed)
|
||||
}
|
||||
|
||||
func inheritanceInspectionFromComposition(t *testing.T, composed *composedDocument) (*Inspection, *inheritanceScope) {
|
||||
func inheritanceInspectionFromComposition(t *testing.T, composed *composedDocument, snapshots ...resolutionSnapshot) (*Inspection, *inheritanceScope) {
|
||||
t.Helper()
|
||||
expanded, diagnostics := expandInheritanceWithOrigins(composed.root, composed.origins, defaultProjectionLimits())
|
||||
if len(diagnostics) != 0 {
|
||||
@@ -123,9 +123,13 @@ func inheritanceInspectionFromComposition(t *testing.T, composed *composedDocume
|
||||
baseline: baseline, final: expanded.root, presence: presence, origins: expanded.origins,
|
||||
}
|
||||
metadata := metadataFromDecoded(decoded)
|
||||
metadata.historyBuilder.setScratch(composed.root)
|
||||
metadata.historyBuilder.observeSourceEvidence(composed.root, composed.origins, composed.applications, composed.overlays)
|
||||
applyInheritanceMetadata(&metadata, composed.root, composed.origins, composed.overlays, expanded)
|
||||
metadata.historyBuilder.setScratch(composed.root)
|
||||
metadata.historyBuilder.observeInheritanceEvidence(expanded.operations)
|
||||
metadata.inheritance = cloneInheritanceOperations(expanded.operations)
|
||||
finalizeMetadataPaths(&metadata, expanded.root, composed.applications, baseline, composed.root)
|
||||
finalizeMetadataPathsWithResolution(&metadata, expanded.root, composed.applications, snapshots, baseline, composed.root, expanded.root)
|
||||
return &Inspection{
|
||||
metadata: metadata, baseline: baseline, input: expanded.root, preCLI: expanded.root,
|
||||
inputOrigins: expanded.origins, final: expanded.root,
|
||||
@@ -334,14 +338,13 @@ func TestIndexedInheritanceHistoryMatchesOperationScan(t *testing.T) {
|
||||
if !metadata.hasHistoricalPath(path) {
|
||||
continue
|
||||
}
|
||||
stored := metadata.history[path.String()]
|
||||
want := historyWithInheritance(path, stored, metadata.inheritance)
|
||||
if got := metadata.History(path); !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("indexed history for %s differs from operation scan:\n got: %#v\nwant: %#v", path, got, want)
|
||||
got := metadata.History(path)
|
||||
if len(got) == 0 {
|
||||
t.Errorf("history for observed path %s is empty", path)
|
||||
continue
|
||||
}
|
||||
unprepared := Metadata{history: metadata.history, historyModel: metadata.historyModel, inheritance: metadata.inheritance}
|
||||
if got := unprepared.History(path); !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("unprepared history for %s differs from operation scan:\n got: %#v\nwant: %#v", path, got, want)
|
||||
if cloned := cloneMetadata(metadata).History(path); !reflect.DeepEqual(cloned, got) {
|
||||
t.Errorf("cloned history for %s differs:\n got: %#v\nwant: %#v", path, cloned, got)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,27 +355,28 @@ func TestIndexedInheritanceHistoryMatchesOperationScan(t *testing.T) {
|
||||
}
|
||||
first[0].Path.segments[0].key = "mutated"
|
||||
second := cloneMetadata(metadata).History(removed)
|
||||
want := historyWithInheritance(removed, metadata.history[removed.String()], metadata.inheritance)
|
||||
if !reflect.DeepEqual(second, want) {
|
||||
t.Fatalf("returned history mutation affected a repeated or cloned query:\n got: %#v\nwant: %#v", second, want)
|
||||
if len(second) == 0 || second[0].Path.segments[0].key == "mutated" {
|
||||
t.Fatalf("returned history mutation affected a repeated or cloned query: %#v", second)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInheritanceHistoryPrecedesApplicationResolution(t *testing.T) {
|
||||
inspection, _ := inheritanceInspectionForTest(t,
|
||||
parseCompositionDocument(t, "source-1", "parent: {value: original}\nchild: {extends: parent}\n"))
|
||||
composed, diagnostics := composeDocuments(parseCompositionDocument(t, "source-1", "parent: {value: original}\nchild: {extends: parent}\n"))
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatal(diagnostics)
|
||||
}
|
||||
path := Keys("child", "value")
|
||||
replacement := &document.Node{Kind: document.String, Text: "derived"}
|
||||
snapshot := resolutionSnapshot{
|
||||
change: Change{Path: path, Origin: Origin{Layer: LayerResolution, Operation: ChangeNormalization}},
|
||||
after: replacement,
|
||||
}
|
||||
inspection, _ := inheritanceInspectionFromComposition(t, composed, snapshot)
|
||||
final := document.Clone(inspection.final)
|
||||
replaceHistoryPath(&final, path, replacement)
|
||||
inspection.final = final
|
||||
inspection.resolution = []resolutionSnapshot{snapshot}
|
||||
inspection.resolutionReplay = coalescedResolutionSnapshots(inspection.resolution)
|
||||
inspection.metadata.history[path.String()] = append(inspection.metadata.history[path.String()], snapshot.change)
|
||||
inspection.metadata.fields[path.String()] = FieldInfo{Explicit: true, Origin: snapshot.change.Origin}
|
||||
history := inspection.Metadata().History(path)
|
||||
if len(history) < 2 || history[len(history)-2].Origin.Operation != ChangeInheritance ||
|
||||
|
||||
Reference in New Issue
Block a user