1- import { expect , test } from '@playwright/test' ;
2- import { goToNewPad , goToPad } from '../helper/padHelper' ;
1+ import { expect , test , Page } from '@playwright/test' ;
2+ import { randomUUID } from 'node:crypto' ;
3+ import { goToPad } from '../helper/padHelper' ;
34import { showSettings } from '../helper/settingsHelper' ;
45
6+ // goToNewPad() in the shared helper auto-dismisses the deletion-token modal
7+ // so unrelated tests aren't blocked. These tests need the modal, so they
8+ // navigate inline without the helper.
9+ const newPadKeepingModal = async ( page : Page ) => {
10+ const padId = `FRONTEND_TESTS${ randomUUID ( ) } ` ;
11+ await page . goto ( `http://localhost:9001/p/${ padId } ` ) ;
12+ await page . waitForSelector ( 'iframe[name="ace_outer"]' ) ;
13+ await page . waitForSelector ( '#editorcontainer.initialized' ) ;
14+ return padId ;
15+ } ;
16+
517test . describe ( 'pad deletion token' , ( ) => {
618 test . beforeEach ( async ( { context} ) => {
719 await context . clearCookies ( ) ;
820 } ) ;
921
1022 test ( 'creator sees a token modal exactly once and can dismiss it' , async ( { page} ) => {
11- await goToNewPad ( page ) ;
23+ await newPadKeepingModal ( page ) ;
1224 const modal = page . locator ( '#deletiontoken-modal' ) ;
1325 await expect ( modal ) . toBeVisible ( ) ;
1426
@@ -24,7 +36,7 @@ test.describe('pad deletion token', () => {
2436 } ) ;
2537
2638 test ( 'second device can delete using the captured token' , async ( { page, browser} ) => {
27- const padId = await goToNewPad ( page ) ;
39+ const padId = await newPadKeepingModal ( page ) ;
2840 const token = await page . locator ( '#deletiontoken-value' ) . inputValue ( ) ;
2941 await page . locator ( '#deletiontoken-ack' ) . click ( ) ;
3042
@@ -45,7 +57,7 @@ test.describe('pad deletion token', () => {
4557 } ) ;
4658
4759 test ( 'wrong token keeps the pad alive and surfaces a shout' , async ( { page, browser} ) => {
48- const padId = await goToNewPad ( page ) ;
60+ const padId = await newPadKeepingModal ( page ) ;
4961 await page . locator ( '#deletiontoken-ack' ) . click ( ) ;
5062
5163 const context2 = await browser . newContext ( ) ;
@@ -55,7 +67,6 @@ test.describe('pad deletion token', () => {
5567
5668 await page2 . locator ( '#delete-pad-with-token > summary' ) . click ( ) ;
5769 await page2 . locator ( '#delete-pad-token-input' ) . fill ( 'bogus-token-value' ) ;
58- // Accept the confirm() dialog, then capture the alert() the shout triggers.
5970 const dialogs : string [ ] = [ ] ;
6071 page2 . on ( 'dialog' , async ( d ) => {
6172 dialogs . push ( d . message ( ) ) ;
@@ -66,7 +77,6 @@ test.describe('pad deletion token', () => {
6677 await expect . poll ( ( ) => dialogs . length , { timeout : 10000 } ) . toBeGreaterThanOrEqual ( 2 ) ;
6778 expect ( dialogs . some ( ( m ) => / n o t t h e c r e a t o r | c a n n o t d e l e t e / i. test ( m ) ) ) . toBe ( true ) ;
6879
69- // Pad must still exist for the original creator.
7080 await page . reload ( ) ;
7181 await expect ( page . locator ( '#editorcontainer.initialized' ) ) . toBeVisible ( ) ;
7282 await context2 . close ( ) ;
0 commit comments