Skip to content

Commit 4d42107

Browse files
committed
rename headersContain to headersEqual; add substring matching
1 parent 486ecf1 commit 4d42107

7 files changed

Lines changed: 56 additions & 8 deletions

File tree

checks/http.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,25 @@ func prettyPrintHTTPTest(test api.HTTPRequestTest, variables map[string]string)
157157
interpolated := InterpolateVariables(*test.BodyContainsNone, variables)
158158
return fmt.Sprintf("Expecting response body to not contain: %s", interpolated)
159159
}
160+
if test.HeadersEqual != nil {
161+
interpolatedKey := InterpolateVariables(test.HeadersEqual.Key, variables)
162+
interpolatedValue := InterpolateVariables(test.HeadersEqual.Value, variables)
163+
return fmt.Sprintf("Expecting header to equal: '%s: %v'", interpolatedKey, interpolatedValue)
164+
}
160165
if test.HeadersContain != nil {
161166
interpolatedKey := InterpolateVariables(test.HeadersContain.Key, variables)
162167
interpolatedValue := InterpolateVariables(test.HeadersContain.Value, variables)
163-
return fmt.Sprintf("Expecting headers to contain: '%s: %v'", interpolatedKey, interpolatedValue)
168+
return fmt.Sprintf("Expecting header to contain: '%s: %v'", interpolatedKey, interpolatedValue)
169+
}
170+
if test.TrailersEqual != nil {
171+
interpolatedKey := InterpolateVariables(test.TrailersEqual.Key, variables)
172+
interpolatedValue := InterpolateVariables(test.TrailersEqual.Value, variables)
173+
return fmt.Sprintf("Expecting trailer to equal: '%s: %v'", interpolatedKey, interpolatedValue)
164174
}
165175
if test.TrailersContain != nil {
166176
interpolatedKey := InterpolateVariables(test.TrailersContain.Key, variables)
167177
interpolatedValue := InterpolateVariables(test.TrailersContain.Value, variables)
168-
return fmt.Sprintf("Expecting trailers to contain: '%s: %v'", interpolatedKey, interpolatedValue)
178+
return fmt.Sprintf("Expecting trailer to contain: '%s: %v'", interpolatedKey, interpolatedValue)
169179
}
170180
if test.JSONValue != nil {
171181
var val any

checks/local.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,12 @@ func evaluateHTTPRequestTests(stepIndex int, req api.CLIStepHTTPRequest, result
131131
if strings.Contains(result.BodyString, needle) {
132132
err = fmt.Errorf("expected response body to not contain %q", needle)
133133
}
134+
case test.HeadersEqual != nil:
135+
err = evaluateHeaderEquals(result.ResponseHeaders, *test.HeadersEqual, result.Variables, "header")
134136
case test.HeadersContain != nil:
135137
err = evaluateHeaderContains(result.ResponseHeaders, *test.HeadersContain, result.Variables, "header")
138+
case test.TrailersEqual != nil:
139+
err = evaluateHeaderEquals(result.ResponseTrailers, *test.TrailersEqual, result.Variables, "trailer")
136140
case test.TrailersContain != nil:
137141
err = evaluateHeaderContains(result.ResponseTrailers, *test.TrailersContain, result.Variables, "trailer")
138142
case test.JSONValue != nil:
@@ -185,6 +189,21 @@ func evaluateHTTPRequestTests(stepIndex int, req api.CLIStepHTTPRequest, result
185189
return nil
186190
}
187191

192+
func evaluateHeaderEquals(headers map[string]string, test api.HTTPRequestTestHeader, variables map[string]string, label string) error {
193+
key := InterpolateVariables(test.Key, variables)
194+
want := InterpolateVariables(test.Value, variables)
195+
196+
got, ok := findHeaderValue(headers, key)
197+
if !ok {
198+
return fmt.Errorf("expected %s %q to exist", label, key)
199+
}
200+
if !strings.EqualFold(got, want) {
201+
return fmt.Errorf("expected %s %q to equal %q, got %q", label, key, want, got)
202+
}
203+
204+
return nil
205+
}
206+
188207
func evaluateHeaderContains(headers map[string]string, test api.HTTPRequestTestHeader, variables map[string]string, label string) error {
189208
key := InterpolateVariables(test.Key, variables)
190209
want := InterpolateVariables(test.Value, variables)
@@ -193,7 +212,7 @@ func evaluateHeaderContains(headers map[string]string, test api.HTTPRequestTestH
193212
if !ok {
194213
return fmt.Errorf("expected %s %q to exist", label, key)
195214
}
196-
if !strings.Contains(got, want) {
215+
if !strings.Contains(strings.ToLower(got), strings.ToLower(want)) {
197216
return fmt.Errorf("expected %s %q to contain %q, got %q", label, key, want, got)
198217
}
199218

checks/local_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ func TestLocalSubmissionEventPassesCLIAndHTTPResults(t *testing.T) {
1414
}}},
1515
{HTTPRequest: &api.CLIStepHTTPRequest{Tests: []api.HTTPRequestTest{
1616
{StatusCode: intPtr(200)},
17+
{HeadersEqual: &api.HTTPRequestTestHeader{Key: "Set-Cookie", Value: "session_id=abc123; Path=/"}},
1718
{HeadersContain: &api.HTTPRequestTestHeader{Key: "Set-Cookie", Value: "session_id="}},
1819
{JSONValue: &api.HTTPRequestTestJSONValue{
1920
Path: ".app",

client/lessons.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ type HTTPRequestTest struct {
125125
StatusCode *int `yaml:"statusCode"`
126126
BodyContains *string `yaml:"bodyContains"`
127127
BodyContainsNone *string `yaml:"bodyContainsNone"`
128+
HeadersEqual *HTTPRequestTestHeader `yaml:"headersEqual"`
128129
HeadersContain *HTTPRequestTestHeader `yaml:"headersContain"`
130+
TrailersEqual *HTTPRequestTestHeader `yaml:"trailersEqual"`
129131
TrailersContain *HTTPRequestTestHeader `yaml:"trailersContain"`
130132
JSONValue *HTTPRequestTestJSONValue `yaml:"jsonValue"`
131133
}

render/http.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@ func printHTTPRequestResult(result api.HTTPRequestResult) string {
2121
filteredHeaders := make(map[string]string)
2222
for respK, respV := range result.ResponseHeaders {
2323
for _, test := range result.Request.Tests {
24-
if test.HeadersContain == nil {
24+
testHeader := test.HeadersEqual
25+
if testHeader == nil {
26+
testHeader = test.HeadersContain
27+
}
28+
if testHeader == nil {
2529
continue
2630
}
27-
interpolatedTestHeaderKey := checks.InterpolateVariables(test.HeadersContain.Key, result.Variables)
31+
interpolatedTestHeaderKey := checks.InterpolateVariables(testHeader.Key, result.Variables)
2832
if strings.EqualFold(respK, interpolatedTestHeaderKey) {
2933
filteredHeaders[respK] = respV
3034
}
@@ -34,11 +38,15 @@ func printHTTPRequestResult(result api.HTTPRequestResult) string {
3438
filteredTrailers := make(map[string]string)
3539
for respK, respV := range result.ResponseTrailers {
3640
for _, test := range result.Request.Tests {
37-
if test.TrailersContain == nil {
41+
testTrailer := test.TrailersEqual
42+
if testTrailer == nil {
43+
testTrailer = test.TrailersContain
44+
}
45+
if testTrailer == nil {
3846
continue
3947
}
4048

41-
interpolatedTestTrailerKey := checks.InterpolateVariables(test.TrailersContain.Key, result.Variables)
49+
interpolatedTestTrailerKey := checks.InterpolateVariables(testTrailer.Key, result.Variables)
4250
if strings.EqualFold(respK, interpolatedTestTrailerKey) {
4351
filteredTrailers[respK] = respV
4452
}

render/variables.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,18 @@ func availableVariablesForHTTPResult(result api.HTTPRequestResult) (entries []va
131131
if test.BodyContainsNone != nil {
132132
addInterpolationNames(*test.BodyContainsNone, "Body Excludes Test")
133133
}
134+
if test.HeadersEqual != nil {
135+
addInterpolationNames(test.HeadersEqual.Key, "Header Test Key")
136+
addInterpolationNames(test.HeadersEqual.Value, "Header Test Value")
137+
}
134138
if test.HeadersContain != nil {
135139
addInterpolationNames(test.HeadersContain.Key, "Header Test Key")
136140
addInterpolationNames(test.HeadersContain.Value, "Header Test Value")
137141
}
142+
if test.TrailersEqual != nil {
143+
addInterpolationNames(test.TrailersEqual.Key, "Trailer Test Key")
144+
addInterpolationNames(test.TrailersEqual.Value, "Trailer Test Value")
145+
}
138146
if test.TrailersContain != nil {
139147
addInterpolationNames(test.TrailersContain.Key, "Trailer Test Key")
140148
addInterpolationNames(test.TrailersContain.Value, "Trailer Test Value")

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.31.1
1+
v1.32.0

0 commit comments

Comments
 (0)