@@ -12,7 +12,6 @@ test.describe("Login", () => {
12
12
const existingUser = tenant . owner ;
13
13
const context = createTestContext ( page ) ;
14
14
15
- // === EMAIL VALIDATION EDGE CASES ===
16
15
// Act & Assert: Test empty email validation & verify error message
17
16
await page . goto ( "/login" ) ;
18
17
await expect ( page . getByRole ( "heading" , { name : "Hi! Welcome back" } ) ) . toBeVisible ( ) ;
@@ -30,7 +29,6 @@ test.describe("Login", () => {
30
29
await page . getByRole ( "button" , { name : "Continue" } ) . click ( ) ;
31
30
await expect ( page ) . toHaveURL ( "/login" ) ; // Verify form submission was blocked
32
31
33
- // === KEYBOARD NAVIGATION AND ACCESSIBILITY ===
34
32
// Act & Assert: Test form submission with Enter key & verify navigation
35
33
await page . getByRole ( "textbox" , { name : "Email" } ) . fill ( existingUser . email ) ;
36
34
await page . keyboard . press ( "Enter" ) ; // Submit form using Enter
@@ -44,7 +42,6 @@ test.describe("Login", () => {
44
42
const codeInput = page . getByLabel ( "Login verification code" ) . locator ( "input" ) . first ( ) ;
45
43
await expect ( codeInput ) . toHaveAttribute ( "type" , "text" ) ;
46
44
47
- // === WRONG VERIFICATION CODE HANDLING (FROM SMOKE TEST) ===
48
45
// Act & Assert: Test wrong verification code & verify error and focus reset
49
46
await page . keyboard . type ( "WRONG1" ) ;
50
47
await page . getByRole ( "button" , { name : "Verify" } ) . click ( ) ;
@@ -58,73 +55,25 @@ test.describe("Login", () => {
58
55
await expect ( page ) . toHaveURL ( "/admin" ) ;
59
56
await expect ( page . getByRole ( "heading" , { name : "Welcome home" } ) ) . toBeVisible ( ) ;
60
57
61
- // === LANGUAGE PERSISTENCE WITH RATE LIMITING LOGOUT ===
62
- // Act & Assert: Logout and start fresh login for rate limiting test & verify logout
58
+ // Act & Assert: Logout to test security edge cases
63
59
await page . getByRole ( "button" , { name : "User profile menu" } ) . click ( ) ;
64
60
await page . getByRole ( "menuitem" , { name : "Log out" } ) . click ( ) ;
65
61
await expect ( page ) . toHaveURL ( "/login?returnPath=%2Fadmin" ) ;
66
62
67
- // Act & Assert: Change language to Danish before verification attempts & verify language change
68
- await page . getByRole ( "button" , { name : "Select language" } ) . click ( ) ;
69
- await page . getByRole ( "menuitem" , { name : "Dansk" } ) . click ( ) ;
70
- await expect ( page . getByRole ( "button" , { name : "Vælg sprog" } ) ) . toBeVisible ( ) ;
63
+ // Act & Assert: Test malicious redirect prevention with external URL
64
+ await page . goto ( "/login?returnPath=http://hacker.com" ) ;
65
+ await expect ( page ) . toHaveURL ( "/login" ) ;
71
66
72
- // Act & Assert: Start new login for rate limiting test & verify navigation
73
- await page . getByRole ( "textbox" , { name : "E-mail" } ) . fill ( existingUser . email ) ;
74
- await page . getByRole ( "button" , { name : "Fortsæt" } ) . click ( ) ;
75
- await expect ( page ) . toHaveURL ( "/login/verify?returnPath=%2Fadmin" ) ;
76
-
77
- // Act & Assert: First failed attempt & verify error and focus reset
78
- await page . keyboard . type ( "WRONG1" ) ;
79
- await page . getByRole ( "button" , { name : "Bekræft" } ) . click ( ) ;
80
- await assertToastMessage ( context , 400 , "The code is wrong or no longer valid." ) ;
81
- await expect ( page . locator ( 'input[autocomplete="one-time-code"]' ) . first ( ) ) . toBeFocused ( ) ;
82
-
83
- // Act & Assert: Second failed attempt & verify error and focus reset
84
- await page . keyboard . type ( "WRONG2" ) ;
85
- await page . getByRole ( "button" , { name : "Bekræft" } ) . click ( ) ;
86
- await assertToastMessage ( context , 400 , "The code is wrong or no longer valid." ) ;
87
- await expect ( page . locator ( 'input[autocomplete="one-time-code"]' ) . first ( ) ) . toBeFocused ( ) ;
88
-
89
- // Act & Assert: Third failed attempt & verify error and focus reset
90
- await page . keyboard . type ( "WRONG3" ) ;
91
- await page . getByRole ( "button" , { name : "Bekræft" } ) . click ( ) ;
92
- await assertToastMessage ( context , 400 , "The code is wrong or no longer valid." ) ;
93
- await expect ( page . locator ( 'input[autocomplete="one-time-code"]' ) . first ( ) ) . toBeFocused ( ) ;
94
-
95
- // Act & Assert: Fourth failed attempt triggers rate limiting & verify forbidden error
96
- await page . keyboard . type ( "WRONG4" ) ;
97
- await page . getByRole ( "button" , { name : "Bekræft" } ) . click ( ) ;
98
- await assertToastMessage ( context , "Forbidden" , "Too many attempts, please request a new code." ) ;
99
-
100
- // Act & Assert: Navigate back to login & verify language persists after rate limiting
101
- await page . goto ( "/login" ) ;
102
- await expect ( page . getByRole ( "heading" , { name : "Hej! Velkommen tilbage" } ) ) . toBeVisible ( ) ;
103
-
104
- // Act & Assert: Change language on login page & verify update
105
- await page . getByRole ( "button" , { name : "Vælg sprog" } ) . click ( ) ;
106
- await page . getByRole ( "menuitem" , { name : "Nederlands" } ) . click ( ) ;
107
- await expect ( page . getByRole ( "heading" , { name : "Hallo! Welkom terug" } ) ) . toBeVisible ( ) ;
108
-
109
- // === NON-EXISTENT USER HANDLING ===
110
- // Act & Assert: Test login with non-existent email & verify navigation to verify page
111
- await page . goto ( "/login" ) ;
112
- const nonExistentEmail = `nonexistent.user.${ Date . now ( ) } @platformplatform.net` ;
113
- await page . getByRole ( "textbox" , { name : "E-mail" } ) . fill ( nonExistentEmail ) ;
114
- await page . getByRole ( "button" , { name : "Verder" } ) . click ( ) ;
67
+ // Act & Assert: Test browser back navigation after authenticated session
68
+ await page . getByRole ( "textbox" , { name : "Email" } ) . fill ( existingUser . email ) ;
69
+ await page . getByRole ( "button" , { name : "Continue" } ) . click ( ) ;
115
70
await expect ( page ) . toHaveURL ( "/login/verify" ) ;
116
- await expect ( page . getByRole ( "heading" , { name : "Voer je verificatiecode in" } ) ) . toBeVisible ( ) ;
117
-
118
- // Act & Assert: Verify code fails for non-existent user & verify error
119
- await page . locator ( 'input[autocomplete="one-time-code"]' ) . first ( ) . focus ( ) ;
71
+ await expect ( page . locator ( 'input[autocomplete="one-time-code"]' ) . first ( ) ) . toBeFocused ( ) ;
120
72
await page . keyboard . type ( getVerificationCode ( ) ) ;
121
- await page . getByRole ( "button" , { name : "Verifiëren" } ) . click ( ) ;
122
- await assertToastMessage ( context , 400 , "The code is wrong or no longer valid." ) ;
73
+ await expect ( page . getByRole ( "button" , { name : "Verify" } ) ) . toBeEnabled ( ) ;
74
+ await page . getByRole ( "button" , { name : "Verify" } ) . click ( ) ;
75
+ await expect ( page ) . toHaveURL ( "/admin" ) ;
123
76
124
- // === RETURN PATH VALIDATION ===
125
- // Act & Assert: Go directly to login (rate limiting already logged us out) & verify we're at login
126
- await page . goto ( "/login" ) ;
127
- await expect ( page . getByRole ( "heading" , { name : "Hallo! Welkom terug" } ) ) . toBeVisible ( ) ;
128
77
} ) ;
129
78
130
79
test ( "should handle viewport responsiveness and resend functionality" , async ( { page } ) => {
0 commit comments