Project sequence origins onto appended indexes
This commit is contained in:
@@ -220,6 +220,96 @@ func TestComposeDocumentsAppendsRegisteredSequencesAndReturnsRanges(t *testing.T
|
||||
}
|
||||
}
|
||||
|
||||
func TestComposeDocumentsProjectsSequenceOriginsToAssignedIndexes(t *testing.T) {
|
||||
first := parseCompositionDocument(t, "source-1", `mounted:
|
||||
records:
|
||||
- id: first
|
||||
name: first-name
|
||||
escaped/~:
|
||||
"7":
|
||||
- id: escaped-first
|
||||
name: escaped-first-name
|
||||
`)
|
||||
second := parseCompositionDocument(t, "source-2", `mounted:
|
||||
records:
|
||||
- id: second
|
||||
name: second-name
|
||||
escaped/~:
|
||||
"7":
|
||||
- id: escaped-second
|
||||
name: escaped-second-name
|
||||
`)
|
||||
firstBefore, secondBefore := document.Clone(first), document.Clone(second)
|
||||
policy := sequencePolicy{identityFields: map[string]string{
|
||||
Keys("mounted", "records").String(): "id",
|
||||
Keys("escaped/~", "7").String(): "id",
|
||||
}}
|
||||
|
||||
composed, diagnostics := composeDocumentsWithPolicy(policy, first, second)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("composeDocumentsWithPolicy() diagnostics = %#v", diagnostics)
|
||||
}
|
||||
for _, test := range []struct {
|
||||
path Path
|
||||
want Location
|
||||
}{
|
||||
{path: Keys("mounted", "records").Index(1).Key("name"), want: Location{SourceID: "source-2", Line: 4, Column: 13}},
|
||||
{path: Keys("escaped/~", "7").Index(1).Key("name"), want: Location{SourceID: "source-2", Line: 8, Column: 13}},
|
||||
} {
|
||||
path, want := test.path, test.want
|
||||
origin, ok := composed.origins[path.String()]
|
||||
if !ok || !reflect.DeepEqual(origin.Locations, []Location{want}) {
|
||||
t.Errorf("origin at %s = %#v, want source-specific location %#v", path, origin, want)
|
||||
}
|
||||
}
|
||||
for _, test := range []struct {
|
||||
path Path
|
||||
wantSources []string
|
||||
}{
|
||||
{path: Keys("mounted", "records"), wantSources: []string{"source-1", "source-2"}},
|
||||
{path: Keys("escaped/~", "7"), wantSources: []string{"source-1", "source-2"}},
|
||||
} {
|
||||
path, wantSources := test.path, test.wantSources
|
||||
origin := composed.origins[path.String()]
|
||||
gotSources := make([]string, len(origin.Locations))
|
||||
for index, location := range origin.Locations {
|
||||
gotSources[index] = location.SourceID
|
||||
}
|
||||
if !reflect.DeepEqual(gotSources, wantSources) {
|
||||
t.Errorf("container origin at %s = %#v, want contributors %#v", path, gotSources, wantSources)
|
||||
}
|
||||
}
|
||||
if !reflect.DeepEqual(first, firstBefore) || !reflect.DeepEqual(second, secondBefore) {
|
||||
t.Fatal("composition projection mutated an input")
|
||||
}
|
||||
|
||||
copy := cloneComposedDocument(composed)
|
||||
copy.origins[Keys("mounted", "records").Index(1).Key("name").String()].Locations[0].SourceID = "changed"
|
||||
for index := range copy.claims {
|
||||
if copy.claims[index].path.String() == "/mounted/records" {
|
||||
copy.claims[index].path.segments[0].key = "changed"
|
||||
break
|
||||
}
|
||||
}
|
||||
copy.sequenceRanges[0].path.segments[0].key = "changed"
|
||||
if got := composed.origins[Keys("mounted", "records").Index(1).Key("name").String()].Locations[0].SourceID; got != "source-2" {
|
||||
t.Fatalf("copied origin mutation changed source evidence: %q", got)
|
||||
}
|
||||
foundClaim := false
|
||||
for _, claim := range composed.claims {
|
||||
if claim.path.String() == "/mounted/records" {
|
||||
foundClaim = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !foundClaim {
|
||||
t.Fatal("copied claim mutation changed source path")
|
||||
}
|
||||
if got := composed.sequenceRanges[0].path.String(); got != "/mounted/records" {
|
||||
t.Fatalf("copied range mutation changed assigned path: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestComposeDocumentsValidatesRegisteredSequenceSingletons(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
Reference in New Issue
Block a user