From bc3c7c2a06db0f9d41778a860600025f2edb213c Mon Sep 17 00:00:00 2001 From: magodo Date: Tue, 15 Nov 2022 11:45:17 +0800 Subject: [PATCH 1/2] SuppressJsonDiff supports json array --- helper/structure/suppress_json_diff.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/helper/structure/suppress_json_diff.go b/helper/structure/suppress_json_diff.go index c99b73846ee..b32dda62e23 100644 --- a/helper/structure/suppress_json_diff.go +++ b/helper/structure/suppress_json_diff.go @@ -1,21 +1,19 @@ package structure import ( + "encoding/json" "reflect" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) func SuppressJsonDiff(k, oldValue, newValue string, d *schema.ResourceData) bool { - oldMap, err := ExpandJsonFromString(oldValue) - if err != nil { + var o, n interface{} + if err := json.Unmarshal([]byte(oldValue), &o); err != nil { return false } - - newMap, err := ExpandJsonFromString(newValue) - if err != nil { + if err := json.Unmarshal([]byte(newValue), &n); err != nil { return false } - - return reflect.DeepEqual(oldMap, newMap) + return reflect.DeepEqual(o, n) } From 0256ba4317f8af3b52e2ec68f61766730e5a17b8 Mon Sep 17 00:00:00 2001 From: magodo Date: Tue, 15 Nov 2022 11:48:17 +0800 Subject: [PATCH 2/2] Add test --- helper/structure/suppress_json_diff_test.go | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/helper/structure/suppress_json_diff_test.go b/helper/structure/suppress_json_diff_test.go index 0844e55b9f1..e92befa42b0 100644 --- a/helper/structure/suppress_json_diff_test.go +++ b/helper/structure/suppress_json_diff_test.go @@ -34,6 +34,33 @@ func TestSuppressJsonDiff(t *testing.T) { newValue: `{ "enabled": true }`, expected: true, }, + "different-structure (array)": { + oldValue: `[{ "enabled": true }]`, + newValue: `[{ "enabled": true, "world": "round" }]`, + expected: false, + }, + "different-value (array)": { + oldValue: `[{ "enabled": true }]`, + newValue: `[{ "enabled": false }]`, + expected: false, + }, + "different order (array)": { + oldValue: `[{ "enabled": true }, { "enabled": false }]`, + newValue: `[{ "enabled": false }, { "enabled": true }]`, + expected: false, + }, + "same (array)": { + oldValue: `[{ "enabled": true }]`, + newValue: `[{ "enabled": true }]`, + expected: true, + }, + "same-whitespace (array)": { + oldValue: `[{ + "enabled": true + }]`, + newValue: `[{ "enabled": true }]`, + expected: true, + }, } for name, testCase := range testCases {