Merge pull request #9806 from manansaraf/patch_error

Fixed pointers bug in PATCH verb in the API
pull/6/head
Satnam Singh 2015-06-18 16:13:38 -07:00
commit 42fd7b4b68
2 changed files with 75 additions and 0 deletions

View File

@ -100,6 +100,11 @@ func mergeMap(original, patch map[string]interface{}, t reflect.Type) (map[strin
original[k] = patchV
continue
}
// If the data type is a pointer, resolve the element.
if t.Kind() == reflect.Ptr {
t = t.Elem()
}
// If they're both maps or lists, recurse into the value.
// First find the fieldPatchStrategy and fieldPatchMergeKey.
fieldType, fieldPatchStrategy, fieldPatchMergeKey, err := forkedjson.LookupPatchMetadata(t, k)

View File

@ -51,6 +51,7 @@ type MergeItem struct {
NonMergingList []MergeItem
MergingIntList []int `patchStrategy:"merge"`
NonMergingIntList []int
MergeItemPtr *MergeItem `patchStrategy:"merge" patchMergeKey:"name"`
SimpleMap map[string]string
}
@ -232,6 +233,41 @@ strategicMergePatchCases:
- $patch: replace
result:
mergingList: []
- description: add new field inside pointers
original:
mergeItemPtr:
- name: 1
patch:
mergeItemPtr:
- name: 2
result:
mergeItemPtr:
- name: 1
- name: 2
- description: update nested pointers
original:
mergeItemPtr:
- name: 1
mergeItemPtr:
- name: 1
- name: 2
value: 2
- name: 2
patch:
mergeItemPtr:
- name: 1
mergeItemPtr:
- name: 1
value: 1
result:
mergeItemPtr:
- name: 1
mergeItemPtr:
- name: 1
value: 1
- name: 2
value: 2
- name: 2
sortMergeListTestCases:
- description: sort one list of maps
original:
@ -351,6 +387,40 @@ sortMergeListTestCases:
- 1
- 2
- 3
- description: sort nested pointers of ints
original:
mergeItemPtr:
- name: 2
mergingIntList:
- 1
- 3
- 2
- name: 1
mergingIntList:
- 2
- 1
sorted:
mergeItemPtr:
- name: 1
mergingIntList:
- 1
- 2
- name: 2
mergingIntList:
- 1
- 2
- 3
- description: sort one pointer of maps
original:
mergeItemPtr:
- name: 1
- name: 3
- name: 2
sorted:
mergeItemPtr:
- name: 1
- name: 2
- name: 3
`)
func TestStrategicMergePatch(t *testing.T) {