MCPcopy Index your code
hub / github.com/coder/coder / TestChatUsageLimitExceededFrom

Function TestChatUsageLimitExceededFrom

codersdk/chats_test.go:65–138  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

63}
64
65func TestChatUsageLimitExceededFrom(t *testing.T) {
66 t.Parallel()
67
68 t.Run("ExtractsTyped409", func(t *testing.T) {
69 t.Parallel()
70
71 want := codersdk.ChatUsageLimitExceededResponse{
72 Response: codersdk.Response{Message: "Chat usage limit exceeded."},
73 SpentMicros: 123,
74 LimitMicros: 456,
75 ResetsAt: time.Date(2026, time.March, 16, 12, 0, 0, 0, time.UTC),
76 }
77
78 srv := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
79 require.Equal(t, http.MethodPost, r.Method)
80 require.Equal(t, "/api/experimental/chats", r.URL.Path)
81 rw.Header().Set("Content-Type", "application/json")
82 rw.WriteHeader(http.StatusConflict)
83 require.NoError(t, json.NewEncoder(rw).Encode(want))
84 }))
85 defer srv.Close()
86
87 serverURL, err := url.Parse(srv.URL)
88 require.NoError(t, err)
89
90 client := codersdk.NewExperimentalClient(codersdk.New(serverURL))
91 _, err = client.CreateChat(context.Background(), codersdk.CreateChatRequest{
92 Content: []codersdk.ChatInputPart{{
93 Type: codersdk.ChatInputPartTypeText,
94 Text: "hello",
95 }},
96 })
97 require.Error(t, err)
98
99 sdkErr, ok := codersdk.AsError(err)
100 require.True(t, ok)
101 require.Equal(t, http.StatusConflict, sdkErr.StatusCode())
102 require.Equal(t, want.Message, sdkErr.Message)
103
104 limitErr := codersdk.ChatUsageLimitExceededFrom(err)
105 require.NotNil(t, limitErr)
106 require.Equal(t, want, *limitErr)
107 })
108
109 t.Run("ReturnsNilForNonLimitErrors", func(t *testing.T) {
110 t.Parallel()
111
112 require.Nil(t, codersdk.ChatUsageLimitExceededFrom(codersdk.NewError(http.StatusConflict, codersdk.Response{Message: "plain conflict"})))
113
114 srv := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
115 rw.Header().Set("Content-Type", "application/json")
116 rw.WriteHeader(http.StatusBadRequest)
117 require.NoError(t, json.NewEncoder(rw).Encode(codersdk.Response{Message: "Invalid request."}))
118 }))
119 defer srv.Close()
120
121 serverURL, err := url.Parse(srv.URL)
122 require.NoError(t, err)

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
CreateChatMethod · 0.95
NewExperimentalClientFunction · 0.92
NewFunction · 0.92
AsErrorFunction · 0.92
NewErrorFunction · 0.92
EncodeMethod · 0.80
RunMethod · 0.65
SetMethod · 0.65
ParseMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected