Skip to content

Commit 5ecd289

Browse files
test(e2e): address assertion review feedback
1 parent 563de7b commit 5ecd289

5 files changed

Lines changed: 40 additions & 24 deletions

File tree

tests/e2e/admin_test.go

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -322,23 +322,26 @@ func TestAdminAPI_UsageEndpoints_E2E(t *testing.T) {
322322
expectedTotalTokens = expectedInputTokens + expectedOutputTokens
323323
)
324324

325-
// Mock provider usage is 10 input + 20 output tokens per request, and this test sends 2 requests.
326-
requestDate := time.Now().UTC()
327-
today := requestDate.Format("2006-01-02")
328-
329325
usageFixture := setupSQLiteUsageFixture(t)
330326
ts := setupE2EAdminServer(t, e2eServerOptions{
331327
adminUsageReader: usageFixture.reader,
332328
usageLogger: usageFixture.logger,
333329
})
334330
defer ts.Close()
335331

332+
// Mock provider usage is 10 input + 20 output tokens per request, and this test sends 2 requests.
333+
requestWindowStart := time.Now().UTC()
336334
for i := 0; i < expectedRequests; i++ {
337335
resp := sendJSONRequest(t, ts.URL+chatCompletionsPath, defaultChatReq("Hello usage"))
338336
require.Equal(t, http.StatusOK, resp.StatusCode)
339337
closeBody(resp)
340338
}
341339
usageFixture.flush(t)
340+
requestWindowEnd := time.Now().UTC()
341+
expectedDailyDates := []string{requestWindowStart.Format("2006-01-02")}
342+
if endDate := requestWindowEnd.Format("2006-01-02"); endDate != expectedDailyDates[0] {
343+
expectedDailyDates = append(expectedDailyDates, endDate)
344+
}
342345

343346
t.Run("summary includes persisted usage", func(t *testing.T) {
344347
resp, err := http.Get(ts.URL + "/admin/usage/summary")
@@ -369,18 +372,32 @@ func TestAdminAPI_UsageEndpoints_E2E(t *testing.T) {
369372
require.NoError(t, json.Unmarshal(body, &daily))
370373
require.NotEmpty(t, daily)
371374

372-
var todayEntry *usage.DailyUsage
375+
var matchedEntries []usage.DailyUsage
373376
for i := range daily {
374-
if daily[i].Date == today {
375-
todayEntry = &daily[i]
376-
break
377+
for _, expectedDate := range expectedDailyDates {
378+
if daily[i].Date == expectedDate {
379+
matchedEntries = append(matchedEntries, daily[i])
380+
break
381+
}
377382
}
378383
}
379-
require.NotNil(t, todayEntry, "expected daily usage entry for %s", today)
380-
assert.Equal(t, expectedRequests, todayEntry.Requests)
381-
assert.Equal(t, expectedInputTokens, todayEntry.InputTokens)
382-
assert.Equal(t, expectedOutputTokens, todayEntry.OutputTokens)
383-
assert.Equal(t, expectedTotalTokens, todayEntry.TotalTokens)
384+
require.NotEmpty(t, matchedEntries, "expected daily usage entry for one of %v", expectedDailyDates)
385+
386+
var actualRequests int
387+
var actualInputTokens int64
388+
var actualOutputTokens int64
389+
var actualTotalTokens int64
390+
for _, entry := range matchedEntries {
391+
actualRequests += entry.Requests
392+
actualInputTokens += entry.InputTokens
393+
actualOutputTokens += entry.OutputTokens
394+
actualTotalTokens += entry.TotalTokens
395+
}
396+
397+
assert.Equal(t, expectedRequests, actualRequests)
398+
assert.Equal(t, expectedInputTokens, actualInputTokens)
399+
assert.Equal(t, expectedOutputTokens, actualOutputTokens)
400+
assert.Equal(t, expectedTotalTokens, actualTotalTokens)
384401
})
385402

386403
t.Run("query params accepted", func(t *testing.T) {

tests/e2e/auditlog_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,8 @@ func TestAuditLogMiddleware(t *testing.T) {
245245
msg, ok := choice0["message"].(map[string]interface{})
246246
require.True(t, ok)
247247
assert.Equal(t, "assistant", msg["role"])
248-
content, _ := msg["content"].(string)
248+
content, ok := msg["content"].(string)
249+
require.True(t, ok, "message.content should be a string, got %T", msg["content"])
249250
assert.Contains(t, content, "Test message", "captured response body should echo our input via the mock")
250251
})
251252

tests/e2e/helpers_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,11 +250,11 @@ func extractResponsesStreamContent(events []ResponsesStreamEvent) string {
250250
return content.String()
251251
}
252252

253-
// hasResponsesCompletedEvent checks if the stream contains the Responses API
253+
// hasResponsesCompletedEvent checks if the stream contains a typed Responses
254254
// completion event that carries the final response payload.
255255
func hasResponsesCompletedEvent(events []ResponsesStreamEvent) bool {
256256
for _, event := range events {
257-
if event.Type == "response.completed" {
257+
if event.Type == "response.completed" || event.Type == "response.done" {
258258
return true
259259
}
260260
}

tests/e2e/release-e2e-scenarios.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ assert_chat_stream_contains() {
136136
| jq -s -e --arg expected "$expected" '
137137
any(.[]; .object == "chat.completion.chunk")
138138
and ([.[]?.choices[]?.delta.content? // empty] | join("") | contains($expected))
139-
and any(.[]; .choices[]?.finish_reason == "stop")
139+
and any(.[]; (.choices[]?.finish_reason? // "") != "")
140140
' >/dev/null
141141
}
142142

@@ -151,14 +151,12 @@ assert_responses_stream_contains() {
151151
local file="$1"
152152
local expected="$2"
153153

154-
grep -qF 'event: response.created' "$file"
155-
grep -qF 'event: response.output_text.delta' "$file"
156-
grep -qF 'event: response.completed' "$file"
157154
grep -qF 'data: [DONE]' "$file"
158155
grep '^data: {' "$file" | sed 's/^data: //' \
159156
| jq -s -e --arg expected "$expected" '
160-
([.[] | select(.type == "response.output_text.delta") | .delta] | join("") | contains($expected))
161-
and any(.[]; .type == "response.completed" and ((.response.usage.total_tokens // 0) > 0))
157+
any(.[]; .type == "response.created")
158+
and ([.[] | select(.type == "response.output_text.delta") | .delta] | join("") | contains($expected))
159+
and any(.[]; (.type == "response.completed" or .type == "response.done") and ((.response.usage.total_tokens // .usage.total_tokens // 0) > 0))
162160
' >/dev/null
163161
}
164162

tests/e2e/responses_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func TestResponsesStreaming(t *testing.T) {
173173

174174
events := readResponsesStream(t, resp.Body)
175175
require.Greater(t, len(events), 0)
176-
assert.True(t, hasResponsesCompletedEvent(events), "Should receive response.completed event")
176+
assert.True(t, hasResponsesCompletedEvent(events), "Should receive response.completed or response.done event")
177177
assert.True(t, hasResponsesDoneMarker(events), "Should receive [DONE] marker")
178178
})
179179

@@ -197,7 +197,7 @@ func TestResponsesStreaming(t *testing.T) {
197197

198198
events := readResponsesStream(t, resp.Body)
199199
require.Greater(t, len(events), 0, "Should receive at least one SSE event")
200-
assert.True(t, hasResponsesCompletedEvent(events), "Should receive response.completed event")
200+
assert.True(t, hasResponsesCompletedEvent(events), "Should receive response.completed or response.done event")
201201
assert.True(t, hasResponsesDoneMarker(events), "Should receive [DONE] marker")
202202

203203
recorded := requireRecordedRequest(t, "/responses")

0 commit comments

Comments
 (0)