Skip to content

Commit

Permalink
Replace nested template variables in expected response (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkajla12 authored Oct 12, 2023
1 parent 1a67d84 commit b0d5955
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -403,16 +403,19 @@ func (suite TestSuite) compareObjects(obj map[string]interface{}, expectedObj ma

diffs := make([]string, 0)
// Replace any template strings in expectedObj with values from extracted fields
for k, v := range expectedObj {
switch str := v.(type) {
case string:
s, err := templateReplace(str, extractedFields)
if err != nil {
diffs = append(diffs, err.Error())
continue
}
expectedObj[k] = s
}
expectedObjBytes, err := json.Marshal(expectedObj)
if err != nil {
return diffs, errors.Wrap(err, "error marshaling expectedObj")
}
expectedObjStr, err := templateReplace(string(expectedObjBytes), extractedFields)
if err != nil {
return diffs, errors.Wrap(err, "error replacing template vars in expectedObj")
}

var processedExpectedObj map[string]interface{}
err = json.Unmarshal([]byte(expectedObjStr), &processedExpectedObj)
if err != nil {
return diffs, errors.Wrap(err, "error unmarshaling expectedObj")
}

// Deep compare the objects and return any errors,
Expand All @@ -421,7 +424,7 @@ func (suite TestSuite) compareObjects(obj map[string]interface{}, expectedObj ma
// NOTE: This approach is brittle as it assumes the
// github.com/go-test/deep package's Equal method
// continues to return errors in the expected format.
deepLibDiffs := deep.Equal(obj, expectedObj)
deepLibDiffs := deep.Equal(obj, processedExpectedObj)
ignoredFieldsMatchRegExp, err := regexp.Compile(fmt.Sprintf(`\[%s\]$`, strings.Join(suite.spec.IgnoredFields, `\]$|\[`)))
if err != nil {
return diffs, errors.Wrap(err, "invalid ignored fields regexp")
Expand Down

0 comments on commit b0d5955

Please sign in to comment.