1+ /**
2+ * Bug Reporter modal tests
3+ * Covers the footer-triggered bug report dialog and minimized state behavior.
4+ */
5+
6+ import { BasePage , expect , test } from '@test/e2e/helpers'
7+
8+ const fixturePath = '/testing/bug-reporter'
9+ const triggerSelector = '#bugReporterFixtureTrigger'
10+ const dialogSelector = '#bugReporterFixtureDialog'
11+ const formSelector = '#bugReporterFixtureForm'
12+ const cancelButtonSelector = '#bugReporterFixtureCancel'
13+ const minimizeButtonSelector = '#bugReporterFixtureMinimize'
14+ const minimizedBarSelector = '#bugReporterFixtureMinimizedBar'
15+ const restoreButtonSelector = '#bugReporterFixtureRestore'
16+ const minimizedCloseButtonSelector = '#bugReporterFixtureMinimizedClose'
17+ const nameInputSelector = `${ formSelector } input[name="name"]`
18+ const emailInputSelector = `${ formSelector } input[name="email"]`
19+ const messageSelector = `${ formSelector } textarea[name="message"]`
20+
21+ const openBugReporter = async ( page : BasePage ) => {
22+ const trigger = page . locator ( triggerSelector )
23+ await expect ( trigger ) . toBeVisible ( )
24+ await trigger . click ( )
25+ await expect ( page . locator ( dialogSelector ) ) . toHaveAttribute ( 'open' , '' )
26+ await expect ( page . locator ( nameInputSelector ) ) . toBeVisible ( )
27+ }
28+
29+ test . describe ( 'Bug Reporter Modal' , ( ) => {
30+ test ( '@ready opens from the fixture trigger with labeled fields' , async ( { page : playwrightPage } ) => {
31+ const page = await BasePage . init ( playwrightPage )
32+ await page . goto ( fixturePath , { skipCookieDismiss : true } )
33+
34+ await openBugReporter ( page )
35+
36+ const nameInput = page . locator ( nameInputSelector )
37+ const emailInput = page . locator ( emailInputSelector )
38+ const messageInput = page . locator ( messageSelector )
39+
40+ await expect ( page . locator ( dialogSelector ) ) . toHaveAttribute ( 'open' , '' )
41+ await expect ( playwrightPage . getByRole ( 'heading' , { name : 'Report a bug' } ) ) . toBeVisible ( )
42+ await expect ( nameInput ) . toBeFocused ( )
43+ await expect ( nameInput ) . toHaveAccessibleName ( 'Name' )
44+ await expect ( emailInput ) . toHaveAccessibleName ( 'Email' )
45+ await expect ( messageInput ) . toHaveAccessibleName ( 'Description' )
46+ } )
47+
48+ test ( '@ready cancel closes the modal and clears entered form state' , async ( { page : playwrightPage } ) => {
49+ const page = await BasePage . init ( playwrightPage )
50+ await page . goto ( fixturePath , { skipCookieDismiss : true } )
51+
52+ await openBugReporter ( page )
53+
54+ const nameInput = page . locator ( nameInputSelector )
55+ const emailInput = page . locator ( emailInputSelector )
56+ const messageInput = page . locator ( messageSelector )
57+
58+ await nameInput . fill ( 'Test User' )
59+ await emailInput . fill ( 'test@example.com' )
60+ await messageInput . fill ( 'Modal reset check' )
61+
62+ await page . locator ( cancelButtonSelector ) . click ( )
63+ await expect ( page . locator ( dialogSelector ) ) . not . toHaveAttribute ( 'open' , '' )
64+
65+ await openBugReporter ( page )
66+
67+ await expect ( nameInput ) . toHaveValue ( '' )
68+ await expect ( emailInput ) . toHaveValue ( '' )
69+ await expect ( messageInput ) . toHaveValue ( '' )
70+ } )
71+
72+ test ( '@ready minimize preserves draft state and minimized close clears it' , async ( { page : playwrightPage } ) => {
73+ const page = await BasePage . init ( playwrightPage )
74+ await page . goto ( fixturePath , { skipCookieDismiss : true } )
75+
76+ await openBugReporter ( page )
77+
78+ const messageInput = page . locator ( messageSelector )
79+ await messageInput . fill ( 'Bug details in progress' )
80+
81+ await page . locator ( minimizeButtonSelector ) . click ( )
82+ await expect ( page . locator ( dialogSelector ) ) . not . toHaveAttribute ( 'open' , '' )
83+ await expect ( page . locator ( minimizedBarSelector ) ) . toBeVisible ( )
84+
85+ await page . locator ( restoreButtonSelector ) . click ( )
86+ await expect ( page . locator ( dialogSelector ) ) . toHaveAttribute ( 'open' , '' )
87+ await expect ( messageInput ) . toHaveValue ( 'Bug details in progress' )
88+
89+ await page . locator ( minimizeButtonSelector ) . click ( )
90+ await expect ( page . locator ( minimizedBarSelector ) ) . toBeVisible ( )
91+ await page . locator ( minimizedCloseButtonSelector ) . click ( )
92+ await expect ( page . locator ( minimizedBarSelector ) ) . toBeHidden ( )
93+
94+ await openBugReporter ( page )
95+ await expect ( messageInput ) . toHaveValue ( '' )
96+ } )
97+ } )
0 commit comments