@@ -5,7 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
55Please see LICENSE in the repository root for full details.
66*/
77
8- import { type Page , test , expect , type JSHandle } from "@playwright/test" ;
8+ import {
9+ type Browser ,
10+ type Page ,
11+ test ,
12+ expect ,
13+ type JSHandle ,
14+ } from "@playwright/test" ;
915
1016import type { MatrixClient } from "matrix-js-sdk" ;
1117
@@ -30,8 +36,8 @@ const PASSWORD = "foobarbaz1!";
3036const CONFIG_JSON = {
3137 default_server_config : {
3238 "m.homeserver" : {
33- base_url : "http ://synapse.localhost:8008 " ,
34- server_name : "synapse.localhost" ,
39+ base_url : "https ://synapse.m. localhost" ,
40+ server_name : "synapse.m. localhost" ,
3541 } ,
3642 } ,
3743
@@ -74,6 +80,52 @@ async function setDevToolElementCallDevUrl(page: Page): Promise<void> {
7480 } ) ;
7581}
7682
83+ /**
84+ * Registers a new user and returns page, clientHandle and mxId.
85+ */
86+ async function registerUser (
87+ browser : Browser ,
88+ username : string ,
89+ ) : Promise < { page : Page ; clientHandle : JSHandle < MatrixClient > ; mxId : string } > {
90+ const userContext = await browser . newContext ( {
91+ reducedMotion : "reduce" ,
92+ } ) ;
93+ const page = await userContext . newPage ( ) ;
94+ await page . goto ( "http://localhost:8081/#/welcome" ) ;
95+ await page . getByRole ( "link" , { name : "Create Account" } ) . click ( ) ;
96+ await page . getByRole ( "textbox" , { name : "Username" } ) . fill ( username ) ;
97+ await page
98+ . getByRole ( "textbox" , { name : "Password" , exact : true } )
99+ . fill ( PASSWORD ) ;
100+ await page . getByRole ( "textbox" , { name : "Confirm password" } ) . click ( ) ;
101+ await page . getByRole ( "textbox" , { name : "Confirm password" } ) . fill ( PASSWORD ) ;
102+ await page . getByRole ( "button" , { name : "Register" } ) . click ( ) ;
103+ const continueButton = page . getByRole ( "button" , { name : "Continue" } ) ;
104+ try {
105+ await expect ( continueButton ) . toBeVisible ( { timeout : 5000 } ) ;
106+ await page
107+ . getByRole ( "textbox" , { name : "Password" , exact : true } )
108+ . fill ( PASSWORD ) ;
109+ await continueButton . click ( ) ;
110+ } catch {
111+ // continueButton not visible, continue as normal
112+ }
113+ await expect (
114+ page . getByRole ( "heading" , { name : `Welcome ${ username } ` } ) ,
115+ ) . toBeVisible ( ) ;
116+ await setDevToolElementCallDevUrl ( page ) ;
117+
118+ const clientHandle = await page . evaluateHandle ( ( ) =>
119+ window . mxMatrixClientPeg . get ( ) ,
120+ ) ;
121+ const mxId = ( await clientHandle . evaluate (
122+ ( cli : MatrixClient ) => cli . getUserId ( ) ,
123+ clientHandle ,
124+ ) ) ! ;
125+
126+ return { page, clientHandle, mxId } ;
127+ }
128+
77129export const widgetTest = test . extend < MyFixtures > ( {
78130 asWidget : async ( { browser, context } , pUse ) => {
79131 await context . route ( `http://localhost:8081/config.json*` , async ( route ) => {
@@ -83,61 +135,17 @@ export const widgetTest = test.extend<MyFixtures>({
83135 const userA = `brooks_${ Date . now ( ) } ` ;
84136 const userB = `whistler_${ Date . now ( ) } ` ;
85137
86- const user1Context = await browser . newContext ( {
87- reducedMotion : "reduce" ,
88- } ) ;
89- const ewPage1 = await user1Context . newPage ( ) ;
90- // Register the first user
91- await ewPage1 . goto ( "http://localhost:8081/#/welcome" ) ;
92- await ewPage1 . getByRole ( "link" , { name : "Create Account" } ) . click ( ) ;
93- await ewPage1 . getByRole ( "textbox" , { name : "Username" } ) . fill ( userA ) ;
94- await ewPage1
95- . getByRole ( "textbox" , { name : "Password" , exact : true } )
96- . fill ( PASSWORD ) ;
97- await ewPage1 . getByRole ( "textbox" , { name : "Confirm password" } ) . click ( ) ;
98- await ewPage1
99- . getByRole ( "textbox" , { name : "Confirm password" } )
100- . fill ( PASSWORD ) ;
101- await ewPage1 . getByRole ( "button" , { name : "Register" } ) . click ( ) ;
102- await expect (
103- ewPage1 . getByRole ( "heading" , { name : `Welcome ${ userA } ` } ) ,
104- ) . toBeVisible ( ) ;
105- await setDevToolElementCallDevUrl ( ewPage1 ) ;
106-
107- const brooksClientHandle = await ewPage1 . evaluateHandle ( ( ) =>
108- window . mxMatrixClientPeg . get ( ) ,
109- ) ;
110- const brooksMxId = ( await brooksClientHandle . evaluate ( ( cli ) => {
111- return cli . getUserId ( ) ;
112- } , brooksClientHandle ) ) ! ;
113-
114- const user2Context = await browser . newContext ( {
115- reducedMotion : "reduce" ,
116- } ) ;
117- const ewPage2 = await user2Context . newPage ( ) ;
118- // Register the second user
119- await ewPage2 . goto ( "http://localhost:8081/#/welcome" ) ;
120- await ewPage2 . getByRole ( "link" , { name : "Create Account" } ) . click ( ) ;
121- await ewPage2 . getByRole ( "textbox" , { name : "Username" } ) . fill ( userB ) ;
122- await ewPage2
123- . getByRole ( "textbox" , { name : "Password" , exact : true } )
124- . fill ( PASSWORD ) ;
125- await ewPage2 . getByRole ( "textbox" , { name : "Confirm password" } ) . click ( ) ;
126- await ewPage2
127- . getByRole ( "textbox" , { name : "Confirm password" } )
128- . fill ( PASSWORD ) ;
129- await ewPage2 . getByRole ( "button" , { name : "Register" } ) . click ( ) ;
130- await expect (
131- ewPage2 . getByRole ( "heading" , { name : `Welcome ${ userB } ` } ) ,
132- ) . toBeVisible ( ) ;
133- await setDevToolElementCallDevUrl ( ewPage2 ) ;
134-
135- const whistlerClientHandle = await ewPage2 . evaluateHandle ( ( ) =>
136- window . mxMatrixClientPeg . get ( ) ,
137- ) ;
138- const whistlerMxId = ( await whistlerClientHandle . evaluate ( ( cli ) => {
139- return cli . getUserId ( ) ;
140- } , whistlerClientHandle ) ) ! ;
138+ // Register users
139+ const {
140+ page : ewPage1 ,
141+ clientHandle : brooksClientHandle ,
142+ mxId : brooksMxId ,
143+ } = await registerUser ( browser , userA ) ;
144+ const {
145+ page : ewPage2 ,
146+ clientHandle : whistlerClientHandle ,
147+ mxId : whistlerMxId ,
148+ } = await registerUser ( browser , userB ) ;
141149
142150 // Invite the second user
143151 await ewPage1 . getByRole ( "button" , { name : "Add room" } ) . click ( ) ;
0 commit comments