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

Function TestHeartbeatNoWorkspaceNoBump

coderd/x/chatd/chatd_test.go:5683–5754  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

5681}
5682
5683func TestHeartbeatNoWorkspaceNoBump(t *testing.T) {
5684 t.Parallel()
5685
5686 db, ps := dbtestutil.NewDB(t)
5687
5688 ctx := testutil.Context(t, testutil.WaitLong)
5689 user, org, model := seedChatDependencies(t, db)
5690 setOpenAIProviderBaseURL(ctx, t, db, chattest.NewOpenAI(t, func(req *chattest.OpenAIRequest) chattest.OpenAIResponse {
5691 if !req.Stream {
5692 return chattest.OpenAINonStreamingResponse("ok")
5693 }
5694 chunks := make(chan chattest.OpenAIChunk)
5695 go func() {
5696 defer close(chunks)
5697 <-req.Context().Done()
5698 }()
5699 return chattest.OpenAIResponse{StreamingChunks: chunks}
5700 }))
5701
5702 // Set up UsageTracker with manual tick/flush.
5703 usageTickCh := make(chan time.Time)
5704 flushCh := make(chan int, 1)
5705 tracker := workspacestats.NewTracker(db,
5706 workspacestats.TrackerWithTickFlush(usageTickCh, flushCh),
5707 workspacestats.TrackerWithLogger(slogtest.Make(t, nil)),
5708 )
5709 t.Cleanup(func() { tracker.Close() })
5710
5711 logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
5712 server := chatd.New(chatd.Config{
5713 Logger: logger,
5714 Database: db,
5715 ReplicaID: uuid.New(),
5716 Pubsub: ps,
5717 PendingChatAcquireInterval: 10 * time.Millisecond,
5718 InFlightChatStaleAfter: testutil.WaitLong,
5719 ChatHeartbeatInterval: 100 * time.Millisecond,
5720 })
5721 server.Start()
5722 t.Cleanup(func() {
5723 require.NoError(t, server.Close())
5724 })
5725
5726 // Create a chat WITHOUT linking a workspace.
5727 chat, err := server.CreateChat(ctx, chatd.CreateOptions{
5728 OrganizationID: org.ID,
5729 OwnerID: user.ID,
5730 Title: "no-workspace-test",
5731 ModelConfigID: model.ID,
5732 InitialUserContent: []codersdk.ChatMessagePart{codersdk.ChatMessageText("hello")},
5733 })
5734 require.NoError(t, err)
5735
5736 // Wait for the chat to be acquired and at least one heartbeat
5737 // to fire.
5738 testutil.Eventually(ctx, t, func(ctx context.Context) bool {
5739 fromDB, listErr := db.GetChatByID(ctx, chat.ID)
5740 if listErr != nil {

Callers

nothing calls this directly

Calls 15

NewDBFunction · 0.92
ContextFunction · 0.92
NewOpenAIFunction · 0.92
NewTrackerFunction · 0.92
TrackerWithTickFlushFunction · 0.92
TrackerWithLoggerFunction · 0.92
NewFunction · 0.92
ChatMessageTextFunction · 0.92
EventuallyFunction · 0.92
RequireSendFunction · 0.92
RequireReceiveFunction · 0.92

Tested by

no test coverage detected