(t *testing.T)
| 3278 | } |
| 3279 | |
| 3280 | func TestEditMessageRejectsWhenUsageLimitReached(t *testing.T) { |
| 3281 | t.Parallel() |
| 3282 | |
| 3283 | db, ps := dbtestutil.NewDB(t) |
| 3284 | replica := newTestServer(t, db, ps, uuid.New()) |
| 3285 | |
| 3286 | ctx := testutil.Context(t, testutil.WaitLong) |
| 3287 | user, org, model := seedChatDependencies(t, db) |
| 3288 | |
| 3289 | _, err := db.UpsertChatUsageLimitConfig(ctx, database.UpsertChatUsageLimitConfigParams{ |
| 3290 | Enabled: true, |
| 3291 | DefaultLimitMicros: 100, |
| 3292 | Period: string(codersdk.ChatUsageLimitPeriodDay), |
| 3293 | }) |
| 3294 | require.NoError(t, err) |
| 3295 | |
| 3296 | chat, err := replica.CreateChat(ctx, chatd.CreateOptions{ |
| 3297 | OrganizationID: org.ID, |
| 3298 | OwnerID: user.ID, |
| 3299 | Title: "edit-limit-reached", |
| 3300 | ModelConfigID: model.ID, |
| 3301 | InitialUserContent: []codersdk.ChatMessagePart{codersdk.ChatMessageText("original")}, |
| 3302 | }) |
| 3303 | require.NoError(t, err) |
| 3304 | |
| 3305 | messages, err := db.GetChatMessagesByChatID(ctx, database.GetChatMessagesByChatIDParams{ |
| 3306 | ChatID: chat.ID, |
| 3307 | AfterID: 0, |
| 3308 | }) |
| 3309 | require.NoError(t, err) |
| 3310 | require.Len(t, messages, 1) |
| 3311 | editedMessageID := messages[0].ID |
| 3312 | |
| 3313 | assistantContent, err := chatprompt.MarshalParts([]codersdk.ChatMessagePart{ |
| 3314 | codersdk.ChatMessageText("assistant"), |
| 3315 | }) |
| 3316 | require.NoError(t, err) |
| 3317 | |
| 3318 | _ = dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 3319 | ChatID: chat.ID, |
| 3320 | ModelConfigID: uuid.NullUUID{UUID: model.ID, Valid: true}, |
| 3321 | Role: database.ChatMessageRoleAssistant, |
| 3322 | ContentVersion: chatprompt.CurrentContentVersion, |
| 3323 | Content: assistantContent, |
| 3324 | TotalCostMicros: sql.NullInt64{Int64: 100, Valid: true}, |
| 3325 | }) |
| 3326 | |
| 3327 | _, err = replica.EditMessage(ctx, chatd.EditMessageOptions{ |
| 3328 | ChatID: chat.ID, |
| 3329 | EditedMessageID: editedMessageID, |
| 3330 | Content: []codersdk.ChatMessagePart{codersdk.ChatMessageText("edited")}, |
| 3331 | }) |
| 3332 | require.Error(t, err) |
| 3333 | |
| 3334 | var limitErr *chatd.UsageLimitExceededError |
| 3335 | require.ErrorAs(t, err, &limitErr) |
| 3336 | require.Equal(t, int64(100), limitErr.LimitMicros) |
| 3337 | require.Equal(t, int64(100), limitErr.ConsumedMicros) |
nothing calls this directly
no test coverage detected