| ... | ... | @@ -57,6 +57,7 @@ vi.mock("../lib/gitStatusState", () => ({ |
| 57 | 57 | })); |
| 58 | 58 | |
| 59 | 59 | const THREAD_ID = "thread-browser-test" as ThreadId; |
| 60 | const THREAD_TITLE = "Browser test thread"; |
| 60 | 61 | const ARCHIVED_SECONDARY_THREAD_ID = "thread-secondary-project-archived" as ThreadId; |
| 61 | 62 | const PROJECT_ID = "project-1" as ProjectId; |
| 62 | 63 | const SECOND_PROJECT_ID = "project-2" as ProjectId; |
| ... | ... | @@ -288,7 +289,7 @@ function createSnapshotForTargetUser(options: { |
| 288 | 289 | { |
| 289 | 290 | id: THREAD_ID, |
| 290 | 291 | projectId: PROJECT_ID, |
| 291 | | title: "Browser test thread", |
| 292 | title: THREAD_TITLE, |
| 292 | 293 | modelSelection: { |
| 293 | 294 | provider: "codex", |
| 294 | 295 | model: "gpt-5", |
| ... | ... | @@ -3413,6 +3414,34 @@ describe("ChatView timeline estimator parity (full app)", () => { |
| 3413 | 3414 | } |
| 3414 | 3415 | }); |
| 3415 | 3416 | |
| 3417 | it("exposes the full thread title on the sidebar row tooltip", async () => { |
| 3418 | const mounted = await mountChatView({ |
| 3419 | viewport: DEFAULT_VIEWPORT, |
| 3420 | snapshot: createSnapshotForTargetUser({ |
| 3421 | targetMessageId: "msg-user-thread-tooltip-target" as MessageId, |
| 3422 | targetText: "thread tooltip target", |
| 3423 | }), |
| 3424 | }); |
| 3425 | |
| 3426 | try { |
| 3427 | const threadTitle = page.getByTestId(`thread-title-${THREAD_ID}`); |
| 3428 | |
| 3429 | await expect.element(threadTitle).toBeInTheDocument(); |
| 3430 | await threadTitle.hover(); |
| 3431 | |
| 3432 | await vi.waitFor( |
| 3433 | () => { |
| 3434 | const tooltip = document.querySelector<HTMLElement>('[data-slot="tooltip-popup"]'); |
| 3435 | expect(tooltip).not.toBeNull(); |
| 3436 | expect(tooltip?.textContent).toContain(THREAD_TITLE); |
| 3437 | }, |
| 3438 | { timeout: 8_000, interval: 16 }, |
| 3439 | ); |
| 3440 | } finally { |
| 3441 | await mounted.cleanup(); |
| 3442 | } |
| 3443 | }); |
| 3444 | |
| 3416 | 3445 | it("shows the confirm archive action after clicking the archive button", async () => { |
| 3417 | 3446 | localStorage.setItem( |
| 3418 | 3447 | "t3code:client-settings:v1", |