(t *testing.T)
| 318 | } |
| 319 | |
| 320 | func TestSharedReaderStreamChat(t *testing.T) { |
| 321 | t.Parallel() |
| 322 | |
| 323 | ctx := testutil.Context(t, testutil.WaitLong) |
| 324 | client, db := newChatClientWithDatabase(t) |
| 325 | firstUser := coderdtest.CreateFirstUser(t, client.Client) |
| 326 | modelConfig := createChatModelConfig(t, client) |
| 327 | sharedClient, sharedUser := coderdtest.CreateAnotherUser(t, client.Client, firstUser.OrganizationID) |
| 328 | sharedClientExp := codersdk.NewExperimentalClient(sharedClient) |
| 329 | chat := dbgen.Chat(t, db, database.Chat{ |
| 330 | OrganizationID: firstUser.OrganizationID, |
| 331 | OwnerID: firstUser.UserID, |
| 332 | LastModelConfigID: modelConfig.ID, |
| 333 | Title: "shared stream chat", |
| 334 | }) |
| 335 | insertAssistantCostMessage(t, db, chat.ID, modelConfig.ID, 0) |
| 336 | |
| 337 | err := client.UpdateChatACL(ctx, chat.ID, codersdk.UpdateChatACL{ |
| 338 | UserRoles: map[string]codersdk.ChatRole{ |
| 339 | sharedUser.ID.String(): codersdk.ChatRoleRead, |
| 340 | }, |
| 341 | }) |
| 342 | require.NoError(t, err) |
| 343 | |
| 344 | events, closer, err := sharedClientExp.StreamChat(ctx, chat.ID, nil) |
| 345 | require.NoError(t, err) |
| 346 | t.Cleanup(func() { _ = closer.Close() }) |
| 347 | |
| 348 | foundAssistantMessage := false |
| 349 | for !foundAssistantMessage { |
| 350 | select { |
| 351 | case <-ctx.Done(): |
| 352 | require.FailNow(t, "timed out waiting for shared stream chat event") |
| 353 | case event, ok := <-events: |
| 354 | require.True(t, ok, "stream closed before expected event") |
| 355 | require.Equal(t, chat.ID, event.ChatID) |
| 356 | require.NotEqual(t, codersdk.ChatStreamEventTypeError, event.Type) |
| 357 | if event.Type == codersdk.ChatStreamEventTypeMessage && |
| 358 | event.Message != nil && |
| 359 | event.Message.Role == codersdk.ChatMessageRoleAssistant { |
| 360 | foundAssistantMessage = true |
| 361 | } |
| 362 | } |
| 363 | } |
| 364 | require.NoError(t, closer.Close()) |
| 365 | |
| 366 | persisted, err := db.GetChatByID(dbauthz.AsSystemRestricted(ctx), chat.ID) |
| 367 | require.NoError(t, err) |
| 368 | require.False(t, persisted.LastReadMessageID.Valid) |
| 369 | } |
| 370 | |
| 371 | func TestListChatsExcludesSharedChats(t *testing.T) { |
| 372 | t.Parallel() |
nothing calls this directly
no test coverage detected