@@ -1143,3 +1143,94 @@ func TestSync_EmbeddedMapComparison_PointerVsValue_Success(t *testing.T) {
11431143 require .Equal (t , "shared_key: shared_value\n " , string (ptrYAML ))
11441144 })
11451145}
1146+
1147+ func TestSync_ArraySubset_Success (t * testing.T ) {
1148+ t .Parallel ()
1149+
1150+ // Create high-level model with 3 items
1151+ itemOne := & tests.TestItemHighModel {
1152+ Name : "one" ,
1153+ Description : "First item" ,
1154+ }
1155+ itemFour := & tests.TestItemHighModel {
1156+ Name : "four" ,
1157+ Description : "Fourth item" ,
1158+ }
1159+ itemSix := & tests.TestItemHighModel {
1160+ Name : "six" ,
1161+ Description : "Sixth item" ,
1162+ }
1163+
1164+ highModel := tests.TestArrayOfObjectsHighModel {
1165+ Items : []* tests.TestItemHighModel {itemOne , itemFour , itemSix },
1166+ }
1167+
1168+ // Populate core model with 6 items from YAML
1169+ initialYAML := `items:
1170+ - name: three
1171+ description: Third item
1172+ - name: five
1173+ description: Fifth item
1174+ - name: one
1175+ description: First item
1176+ - name: four
1177+ description: Fourth item
1178+ - name: second
1179+ description: Second item
1180+ - name: six
1181+ description: Sixth item
1182+ `
1183+ var rootNode yaml.Node
1184+ err := yaml .Unmarshal ([]byte (initialYAML ), & rootNode )
1185+ require .NoError (t , err )
1186+
1187+ coreModel := highModel .GetCore ()
1188+ coreModel .SetRootNode (rootNode .Content [0 ])
1189+
1190+ _ , err = marshaller .UnmarshalModel (t .Context (), rootNode .Content [0 ], coreModel )
1191+ require .NoError (t , err )
1192+
1193+ // Link high-level items to their corresponding core items
1194+ for _ , item := range coreModel .Items .Value {
1195+ switch item .Name .Value {
1196+ case "one" :
1197+ itemOne .SetCore (item )
1198+ case "four" :
1199+ itemFour .SetCore (item )
1200+ case "six" :
1201+ itemSix .SetCore (item )
1202+ }
1203+ }
1204+
1205+ // Sync high model subset to core model
1206+ resultNode , err := marshaller .SyncValue (t .Context (), & highModel , highModel .GetCore (), highModel .GetRootNode (), false )
1207+ require .NoError (t , err )
1208+ require .NotNil (t , resultNode )
1209+
1210+ // Verify synced array matches high model subset
1211+ items := coreModel .Items .Value
1212+ require .Len (t , items , 3 )
1213+
1214+ require .Equal (t , "one" , items [0 ].Name .Value )
1215+ require .Equal (t , "First item" , items [0 ].Description .Value )
1216+
1217+ require .Equal (t , "four" , items [1 ].Name .Value )
1218+ require .Equal (t , "Fourth item" , items [1 ].Description .Value )
1219+
1220+ require .Equal (t , "six" , items [2 ].Name .Value )
1221+ require .Equal (t , "Sixth item" , items [2 ].Description .Value )
1222+
1223+ // Verify YAML output
1224+ expectedYAML := `items:
1225+ - name: one
1226+ description: First item
1227+ - name: four
1228+ description: Fourth item
1229+ - name: six
1230+ description: Sixth item
1231+ `
1232+
1233+ actualYAML , err := yaml .Marshal (coreModel .GetRootNode ())
1234+ require .NoError (t , err )
1235+ require .Equal (t , expectedYAML , string (actualYAML ))
1236+ }
0 commit comments