1717 *
1818 */
1919
20- import { test , expect } from 'test/e2e_tests/test.fixtures' ;
20+ import { IncomingMessage } from 'node:http' ;
21+ import https from 'node:https' ;
22+ import { SecureVersion } from 'node:tls' ;
23+
24+ import { PageManager , webAppPath } from 'test/e2e_tests/pageManager' ;
25+ import { test , expect , withLogin } from 'test/e2e_tests/test.fixtures' ;
26+ import { connectWithUser } from 'test/e2e_tests/utils/userActions' ;
2127
2228test . describe ( 'Authentication' , ( ) => {
29+ test (
30+ 'Verify sign in button is disabled in case of empty credentials' ,
31+ { tag : [ '@TC-3457' , '@regression' ] } ,
32+ async ( { pageManager} ) => {
33+ const { pages} = pageManager . webapp ;
34+ const { emailInput, passwordInput, signInButton} = pages . login ( ) ;
35+ await pageManager . openLoginPage ( ) ;
36+
37+ await expect ( signInButton ) . toBeDisabled ( ) ;
38+
39+ await emailInput . fill ( 'invalid@email' ) ;
40+ await passwordInput . fill ( 'invalidPassword' ) ;
41+ await expect ( signInButton ) . not . toBeDisabled ( ) ;
42+
43+ await passwordInput . clear ( ) ;
44+ await expect ( signInButton ) . toBeDisabled ( ) ;
45+ } ,
46+ ) ;
47+
2348 test (
2449 'I want to be asked to share telemetry data when I log in' ,
2550 { tag : [ '@TC-8780' , '@regression' ] } ,
@@ -33,4 +58,202 @@ test.describe('Authentication', () => {
3358 await expect ( modals . dataShareConsent ( ) . modalTitle ) . toBeVisible ( ) ;
3459 } ,
3560 ) ;
61+
62+ test (
63+ 'Verify sign in error appearance in case of suspended team account' ,
64+ { tag : [ '@TC-3468' , '@regression' ] } ,
65+ async ( { pageManager} ) => {
66+ const { pages} = pageManager . webapp ;
67+ await pageManager . openLoginPage ( ) ;
68+
69+ const userOfSuspendedTeam = { email : 'sven+team6@wire.com' , password : '12345678' } ;
70+ await pages . login ( ) . login ( userOfSuspendedTeam ) ;
71+
72+ await expect ( pages . login ( ) . loginErrorText ) . toHaveText ( 'This account is no longer authorized to log in' ) ;
73+ } ,
74+ ) ;
75+
76+ test (
77+ 'Verify current browser is set as temporary device' ,
78+ { tag : [ '@TC-3460' , '@regression' ] } ,
79+ async ( { pageManager, createUser} ) => {
80+ const user = await createUser ( ) ;
81+ const { pages, components} = pageManager . webapp ;
82+
83+ await test . step ( 'Log in with public computer checked' , async ( ) => {
84+ await pageManager . openLoginPage ( ) ;
85+ await pages . login ( ) . publicComputerCheckbox . click ( ) ;
86+ await pages . login ( ) . login ( user ) ;
87+ await pages . historyInfo ( ) . clickConfirmButton ( ) ;
88+ } ) ;
89+
90+ let proteusId : string ;
91+ await test . step ( 'Open device settings and get current proteus id' , async ( ) => {
92+ await components . conversationSidebar ( ) . clickPreferencesButton ( ) ;
93+ await pages . settings ( ) . devicesButton . click ( ) ;
94+
95+ proteusId = ( await pages . devices ( ) . proteusId . textContent ( ) ) ?? '' ;
96+ expect ( proteusId ) . toBeTruthy ( ) ;
97+ } ) ;
98+
99+ await test . step ( 'Log out of public computer' , async ( ) => {
100+ await pages . settings ( ) . accountButton . click ( ) ;
101+ await pages . account ( ) . clickLogoutButton ( ) ;
102+ } ) ;
103+
104+ await test . step ( 'Log in again on non public computer' , async ( ) => {
105+ await pageManager . openLoginPage ( ) ;
106+ await pages . login ( ) . login ( user ) ;
107+ } ) ;
108+
109+ await test . step ( "Open device settings and ensure the public computer isn't active and the ID was re-generated" , async ( ) => {
110+ await components . conversationSidebar ( ) . clickPreferencesButton ( ) ;
111+ await pages . settings ( ) . devicesButton . click ( ) ;
112+
113+ await expect ( pages . devices ( ) . activeDevices ) . toHaveCount ( 0 ) ;
114+ await expect ( pages . devices ( ) . proteusId ) . not . toContainText ( proteusId ) ;
115+ } ) ;
116+ } ,
117+ ) ;
118+
119+ test (
120+ 'Verify sign in error appearance in case of wrong credentials' ,
121+ { tag : [ '@TC-3465' , '@regression' ] } ,
122+ async ( { pageManager} ) => {
123+ const { pages} = pageManager . webapp ;
124+ await pageManager . openLoginPage ( ) ;
125+
126+ await pages . login ( ) . login ( { email : 'invalid@wire.com' , password : 'invalid' } ) ;
127+
128+ await expect ( pages . login ( ) . loginErrorText ) . toHaveText ( 'Please verify your details and try again' ) ;
129+ } ,
130+ ) ;
131+
132+ [
133+ { tag : '@TC-3472' , deviceType : 'permanent' } ,
134+ { tag : '@TC-3473' , deviceType : 'temporary' } ,
135+ ] . forEach ( ( { deviceType, tag} ) => {
136+ test (
137+ `I want to keep my history after refreshing the page on ${ deviceType } device` ,
138+ { tag : [ tag , '@regression' ] } ,
139+ async ( { pageManager, createTeam} ) => {
140+ const { pages} = pageManager . webapp ;
141+ const team = await createTeam ( 'Test Team' , { withMembers : 1 } ) ;
142+ const userA = team . owner ;
143+ const userB = team . members [ 0 ] ;
144+
145+ await test . step ( 'Log in and connect with user B' , async ( ) => {
146+ await pageManager . openLoginPage ( ) ;
147+
148+ if ( deviceType === 'temporary' ) {
149+ await pages . login ( ) . publicComputerCheckbox . click ( ) ;
150+ await pages . login ( ) . login ( userA ) ;
151+ await pages . historyInfo ( ) . clickConfirmButton ( ) ;
152+ } else {
153+ await pages . login ( ) . login ( userA ) ;
154+ }
155+
156+ await connectWithUser ( pageManager , userB ) ;
157+ } ) ;
158+
159+ await test . step ( 'Send a message' , async ( ) => {
160+ await pages . conversationList ( ) . openConversation ( userB . fullName ) ;
161+ await pages . conversation ( ) . sendMessage ( 'Before refresh' ) ;
162+ } ) ;
163+
164+ await test . step ( 'Ensure message is still visible after page refresh' , async ( ) => {
165+ const message = pages . conversation ( ) . getMessage ( { content : 'Before refresh' } ) ;
166+ await expect ( message ) . toBeVisible ( ) ;
167+
168+ await pageManager . refreshPage ( ) ;
169+
170+ await pages . conversationList ( ) . openConversation ( userB . fullName ) ;
171+ await expect ( message ) . toBeVisible ( ) ;
172+ } ) ;
173+ } ,
174+ ) ;
175+ } ) ;
176+
177+ // Bug: Connecting using TLSv1.2 should not be allowed but succeeds
178+ test . skip (
179+ 'I want to make sure i connect to webapp only through TLS >= 1.3 connection' ,
180+ { tag : [ '@TC-3480' , '@regression' ] } ,
181+ async ( ) => {
182+ const requestWithTlsVersion = ( versions : { min ?: SecureVersion ; max ?: SecureVersion } ) =>
183+ new Promise < IncomingMessage > ( ( res , rej ) => {
184+ https . get ( webAppPath , { minVersion : versions . min , maxVersion : versions . max } , res ) . on ( 'error' , rej ) ;
185+ } ) ;
186+
187+ await expect ( requestWithTlsVersion ( { max : 'TLSv1.2' } ) ) . rejects . toBeDefined ( ) ;
188+ await expect ( requestWithTlsVersion ( { min : 'TLSv1.3' } ) ) . resolves . toBeDefined ( ) ;
189+ } ,
190+ ) ;
191+
192+ test (
193+ 'Make sure user does not see data of user of previous sessions on same browser' ,
194+ { tag : [ '@TC-1311' , '@regression' ] } ,
195+ async ( { pageManager, createTeam} ) => {
196+ const { pages, components} = pageManager . webapp ;
197+ const team = await createTeam ( 'Test Team' , { withMembers : 1 } ) ;
198+ const userA = team . owner ;
199+ const userB = team . members [ 0 ] ;
200+
201+ await test . step ( 'Log in with public computer checked' , async ( ) => {
202+ await pageManager . openLoginPage ( ) ;
203+ await pages . login ( ) . publicComputerCheckbox . click ( ) ;
204+ await pages . login ( ) . login ( userA ) ;
205+ await pages . historyInfo ( ) . clickConfirmButton ( ) ;
206+ } ) ;
207+
208+ await test . step ( 'Connect with and send message to userB' , async ( ) => {
209+ await connectWithUser ( pageManager , userB ) ;
210+ await pages . conversationList ( ) . openConversation ( userB . fullName ) ;
211+ await pages . conversation ( ) . sendMessage ( 'Test message' ) ;
212+ } ) ;
213+
214+ await test . step ( 'Log out of public computer' , async ( ) => {
215+ await components . conversationSidebar ( ) . clickPreferencesButton ( ) ;
216+ await pages . settings ( ) . accountButton . click ( ) ;
217+ await pages . account ( ) . clickLogoutButton ( ) ;
218+ } ) ;
219+
220+ await test . step ( 'Log in again' , async ( ) => {
221+ await pageManager . openLoginPage ( ) ;
222+ await pages . login ( ) . login ( userA ) ;
223+ await pages . historyInfo ( ) . clickConfirmButton ( ) ;
224+ } ) ;
225+
226+ await test . step ( 'Verify previously sent message is gone' , async ( ) => {
227+ await pages . conversationList ( ) . openConversation ( userB . fullName ) ;
228+ await expect ( pages . conversation ( ) . getMessage ( { content : 'Test message' } ) ) . not . toBeAttached ( ) ;
229+ } ) ;
230+ } ,
231+ ) ;
232+
233+ test (
234+ 'Verify session expired info is visible on login page' ,
235+ { tag : [ '@TC-1311' , '@regression' ] } ,
236+ async ( { createPage, createUser} ) => {
237+ const user = await createUser ( ) ;
238+ const device1Pages = PageManager . from ( await createPage ( withLogin ( user ) ) ) . webapp . pages ;
239+
240+ const {
241+ pages : device2Pages ,
242+ modals : device2Modals ,
243+ components : device2Components ,
244+ } = PageManager . from ( await createPage ( withLogin ( user ) ) ) . webapp ;
245+ await device2Pages . historyInfo ( ) . clickConfirmButton ( ) ;
246+
247+ await device2Components . conversationSidebar ( ) . clickPreferencesButton ( ) ;
248+ await device2Pages . settings ( ) . devicesButton . click ( ) ;
249+ await device2Pages . devices ( ) . activeDevices . getByRole ( 'button' , { name : 'Remove Device' } ) . click ( ) ;
250+
251+ await device2Modals . password ( ) . passwordInput . fill ( user . password ) ;
252+ await device2Modals . password ( ) . clickAction ( ) ;
253+
254+ await expect (
255+ device1Pages . singleSignOn ( ) . page . getByText ( 'You were signed out because your device was deleted' ) ,
256+ ) . toBeVisible ( ) ;
257+ } ,
258+ ) ;
36259} ) ;
0 commit comments