+func TestClientStopsAtTheFirstOutputItem(t *testing.T) {
+ server := newFakeResponses(t)
+ server.reply = func(w http.ResponseWriter, call fakeCall) {
+ writeEvents(w,
+ map[string]any{"type": "response.created"},
+ map[string]any{"type": "response.output_item.added", "item": messageItem("")},
+ )
+ }
+
+ client := newTestClient(t, server)
+ request := testRequest()
+ request.StopAtOutput = true
+ request.Turn = "warmup"
+ response, err := client.Create(t.Context(), request)
+ require.NoError(t, err)
+ require.Empty(t, response.Output)
+
+ request.StopAtOutput = false
+ _, err = client.Create(t.Context(), request)
+ require.ErrorContains(t, err, "event stream ended before the response completed")
+}
+
+func TestClientRefusesCallsOverTheLimit(t *testing.T) {
+ server := newFakeResponses(t)
+ client := newTestClient(t, server)
+ client.LimitCalls(2)
+
+ for range 2 {
+ require.False(t, client.LimitReached())
+ _, err := client.Create(t.Context(), testRequest())
+ require.NoError(t, err)
+ }
+
+ require.True(t, client.LimitReached())
+ _, err := client.Create(t.Context(), testRequest())
+ require.ErrorIs(t, err, errCallLimit)
+ require.Equal(t, 2, server.Calls())
+ require.Len(t, readUsage(t, client.usage.path), 2)
+}
+