@@ -57,6 +57,7 @@ vi.mock("../lib/gitStatusState", () => ({
5757} ) ) ;
5858
5959const THREAD_ID = "thread-browser-test" as ThreadId ;
60+ const THREAD_TITLE = "Browser test thread" ;
6061const ARCHIVED_SECONDARY_THREAD_ID = "thread-secondary-project-archived" as ThreadId ;
6162const PROJECT_ID = "project-1" as ProjectId ;
6263const SECOND_PROJECT_ID = "project-2" as ProjectId ;
@@ -288,7 +289,7 @@ function createSnapshotForTargetUser(options: {
288289 {
289290 id : THREAD_ID ,
290291 projectId : PROJECT_ID ,
291- title : "Browser test thread" ,
292+ title : THREAD_TITLE ,
292293 modelSelection : {
293294 provider : "codex" ,
294295 model : "gpt-5" ,
@@ -3413,6 +3414,34 @@ describe("ChatView timeline estimator parity (full app)", () => {
34133414 }
34143415 } ) ;
34153416
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+
34163445 it ( "shows the confirm archive action after clicking the archive button" , async ( ) => {
34173446 localStorage . setItem (
34183447 "t3code:client-settings:v1" ,
0 commit comments