Skip to content

Commit 77efcc0

Browse files
committed
Add tests based on feedback
1 parent 2657e81 commit 77efcc0

File tree

1 file changed

+218
-3
lines changed

1 file changed

+218
-3
lines changed

merge/schema_change_test.go

Lines changed: 218 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,6 @@ var associativeListParserOld = func() *typed.Parser {
274274
- name: name
275275
type:
276276
scalar: string
277-
- name: id
278-
type:
279-
scalar: numeric
280277
- name: value
281278
type:
282279
scalar: numeric
@@ -493,3 +490,221 @@ func TestAssociativeListSchemaChanges(t *testing.T) {
493490
})
494491
}
495492
}
493+
494+
var associativeListParserPromoteKeyBefore = func() *typed.Parser {
495+
p, err := typed.NewParser(`types:
496+
- name: v1
497+
map:
498+
fields:
499+
- name: list
500+
type:
501+
namedType: associativeList
502+
- name: associativeList
503+
list:
504+
elementType:
505+
namedType: myElement
506+
elementRelationship: associative
507+
keys:
508+
- name
509+
- name: myElement
510+
map:
511+
fields:
512+
- name: name
513+
type:
514+
scalar: string
515+
- name: id
516+
type:
517+
scalar: numeric
518+
- name: value
519+
type:
520+
scalar: numeric
521+
`)
522+
if err != nil {
523+
panic(err)
524+
}
525+
return p
526+
}()
527+
528+
var associativeListParserPromoteKeyAfter = func() *typed.Parser {
529+
p, err := typed.NewParser(`types:
530+
- name: v1
531+
map:
532+
fields:
533+
- name: list
534+
type:
535+
namedType: associativeList
536+
- name: associativeList
537+
list:
538+
elementType:
539+
namedType: myElement
540+
elementRelationship: associative
541+
keys:
542+
- name
543+
- id
544+
- name: myElement
545+
map:
546+
fields:
547+
- name: name
548+
type:
549+
scalar: string
550+
- name: id
551+
type:
552+
scalar: numeric
553+
- name: value
554+
type:
555+
scalar: numeric
556+
`)
557+
if err != nil {
558+
panic(err)
559+
}
560+
return p
561+
}()
562+
563+
func TestPromoteFieldToAssociativeListKey(t *testing.T) {
564+
tests := map[string]TestCase{
565+
"identical item merges": {
566+
Ops: []Operation{
567+
Apply{
568+
Manager: "one",
569+
Object: `
570+
list:
571+
- name: a
572+
id: 1
573+
value: 1
574+
`,
575+
APIVersion: "v1",
576+
},
577+
ChangeParser{Parser: associativeListParserPromoteKeyAfter},
578+
Apply{
579+
Manager: "one",
580+
Object: `
581+
list:
582+
- name: a
583+
id: 1
584+
value: 2
585+
`,
586+
APIVersion: "v1",
587+
},
588+
},
589+
Object: `
590+
list:
591+
- name: a
592+
id: 1
593+
value: 2
594+
`,
595+
APIVersion: "v1",
596+
Managed: fieldpath.ManagedFields{
597+
"one": fieldpath.NewVersionedSet(_NS(
598+
_P("list", _KBF("name", "a", "id", float64(1))),
599+
_P("list", _KBF("name", "a", "id", float64(1)), "name"),
600+
_P("list", _KBF("name", "a", "id", float64(1)), "id"),
601+
_P("list", _KBF("name", "a", "id", float64(1)), "value"),
602+
), "v1", true),
603+
},
604+
},
605+
"distinct item added": {
606+
Ops: []Operation{
607+
Apply{
608+
Manager: "one",
609+
Object: `
610+
list:
611+
- name: a
612+
id: 1
613+
value: 1
614+
`,
615+
APIVersion: "v1",
616+
},
617+
ChangeParser{Parser: associativeListParserPromoteKeyAfter},
618+
Apply{
619+
Manager: "one",
620+
Object: `
621+
list:
622+
- name: a
623+
id: 1
624+
value: 1
625+
- name: a
626+
id: 2
627+
value: 2
628+
`,
629+
APIVersion: "v1",
630+
},
631+
},
632+
Object: `
633+
list:
634+
- name: a
635+
id: 1
636+
value: 1
637+
- name: a
638+
id: 2
639+
value: 2
640+
`,
641+
APIVersion: "v1",
642+
Managed: fieldpath.ManagedFields{
643+
"one": fieldpath.NewVersionedSet(_NS(
644+
_P("list", _KBF("name", "a", "id", float64(1))),
645+
_P("list", _KBF("name", "a", "id", float64(1)), "name"),
646+
_P("list", _KBF("name", "a", "id", float64(1)), "id"),
647+
_P("list", _KBF("name", "a", "id", float64(1)), "value"),
648+
_P("list", _KBF("name", "a", "id", float64(2))),
649+
_P("list", _KBF("name", "a", "id", float64(2)), "name"),
650+
_P("list", _KBF("name", "a", "id", float64(2)), "id"),
651+
_P("list", _KBF("name", "a", "id", float64(2)), "value"),
652+
), "v1", true),
653+
},
654+
},
655+
"item missing new key field is distinct": {
656+
Ops: []Operation{
657+
Apply{
658+
Manager: "one",
659+
Object: `
660+
list:
661+
- name: a
662+
value: 1
663+
`,
664+
APIVersion: "v1",
665+
},
666+
ChangeParser{Parser: associativeListParserPromoteKeyAfter},
667+
Apply{
668+
Manager: "one",
669+
Object: `
670+
list:
671+
- name: a
672+
value: 1
673+
- name: a
674+
id: 2
675+
value: 2
676+
`,
677+
APIVersion: "v1",
678+
},
679+
},
680+
Object: `
681+
list:
682+
- name: a
683+
value: 1
684+
- name: a
685+
id: 2
686+
value: 2
687+
`,
688+
APIVersion: "v1",
689+
Managed: fieldpath.ManagedFields{
690+
"one": fieldpath.NewVersionedSet(_NS(
691+
_P("list", _KBF("name", "a")),
692+
_P("list", _KBF("name", "a"), "name"),
693+
_P("list", _KBF("name", "a"), "value"),
694+
_P("list", _KBF("name", "a", "id", float64(2))),
695+
_P("list", _KBF("name", "a", "id", float64(2)), "name"),
696+
_P("list", _KBF("name", "a", "id", float64(2)), "id"),
697+
_P("list", _KBF("name", "a", "id", float64(2)), "value"),
698+
), "v1", true),
699+
},
700+
},
701+
}
702+
703+
for name, test := range tests {
704+
t.Run(name, func(t *testing.T) {
705+
if err := test.Test(associativeListParserPromoteKeyBefore); err != nil {
706+
t.Fatal(err)
707+
}
708+
})
709+
}
710+
}

0 commit comments

Comments
 (0)