(t *testing.T)
| 63 | } |
| 64 | |
| 65 | func 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) |
nothing calls this directly
no test coverage detected