(t *testing.T)
| 2445 | } |
| 2446 | |
| 2447 | func TestCreateChatRejectsWhenUsageLimitReached(t *testing.T) { |
| 2448 | t.Parallel() |
| 2449 | |
| 2450 | db, ps := dbtestutil.NewDB(t) |
| 2451 | replica := newTestServer(t, db, ps, uuid.New()) |
| 2452 | |
| 2453 | ctx := testutil.Context(t, testutil.WaitLong) |
| 2454 | user, org, model := seedChatDependencies(t, db) |
| 2455 | |
| 2456 | _, err := db.UpsertChatUsageLimitConfig(ctx, database.UpsertChatUsageLimitConfigParams{ |
| 2457 | Enabled: true, |
| 2458 | DefaultLimitMicros: 100, |
| 2459 | Period: string(codersdk.ChatUsageLimitPeriodDay), |
| 2460 | }) |
| 2461 | require.NoError(t, err) |
| 2462 | |
| 2463 | existingChat := dbgen.Chat(t, db, database.Chat{ |
| 2464 | OrganizationID: org.ID, |
| 2465 | OwnerID: user.ID, |
| 2466 | Title: "existing-limit-chat", |
| 2467 | LastModelConfigID: model.ID, |
| 2468 | }) |
| 2469 | |
| 2470 | assistantContent, err := chatprompt.MarshalParts([]codersdk.ChatMessagePart{ |
| 2471 | codersdk.ChatMessageText("assistant"), |
| 2472 | }) |
| 2473 | require.NoError(t, err) |
| 2474 | |
| 2475 | _ = dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 2476 | ChatID: existingChat.ID, |
| 2477 | ModelConfigID: uuid.NullUUID{UUID: model.ID, Valid: true}, |
| 2478 | Role: database.ChatMessageRoleAssistant, |
| 2479 | ContentVersion: chatprompt.CurrentContentVersion, |
| 2480 | Content: assistantContent, |
| 2481 | TotalCostMicros: sql.NullInt64{Int64: 100, Valid: true}, |
| 2482 | }) |
| 2483 | |
| 2484 | beforeChats, err := db.GetChats(ctx, database.GetChatsParams{ |
| 2485 | OwnedOnly: true, |
| 2486 | ViewerID: user.ID, |
| 2487 | AfterID: uuid.Nil, |
| 2488 | OffsetOpt: 0, |
| 2489 | LimitOpt: 100, |
| 2490 | }) |
| 2491 | require.NoError(t, err) |
| 2492 | require.Len(t, beforeChats, 1) |
| 2493 | |
| 2494 | _, err = replica.CreateChat(ctx, chatd.CreateOptions{ |
| 2495 | OrganizationID: org.ID, |
| 2496 | OwnerID: user.ID, |
| 2497 | Title: "over-limit", |
| 2498 | ModelConfigID: model.ID, |
| 2499 | InitialUserContent: []codersdk.ChatMessagePart{codersdk.ChatMessageText("hello")}, |
| 2500 | }) |
| 2501 | require.Error(t, err) |
| 2502 | |
| 2503 | var limitErr *chatd.UsageLimitExceededError |
| 2504 | require.ErrorAs(t, err, &limitErr) |
nothing calls this directly
no test coverage detected