Skip to content

Commit 21343b1

Browse files
authored
Add MustEqualToJson param matcher (#31)
1 parent 5e1a33c commit 21343b1

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

client_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ func TestStubRule_ToJson(t *testing.T) {
7070
WillSetStateTo("Stopped"),
7171
ExpectedFileName: "expected-template-scenario.json",
7272
},
73+
{
74+
Name: "MustEqualToJson",
75+
StubRule: NewStubRule("PATCH", URLMatching("/example")).
76+
WithBodyPattern(MustEqualToJson(map[string]interface{}{"meta": "information"}, IgnoreArrayOrder, IgnoreExtraElements)),
77+
ExpectedFileName: "must-equal-to-json.json",
78+
},
7379
{
7480
Name: "StubRuleWithBearerToken_StartsWithMatcher",
7581
StubRule: Post(URLPathEqualTo("/example")).

string_value_matcher.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ func EqualToJson(param string, equalJsonFlags ...EqualFlag) BasicParamMatcher {
107107
return NewStringValueMatcher(ParamEqualToJson, param, flags...)
108108
}
109109

110+
// MustEqualToJson returns a matcher that matches when the parameter is equal to the specified JSON.
111+
// This method panics if param cannot be marshaled to JSON.
112+
func MustEqualToJson(param any, equalJsonFlags ...EqualFlag) BasicParamMatcher {
113+
if str, ok := param.(string); ok {
114+
return EqualToJson(str, equalJsonFlags...)
115+
}
116+
117+
if jsonParam, err := json.Marshal(param); err != nil {
118+
panic(fmt.Sprintf("Unable to marshal parameter to JSON: %v", err))
119+
} else {
120+
return EqualToJson(string(jsonParam), equalJsonFlags...)
121+
}
122+
}
123+
110124
// MatchingXPath returns a matcher that matches when the parameter matches the specified XPath.
111125
func MatchingXPath(param string) BasicParamMatcher {
112126
return NewStringValueMatcher(ParamMatchesXPath, param)

stub_rule.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func (s *StubRule) WithMultipartPattern(pattern *MultipartPattern) *StubRule {
9797
func (s *StubRule) WithAuthToken(tokenMatcher BasicParamMatcher) *StubRule {
9898
methodPrefix := "Token "
9999
m := addAuthMethodToMatcher(tokenMatcher, methodPrefix)
100-
s.WithHeader(authorizationHeader, HasExactly(StartsWith(methodPrefix), m))
100+
s.WithHeader(authorizationHeader, StartsWith(methodPrefix).And(m))
101101
return s
102102
}
103103

@@ -113,7 +113,7 @@ func (s *StubRule) WithBearerToken(tokenMatcher BasicParamMatcher) *StubRule {
113113
func (s *StubRule) WithDigestAuth(matcher BasicParamMatcher) *StubRule {
114114
methodPrefix := "Digest "
115115
m := addAuthMethodToMatcher(matcher, methodPrefix)
116-
s.WithHeader(authorizationHeader, HasExactly(StartsWith(methodPrefix), m))
116+
s.WithHeader(authorizationHeader, StartsWith(methodPrefix).And(m))
117117
return s
118118
}
119119

testdata/must-equal-to-json.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"uuid": "%s",
3+
"id": "%s",
4+
"request": {
5+
"method": "PATCH",
6+
"urlPattern": "/example",
7+
"bodyPatterns": [
8+
{
9+
"equalToJson": "{\"meta\":\"information\"}",
10+
"ignoreArrayOrder" : true,
11+
"ignoreExtraElements" : true
12+
}
13+
]
14+
},
15+
"response": {
16+
"status": 200
17+
}
18+
}

0 commit comments

Comments
 (0)