@@ -447,4 +447,72 @@ test.describe("Threads", () => {
447
447
await expect ( locator . locator ( ".mx_EventTile" ) . first ( ) . getByText ( "Hello Mr. Bot" ) ) . toBeAttached ( ) ;
448
448
await expect ( locator . locator ( ".mx_EventTile" ) . last ( ) . getByText ( "Hello Mr. User" ) ) . toBeAttached ( ) ;
449
449
} ) ;
450
+
451
+ test ( "navigate through right panel" , async ( { page, app, user } ) => {
452
+ // Create room
453
+ const roomId = await app . client . createRoom ( { } ) ;
454
+ await page . goto ( "/#/room/" + roomId ) ;
455
+
456
+ /**
457
+ * Send a message in the main timeline
458
+ * @param message
459
+ */
460
+ const sendMessage = async ( message : string ) => {
461
+ const messageComposer = page . getByRole ( "region" , { name : "Message composer" } ) ;
462
+ const textbox = messageComposer . getByRole ( "textbox" , { name : "Send a message…" } ) ;
463
+ await textbox . fill ( message ) ;
464
+ await textbox . press ( "Enter" ) ;
465
+ } ;
466
+
467
+ /**
468
+ * Create a thread from the rootMessage and send a message in the thread
469
+ * @param rootMessage
470
+ * @param threadMessage
471
+ */
472
+ const createThread = async ( rootMessage : string , threadMessage : string ) => {
473
+ // First create a thread
474
+ const roomViewBody = page . locator ( ".mx_RoomView_body" ) ;
475
+ const messageTile = roomViewBody
476
+ . locator ( ".mx_EventTile[data-scroll-tokens]" )
477
+ . filter ( { hasText : rootMessage } ) ;
478
+ await messageTile . hover ( ) ;
479
+ await messageTile . getByRole ( "button" , { name : "Reply in thread" } ) . click ( ) ;
480
+ await expect ( page . locator ( ".mx_ThreadView_timelinePanelWrapper" ) ) . toHaveCount ( 1 ) ;
481
+
482
+ // Send a message in the thread
483
+ const threadPanel = page . locator ( ".mx_ThreadPanel" ) ;
484
+ const textbox = threadPanel . getByRole ( "textbox" , { name : "Send a message…" } ) ;
485
+ await textbox . fill ( threadMessage ) ;
486
+ await textbox . press ( "Enter" ) ;
487
+ await expect ( threadPanel . locator ( ".mx_EventTile_last" ) . getByText ( threadMessage ) ) . toBeVisible ( ) ;
488
+ // Close thread
489
+ await threadPanel . getByRole ( "button" , { name : "Close" } ) . click ( ) ;
490
+ } ;
491
+
492
+ await sendMessage ( "Hello Mr. Bot" ) ;
493
+ await sendMessage ( "Hello again Mr. Bot" ) ;
494
+ await createThread ( "Hello Mr. Bot" , "Hello Mr. User in a thread" ) ;
495
+ await createThread ( "Hello again Mr. Bot" , "Hello again Mr. User in a thread" ) ;
496
+
497
+ // Open thread panel
498
+ await page . getByRole ( "button" , { name : "Threads" } ) . click ( ) ;
499
+ const threadPanel = page . locator ( ".mx_ThreadPanel" ) ;
500
+ await expect (
501
+ threadPanel . locator ( ".mx_EventTile_last" ) . getByText ( "Hello again Mr. User in a thread" ) ,
502
+ ) . toBeVisible ( ) ;
503
+
504
+ // Open threads list
505
+ await threadPanel . getByRole ( "button" , { name : "Threads" } ) . click ( ) ;
506
+ const rightPanel = page . locator ( ".mx_RightPanel" ) ;
507
+ // Check that the threads are listed
508
+ await expect ( rightPanel . locator ( ".mx_EventTile" ) . getByText ( "Hello Mr. User in a thread" ) ) . toBeVisible ( ) ;
509
+ await expect ( rightPanel . locator ( ".mx_EventTile" ) . getByText ( "Hello again Mr. User in a thread" ) ) . toBeVisible ( ) ;
510
+
511
+ // Open the first thread
512
+ await rightPanel . locator ( ".mx_EventTile" ) . getByText ( "Hello Mr. User in a thread" ) . click ( ) ;
513
+ await expect ( rightPanel . locator ( ".mx_EventTile" ) . getByText ( "Hello Mr. User in a thread" ) ) . toBeVisible ( ) ;
514
+ await expect (
515
+ rightPanel . locator ( ".mx_EventTile" ) . getByText ( "Hello again Mr. User in a thread" ) ,
516
+ ) . not . toBeVisible ( ) ;
517
+ } ) ;
450
518
} ) ;
0 commit comments