@@ -9,17 +9,14 @@ import (
99
1010// compareJSONFields compare two given json fields
1111// it will recurse on map[string]interface{} and []interface{}
12- // and compare string fields with compareJSONFieldsStrings
1312func compareJSONFields (requestValue , cassetteValue interface {}) bool {
1413 switch requestValue := requestValue .(type ) {
1514 case string :
16- return compareJSONFieldsStrings (requestValue , cassetteValue .(string ))
15+ return compareFieldsStrings (requestValue , cassetteValue .(string ))
1716 case map [string ]interface {}:
1817 return compareJSONBodies (requestValue , cassetteValue .(map [string ]interface {}))
1918 case []interface {}:
20- return compareJSONSlices (requestValue , cassetteValue .([]interface {}))
21- case []string :
22- return compareStringSlices (requestValue , cassetteValue .([]string ))
19+ return compareSlices (requestValue , cassetteValue .([]interface {}))
2320 default :
2421 return reflect .DeepEqual (requestValue , cassetteValue )
2522 }
@@ -74,7 +71,7 @@ func compareFormBodies(request, cassette url.Values) bool {
7471 continue
7572 }
7673
77- if ! compareJSONFields (requestValue , cassette [key ]) {
74+ if ! compareStringSlices (requestValue , cassette [key ]) {
7875 return false
7976 }
8077 }
@@ -91,9 +88,9 @@ func compareFormBodies(request, cassette url.Values) bool {
9188 return true
9289}
9390
94- // compareJSONFieldsStrings compare two strings from request JSON bodies
91+ // compareFieldsStrings compare two strings from request JSON bodies
9592// has special case when string are terraform generated names
96- func compareJSONFieldsStrings (expected , actual string ) bool {
93+ func compareFieldsStrings (expected , actual string ) bool {
9794 if expected == actual {
9895 return true
9996 }
@@ -145,7 +142,7 @@ func compareStringSlices(request, cassette []string) bool {
145142 })
146143
147144 for i , v := range request {
148- if ! compareJSONFieldsStrings (v , cassette [i ]) {
145+ if ! compareFieldsStrings (v , cassette [i ]) {
149146 return false
150147 }
151148 }
@@ -155,8 +152,8 @@ func compareStringSlices(request, cassette []string) bool {
155152
156153// compareJSONSlices compares two slices of interface{}
157154// if the slices are comparable (string or float64), it will sort them and compare them
158- // it returns true in case of slice of map[string]interface{} because it is not possible to sort them
159- func compareJSONSlices (request , cassette []interface {}) bool {
155+ // it returns true in case of slice of map[string]interface{} because it is impossible to sort
156+ func compareSlices (request , cassette []interface {}) bool {
160157 if len (request ) != len (cassette ) {
161158 return false
162159 }
@@ -165,23 +162,18 @@ func compareJSONSlices(request, cassette []interface{}) bool {
165162 return true
166163 }
167164
168- // try to infer the type of the slice, sort it and compare all elements
169165 switch request [0 ].(type ) {
170166 case string :
171- sort .Slice (request , func (i , j int ) bool {
172- return request [i ].(string ) < request [j ].(string )
173- })
174- sort .Slice (cassette , func (i , j int ) bool {
175- return cassette [i ].(string ) < cassette [j ].(string )
176- })
177-
178- for i := range request {
179- if ! compareJSONFieldsStrings (request [i ].(string ), cassette [i ].(string )) {
180- return false
181- }
167+ requestStrings := make ([]string , len (request ))
168+ for i , v := range request {
169+ requestStrings [i ] = v .(string )
170+ }
171+ cassetteStrings := make ([]string , len (cassette ))
172+ for i , v := range cassette {
173+ cassetteStrings [i ] = v .(string )
182174 }
183175
184- return true
176+ return compareStringSlices ( requestStrings , cassetteStrings )
185177 case float64 :
186178 sort .Slice (request , func (i , j int ) bool {
187179 return request [i ].(float64 ) < request [j ].(float64 )
0 commit comments