Skip to content

Commit e6de065

Browse files
committed
Align local grading and assertion descriptions with backend behavior
1 parent b9911f7 commit e6de065

9 files changed

Lines changed: 479 additions & 368 deletions

File tree

checks/cli.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,13 @@ func parseStdoutVariables(stdout string, vardefs []api.CLICommandStdoutVariable,
148148
}
149149

150150
func prettyPrintCLICommand(test api.CLICommandTest, variables map[string]string) string {
151+
var descriptions []string
151152
if test.ExitCode != nil {
152-
return fmt.Sprintf("Expect exit code %d", *test.ExitCode)
153+
descriptions = append(descriptions, fmt.Sprintf("Expect exit code %d", *test.ExitCode))
153154
}
154155

155156
if test.StdoutLinesGT != nil {
156-
return fmt.Sprintf("Expect > %d lines on stdout", *test.StdoutLinesGT)
157+
descriptions = append(descriptions, fmt.Sprintf("Expect > %d lines on stdout", *test.StdoutLinesGT))
157158
}
158159

159160
if test.StdoutContainsAll != nil {
@@ -163,7 +164,7 @@ func prettyPrintCLICommand(test api.CLICommandTest, variables map[string]string)
163164
interpolatedContains := InterpolateVariables(contains, variables)
164165
fmt.Fprintf(&str, "\n - '%s'", interpolatedContains)
165166
}
166-
return str.String()
167+
descriptions = append(descriptions, str.String())
167168
}
168169

169170
if test.StdoutContainsNone != nil {
@@ -173,12 +174,12 @@ func prettyPrintCLICommand(test api.CLICommandTest, variables map[string]string)
173174
interpolatedContainsNone := InterpolateVariables(containsNone, variables)
174175
fmt.Fprintf(&str, "\n - '%s'", interpolatedContainsNone)
175176
}
176-
return str.String()
177+
descriptions = append(descriptions, str.String())
177178
}
178179

179180
if test.StdoutJq != nil {
180-
return prettyPrintStdoutJqTest(*test.StdoutJq, variables)
181+
descriptions = append(descriptions, prettyPrintStdoutJqTest(*test.StdoutJq, variables))
181182
}
182183

183-
return ""
184+
return strings.Join(descriptions, "\n")
184185
}

checks/http.go

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -146,44 +146,35 @@ func interpolateJSONStrings(value any, variables map[string]string) any {
146146
}
147147

148148
func prettyPrintHTTPTest(test api.HTTPRequestTest, variables map[string]string) string {
149+
var descriptions []string
149150
if test.StatusCode != nil {
150-
return fmt.Sprintf("Expecting status code: %d", *test.StatusCode)
151+
descriptions = append(descriptions, fmt.Sprintf("Expecting status code: %d", *test.StatusCode))
151152
}
152153
if test.BodyContains != nil {
153-
interpolated := InterpolateVariables(*test.BodyContains, variables)
154-
return fmt.Sprintf("Expecting response body to contain: %s", interpolated)
154+
descriptions = append(descriptions, fmt.Sprintf("Expecting response body to contain: %s", *test.BodyContains))
155155
}
156156
if test.BodyContainsNone != nil {
157-
interpolated := InterpolateVariables(*test.BodyContainsNone, variables)
158-
return fmt.Sprintf("Expecting response body to not contain: %s", interpolated)
157+
descriptions = append(descriptions, fmt.Sprintf("Expecting response body to not contain: %s", *test.BodyContainsNone))
159158
}
160159
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)
160+
descriptions = append(descriptions, fmt.Sprintf("Expecting header to equal: '%s: %v'", test.HeadersEqual.Key, test.HeadersEqual.Value))
164161
}
165162
if test.HeadersContain != nil {
166-
interpolatedKey := InterpolateVariables(test.HeadersContain.Key, variables)
167-
interpolatedValue := InterpolateVariables(test.HeadersContain.Value, variables)
168-
return fmt.Sprintf("Expecting header to contain: '%s: %v'", interpolatedKey, interpolatedValue)
163+
descriptions = append(descriptions, fmt.Sprintf("Expecting header to contain: '%s: %v'", test.HeadersContain.Key, test.HeadersContain.Value))
169164
}
170165
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)
166+
descriptions = append(descriptions, fmt.Sprintf("Expecting trailer to equal: '%s: %v'", test.TrailersEqual.Key, test.TrailersEqual.Value))
174167
}
175168
if test.TrailersContain != nil {
176-
interpolatedKey := InterpolateVariables(test.TrailersContain.Key, variables)
177-
interpolatedValue := InterpolateVariables(test.TrailersContain.Value, variables)
178-
return fmt.Sprintf("Expecting trailer to contain: '%s: %v'", interpolatedKey, interpolatedValue)
169+
descriptions = append(descriptions, fmt.Sprintf("Expecting trailer to contain: '%s: %v'", test.TrailersContain.Key, test.TrailersContain.Value))
179170
}
180171
if test.JSONValue != nil {
181172
var val any
182173
switch {
183174
case test.JSONValue.IntValue != nil:
184175
val = *test.JSONValue.IntValue
185176
case test.JSONValue.StringValue != nil:
186-
val = *test.JSONValue.StringValue
177+
val = InterpolateVariables(*test.JSONValue.StringValue, variables)
187178
case test.JSONValue.BoolValue != nil:
188179
val = *test.JSONValue.BoolValue
189180
}
@@ -201,9 +192,9 @@ func prettyPrintHTTPTest(test api.HTTPRequestTest, variables map[string]string)
201192
}
202193

203194
expecting := fmt.Sprintf("Expecting JSON at %v %s %v", test.JSONValue.Path, op, val)
204-
return InterpolateVariables(expecting, variables)
195+
descriptions = append(descriptions, expecting)
205196
}
206-
return ""
197+
return strings.Join(descriptions, "\n")
207198
}
208199

209200
// Return a capped string representation of the response body.
@@ -267,7 +258,7 @@ func parseVariables(body []byte, vardefs []api.HTTPRequestResponseVariable, vari
267258
func parseHeaderVariables(headers map[string]string, vardefs []api.HTTPRequestResponseHeaderVariable, variables map[string]string) error {
268259
for _, vardef := range vardefs {
269260
headerValue, ok := findHeaderValue(headers, vardef.Header)
270-
if !ok || headerValue == "" {
261+
if !ok {
271262
continue
272263
}
273264

checks/jq.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@ package checks
22

33
import (
44
"bytes"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"io"
89
"strings"
910

1011
api "github.com/bootdotdev/bootdev/client"
11-
"github.com/goccy/go-json"
1212
"github.com/itchyny/gojq"
1313
"github.com/tailscale/hujson"
1414
)
1515

1616
func prettyPrintStdoutJqTest(test api.StdoutJqTest, variables map[string]string) string {
17-
queryText := InterpolateVariables(test.Query, variables)
17+
queryText := test.Query
1818
var str strings.Builder
1919
fmt.Fprintf(&str, "Expect jq query '%s' to yield values satisfying:", queryText)
2020
if len(test.ExpectedResults) == 0 {
@@ -30,11 +30,6 @@ func prettyPrintStdoutJqTest(test api.StdoutJqTest, variables map[string]string)
3030

3131
func formatJqExpectedValue(expected api.JqExpectedResult, variables map[string]string) string {
3232
value := expected.Value
33-
if expected.Type == api.JqTypeString {
34-
if stringValue, ok := expected.Value.(string); ok {
35-
value = InterpolateVariables(stringValue, variables)
36-
}
37-
}
3833
encoded, err := json.Marshal(value)
3934
if err != nil {
4035
return fmt.Sprintf("%v", value)
@@ -54,7 +49,7 @@ func collectStdoutJqOutputs(cmd api.CLIStepCLICommand, result api.CLICommandResu
5449
}
5550

5651
func runStdoutJqQuery(stdout string, test api.StdoutJqTest, variables map[string]string) api.CLICommandJqOutput {
57-
queryText := InterpolateVariables(test.Query, variables)
52+
queryText := test.Query
5853
input, err := parseJqInput(stdout, test.InputMode)
5954
if err != nil {
6055
return api.CLICommandJqOutput{Query: queryText, Error: err.Error()}

checks/jq_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,19 @@ func TestRunStdoutJqQuery(t *testing.T) {
1717
wantError bool
1818
}{
1919
{
20-
name: "queries json with interpolated query",
20+
name: "queries JSON with comments using a literal query",
2121
stdout: `{
22-
// Users to query
23-
"users": [/* users */ {"name":"Lane"},{"name":"Theo",},],
24-
}`,
22+
// Users to query
23+
"users": [/* users */ {"name":"Lane"},{"name":"Theo",},],
24+
}`,
2525
test: api.StdoutJqTest{
2626
InputMode: "json",
2727
Query: `.users[] | select(.name == "${name}") | .name`,
2828
},
2929
variables: map[string]string{"name": "Theo"},
3030
want: api.CLICommandJqOutput{
31-
Query: `.users[] | select(.name == "Theo") | .name`,
32-
Results: []string{`"Theo"`},
31+
Query: `.users[] | select(.name == "${name}") | .name`,
32+
Results: nil,
3333
},
3434
},
3535
{

0 commit comments

Comments
 (0)