# Instructions - Following Playwright test failed. - Explain why, be concise, respect Playwright best practices. - Provide a snippet of code with the fix, if possible. # Test info - Name: src/manager/tests/e2e/booking/booking-edit.spec.ts >> should reschedule the cancellation of an active booking from a custom date to immediately - Location: src/manager/tests/e2e/booking/booking-edit.spec.ts:33:7 # Error details ``` Test timeout of 60000ms exceeded. ``` ``` Error: locator.waitFor: Test timeout of 60000ms exceeded. Call log: - waiting for locator('.vue-notification-wrapper').filter({ hasText: 'Reschedule successful' }) to be visible ``` # Page snapshot ```yaml - generic [active] [ref=e1]: - generic [ref=e6]: - banner [ref=e7]: - generic [ref=e8]: - button [ref=e9] [cursor=pointer]: - generic [ref=e11]: 󰍜 - link [ref=e12] [cursor=pointer]: - /url: / - button "AS" [ref=e14] [cursor=pointer]: - generic [ref=e18]: AS - generic: - text: 󰗊 󰅀 - text: 󰷖 󰍃 - navigation [ref=e19]: - list [ref=e21]: - generic [ref=e23]: Dashboard - link "Tasks" [ref=e24] [cursor=pointer]: - /url: /tasks - img [ref=e27] - generic [ref=e30]: Tasks - link "Facility maps" [ref=e31] [cursor=pointer]: - /url: /facility-map - generic [ref=e33]: 󰧾 - generic [ref=e35]: Facility maps - link "Analytics" [ref=e36] [cursor=pointer]: - /url: /dashboard - generic [ref=e38]: 󱖶 - generic [ref=e40]: Analytics - generic [ref=e42]: Sales - link "Bookings" [ref=e43] [cursor=pointer]: - /url: /bookings - generic [ref=e45]: 󰇡 - generic [ref=e47]: Bookings - link "Customers" [ref=e48] [cursor=pointer]: - /url: /customers - generic [ref=e50]: 󰀏 - generic [ref=e52]: Customers - link "Invoices" [ref=e53] [cursor=pointer]: - /url: /invoices - generic [ref=e55]: 󰷉 - generic [ref=e57]: Invoices - link "Credit notes" [ref=e58] [cursor=pointer]: - /url: /credit-notes - img [ref=e61] - generic [ref=e64]: Credit notes - link "Units" [ref=e65] [cursor=pointer]: - /url: /units - generic [ref=e67]: 󰍀 - generic [ref=e69]: Units - generic [ref=e71]: Site Management - link "Locations" [ref=e72] [cursor=pointer]: - /url: /locations - generic [ref=e74]: 󰟙 - generic [ref=e76]: Locations - link "Unit types" [ref=e77] [cursor=pointer]: - /url: /unit-types - generic [ref=e79]: 󰆧 - generic [ref=e81]: Unit types - link "Protection Plans" [ref=e82] [cursor=pointer]: - /url: /insurances - generic [ref=e84]: 󰳌 - generic [ref=e86]: Protection Plans - link "Deposits" [ref=e87] [cursor=pointer]: - /url: /deposits - generic [ref=e89]: 󱙆 - generic [ref=e91]: Deposits - link "Products" [ref=e92] [cursor=pointer]: - /url: /products - generic [ref=e94]: 󰄑 - generic [ref=e96]: Products - link "Discounts" [ref=e97] [cursor=pointer]: - /url: /discounts - generic [ref=e99]: 󰓼 - generic [ref=e101]: Discounts - generic [ref=e102]: - option "Emails" [ref=e103] [cursor=pointer]: - generic [ref=e105]: 󰻨 - generic [ref=e107]: Emails - generic [ref=e109]: 󰅀 - text: 󱡰 󰁥 - generic [ref=e111]: Admin - link "Integrations" [ref=e112] [cursor=pointer]: - /url: /connected-apps - generic [ref=e114]: 󱘖 - generic [ref=e116]: Integrations - link "User & Roles" [ref=e117] [cursor=pointer]: - /url: /users - generic [ref=e119]: 󰭘 - generic [ref=e121]: User & Roles - generic [ref=e122]: - option "Booking Portal" [ref=e123] [cursor=pointer]: - generic [ref=e125]: 󱃁 - generic [ref=e127]: Booking Portal - generic [ref=e129]: 󰅀 - text: 󰖟 󰟙 - generic [ref=e130]: - option "JaneAI" [ref=e131] [cursor=pointer]: - generic [ref=e133]: 󱙺 - generic [ref=e135]: JaneAI - generic [ref=e137]: 󰅀 - text: 󱜹 - generic [ref=e139]: Feedback - link "Voting Portal" [ref=e140] [cursor=pointer]: - /url: /voting-portal - generic [ref=e142]: 󰔔 - generic [ref=e144]: Voting Portal - main [ref=e145]: - generic [ref=e146]: - generic [ref=e149]: - link [ref=e151] [cursor=pointer]: - /url: /bookings - generic [ref=e153]: 󰁍 - generic [ref=e156]: - generic [ref=e157]: Bookings - generic [ref=e158]: - heading "Booking 1747-8686-73" [level=1] [ref=e159]: - generic [ref=e160]: Booking 1747-8686-73 - generic [ref=e164]: Cancelled - generic [ref=e167]: - generic [ref=e168]: - generic [ref=e170]: - heading "General" [level=3] [ref=e174] - table [ref=e177]: - rowgroup [ref=e178]: - row "Customer Jonni Snowi" [ref=e179]: - rowheader "Customer" [ref=e180] - cell "Jonni Snowi" [ref=e181]: - link "Jonni Snowi" [ref=e184] [cursor=pointer]: - /url: /customers/3000300030 - generic [ref=e186]: Jonni Snowi - row "Location Vienna South" [ref=e187]: - rowheader "Location" [ref=e188] - cell "Vienna South" [ref=e189]: - link "Vienna South" [ref=e192] [cursor=pointer]: - /url: /locations/561465857 - generic [ref=e194]: Vienna South - row "Created at 9 Apr 2026" [ref=e195]: - rowheader "Created at" [ref=e196] - cell "9 Apr 2026" [ref=e197]: - generic [ref=e199]: 9 Apr 2026 - row "Move-in 9 Apr 2026" [ref=e200]: - rowheader "Move-in" [ref=e201] - cell "9 Apr 2026" [ref=e202]: - generic [ref=e204]: 9 Apr 2026 - row "Move-out 9 Apr 2026" [ref=e205]: - rowheader "Move-out" [ref=e206] - cell "9 Apr 2026" [ref=e207]: - generic [ref=e209]: 9 Apr 2026 - row "Cancelled at 9 Apr 2026, 10:20" [ref=e210]: - rowheader "Cancelled at" [ref=e211] - cell "9 Apr 2026, 10:20" [ref=e212]: - generic [ref=e214]: 9 Apr 2026, 10:20 - row "Deposit excl. VAT -" [ref=e215]: - rowheader "Deposit excl. VAT" [ref=e216] - cell "-" [ref=e217]: - generic [ref=e219]: "-" - row "Discount Cyber Monday 15% For 3 Months" [ref=e220]: - rowheader "Discount" [ref=e221] - cell "Cyber Monday 15% For 3 Months" [ref=e222]: - generic [ref=e224]: Cyber Monday 15% For 3 Months - row "Contract -" [ref=e225]: - rowheader "Contract" [ref=e226] - cell "-" [ref=e227]: - generic [ref=e229]: "-" - generic [ref=e230]: - generic [ref=e231]: - heading "Billing" [level=3] [ref=e235] - table [ref=e238]: - rowgroup [ref=e239]: - row "Booking Plan Short term (26 weeks)" [ref=e240]: - rowheader "Booking Plan" [ref=e241] - cell "Short term (26 weeks)" [ref=e242]: - generic [ref=e244]: Short term (26 weeks) - row "Current period 9 Apr - 8 Oct 2026" [ref=e245]: - rowheader "Current period" [ref=e246] - cell "9 Apr - 8 Oct 2026" [ref=e247]: - generic [ref=e249]: 9 Apr - 8 Oct 2026 - row "Amount excl. VAT €4,862.00" [ref=e250]: - rowheader "Amount excl. VAT" [ref=e251] - cell "€4,862.00" [ref=e252]: - generic [ref=e254]: €4,862.00 - row "Price adjustment -" [ref=e255]: - rowheader "Price adjustment" [ref=e256] - cell "-" [ref=e257]: - generic [ref=e259]: "-" - row "Next invoice -" [ref=e260]: - rowheader "Next invoice" [ref=e261] - cell "-" [ref=e262]: - generic [ref=e264]: "-" - row "Payment method -" [ref=e265]: - rowheader "Payment method" [ref=e266] - cell "-" [ref=e267]: - generic [ref=e269]: "-" - row "Payment option Automatic payment through Stripe" [ref=e270]: - rowheader "Payment option" [ref=e271] - cell "Automatic payment through Stripe" [ref=e272]: - generic [ref=e274]: Automatic payment through Stripe - generic [ref=e275]: - generic [ref=e277]: - heading "Notes" [level=3] [ref=e279] - link [ref=e281] [cursor=pointer]: - /url: /bookings/1747868673/edit/notes - generic [ref=e283]: 󰲶 - table [ref=e286]: - rowgroup [ref=e287]: - row "Note -" [ref=e288]: - rowheader "Note" [ref=e289] - cell "-" [ref=e290]: - generic [ref=e292]: "-" - generic [ref=e295]: - heading "Items" [level=3] [ref=e299] - generic [ref=e302]: - generic [ref=e303]: - generic [ref=e304]: - link "VS 7 sqm Unit" [ref=e305] [cursor=pointer]: - /url: /unit-types/483424269 - generic [ref=e307]: VS 7 sqm Unit - text: / - 'link "Unit 60 #370" [ref=e308] [cursor=pointer]': - /url: /units/397110095 - generic [ref=e310]: "Unit 60 #370" - generic [ref=e311]: €4,420.00 - generic [ref=e312]: - link "VS - Insurance weekly - 20" [ref=e313] [cursor=pointer]: - /url: /insurances/1715162904 - generic [ref=e315]: VS - Insurance weekly - 20 - generic [ref=e316]: €442.00 - generic [ref=e317]: - generic [ref=e318]: - strong [ref=e319]: Total excl. VAT - strong [ref=e320]: €4,862.00 - generic [ref=e321]: - generic [ref=e322]: VAT - generic [ref=e323]: €972.40 - generic [ref=e324]: - generic [ref=e325]: Total incl. VAT - generic [ref=e326]: €5,834.40 - generic [ref=e329]: - heading "Invoices" [level=3] [ref=e333] - generic [ref=e338]: - generic [ref=e340]: - generic [ref=e342]: - button "Select all" [ref=e350] [cursor=pointer]: - generic [ref=e352]: 󰄬 - generic [ref=e353]: Select all - generic [ref=e354]: - button "Mark as paid" [disabled] [ref=e357]: - generic [ref=e359]: 󰗡 - generic [ref=e360]: Mark as paid - button "SEPA XML actions" [disabled] [ref=e363]: - generic [ref=e365]: 󱨉 - generic [ref=e366]: SEPA XML actions - generic: 󰗡 󰅚 󰗖 - generic [ref=e369]: - button [ref=e370] [cursor=pointer]: - generic [ref=e372]: 󱒇 - generic: 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 - table [ref=e374]: - rowgroup [ref=e375]: - row "Number Status Payment option Due date Unit Total (incl. VAT) Amount due Issue date Actions" [ref=e376]: - columnheader [ref=e377]: - generic [ref=e378]: - checkbox [ref=e379] - generic [ref=e381] [cursor=pointer]: 󰄱 - columnheader "Number" [ref=e382]: - button "Number" [ref=e383] [cursor=pointer]: - generic [ref=e385]: Number - generic [ref=e388]: 󰁝 - columnheader "Status" [ref=e389]: - button "Status" [ref=e390] [cursor=pointer]: - generic [ref=e392]: Status - generic [ref=e395]: 󰁝 - columnheader "Payment option" [ref=e396]: - button "Payment option" [ref=e397] [cursor=pointer]: - generic [ref=e399]: Payment option - generic [ref=e402]: 󰁝 - columnheader "Due date" [ref=e403]: - button "Due date" [ref=e404] [cursor=pointer]: - generic [ref=e406]: Due date - generic [ref=e409]: 󰁝 - columnheader "Unit" [ref=e410]: - button "Unit" [ref=e411] [cursor=pointer]: - generic [ref=e413]: Unit - generic [ref=e416]: 󰁝 - columnheader "Total (incl. VAT)" [ref=e417]: - button "Total (incl. VAT)" [ref=e418] [cursor=pointer]: - generic [ref=e419]: - generic [ref=e420]: Total (incl. VAT) - generic [ref=e422]: 󰋽 - generic [ref=e425]: 󰁝 - columnheader "Amount due" [ref=e426]: - button "Amount due" [ref=e427] [cursor=pointer]: - generic [ref=e429]: Amount due - generic [ref=e432]: 󰁝 - columnheader "Issue date" [ref=e433]: - button "Issue date" [ref=e434] [cursor=pointer]: - generic [ref=e436]: Issue date - generic [ref=e439]: 󰁝 - columnheader "Actions" [ref=e440]: - generic [ref=e443]: Actions - row [ref=e444]: - columnheader [ref=e445] - rowgroup [ref=e446]: - 'row "INV-1920154 Open Manual 11 Apr 2026 Unit 60 #370 €5,038.80 €5,038.80 9 Apr 2026" [ref=e447]': - cell [ref=e448]: - generic [ref=e449]: - checkbox [ref=e450] - generic [ref=e452] [cursor=pointer]: 󰄱 - cell "INV-1920154" [ref=e453]: - link [ref=e454] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e455]: INV-1920154 - cell "Open" [ref=e456]: - link [ref=e457] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e461]: Open - cell "Manual" [ref=e462]: - link [ref=e463] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e464]: Manual - cell "11 Apr 2026" [ref=e465]: - link [ref=e466] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e467]: 11 Apr 2026 - 'cell "Unit 60 #370" [ref=e468]': - link [ref=e469] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e470]: "Unit 60 #370" - cell "€5,038.80" [ref=e471]: - link [ref=e472] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e473]: €5,038.80 - cell "€5,038.80" [ref=e474]: - link [ref=e475] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e476]: €5,038.80 - cell "9 Apr 2026" [ref=e477]: - link [ref=e478] [cursor=pointer]: - /url: /invoices/259086392 - generic [ref=e479]: 9 Apr 2026 - cell [ref=e480]: - button [ref=e483] [cursor=pointer]: - generic [ref=e485]: 󰇘 - generic [ref=e488]: - generic [ref=e489]: - generic [ref=e490]: "Items per page:" - combobox [ref=e493] [cursor=pointer]: - generic [ref=e495]: - generic [ref=e497]: "10" - combobox "Items per page:": "10" - generic [ref=e499]: 󰍝 - generic [ref=e500]: 1-1 of 1 - generic [ref=e501]: - button [disabled]: - generic: - generic: 󰘀 - button [disabled]: - generic: - generic: 󰅁 - button [disabled]: - generic: - generic: 󰅂 - button [disabled]: - generic: - generic: 󰘁 - generic [ref=e504]: - heading "Payments" [level=3] [ref=e508] - generic [ref=e513]: - table [ref=e517]: - rowgroup [ref=e518]: - row "Total Status Invoice no. Date Payment method" [ref=e519]: - columnheader "Total" [ref=e520]: - button "Total" [ref=e521] [cursor=pointer]: - generic [ref=e523]: Total - generic [ref=e526]: 󰁝 - columnheader "Status" [ref=e527]: - button "Status" [ref=e528] [cursor=pointer]: - generic [ref=e530]: Status - generic [ref=e533]: 󰁝 - columnheader "Invoice no." [ref=e534]: - button "Invoice no." [ref=e535] [cursor=pointer]: - generic [ref=e537]: Invoice no. - generic [ref=e540]: 󰁝 - columnheader "Date" [ref=e541]: - button "Date" [ref=e542] [cursor=pointer]: - generic [ref=e544]: Date - generic [ref=e547]: 󰁝 - columnheader "Payment method" [ref=e548]: - button "Payment method" [ref=e549] [cursor=pointer]: - generic [ref=e551]: Payment method - generic [ref=e554]: 󰁝 - row [ref=e555]: - columnheader [ref=e556] - rowgroup [ref=e557]: - row "€5,038.80 Not paid yet INV-1920154 9 Apr 2026" [ref=e558]: - cell "€5,038.80" [ref=e559]: - generic [ref=e560]: €5,038.80 - cell "Not paid yet" [ref=e561]: - generic [ref=e565]: Not paid yet - cell "INV-1920154" [ref=e566]: - generic [ref=e567]: INV-1920154 - cell "9 Apr 2026" [ref=e568]: - generic [ref=e569]: 9 Apr 2026 - cell [ref=e570] - generic [ref=e573]: - generic [ref=e574]: - generic [ref=e575]: "Items per page:" - combobox [ref=e578] [cursor=pointer]: - generic [ref=e580]: - generic [ref=e582]: "10" - combobox "Items per page:": "10" - generic [ref=e584]: 󰍝 - generic [ref=e585]: 1-1 of 1 - generic [ref=e586]: - button [disabled]: - generic: - generic: 󰘀 - button [disabled]: - generic: - generic: 󰅁 - button [disabled]: - generic: - generic: 󰅂 - button [disabled]: - generic: - generic: 󰘁 - contentinfo [ref=e587]: - generic [ref=e588]: - generic [ref=e589]: - text: Kinnovis GmbH - generic [ref=e590]: 󰗦 - text: "2026" - generic [ref=e591]: v2026.04.08 - generic: - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip ``` # Test source ```ts 1 | import { BaseDialog } from '@/manager/shared/base/BaseDialog'; 2 | import { BookingCancelRadioGroup } from '@/manager/modules/booking/components/BookingCancelRadioGroup'; 3 | import { IBookingCancelData } from '@/manager/modules/booking/types/booking-types'; 4 | import { getSnackbarHost } from '@/manager/shared/utils/host-utils'; 5 | import { Locator, Page } from '@playwright/test'; 6 | 7 | export class BookingCancelDialog extends BaseDialog { 8 | readonly radioGroup = new BookingCancelRadioGroup(this.main); 9 | 10 | constructor( 11 | host: Page, 12 | readonly reschedule = false 13 | ) { 14 | super(host, 'booking-cancel-dialog'); 15 | } 16 | 17 | async cancel(data: IBookingCancelData): Promise { 18 | await this.fill(data); 19 | await this.submit(); 20 | } 21 | 22 | fill(data: IBookingCancelData): Promise { 23 | return this.radioGroup.fill(data); 24 | } 25 | 26 | async submit(): Promise { > 27 | await Promise.all([this.getSnackbar().waitFor(), this.submitButton.click()]); | ^ Error: locator.waitFor: Test timeout of 60000ms exceeded. 28 | } 29 | 30 | getSnackbar(): Locator { 31 | return getSnackbarHost(this.host, this.reschedule ? 'Reschedule successful' : 'Booking cancelled successfully'); 32 | } 33 | } 34 | ```