# 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/discount/discount-create.spec.ts >> creates a discount reusing a code in a different location
- Location: src/manager/tests/e2e/discount/discount-create.spec.ts:220:5

# Error details

```
Test timeout of 90000ms exceeded.
```

```
Error: page.waitForURL: Test timeout of 90000ms exceeded.
=========================== logs ===========================
waiting for navigation until "load"
============================================================
```

# Page snapshot

```yaml
- generic [active] [ref=e1]:
  - generic [ref=e6]:
    - navigation [ref=e7]:
      - generic [ref=e9]:
        - link [ref=e10] [cursor=pointer]:
          - /url: /
        - generic [ref=e11]:
          - generic [ref=e12]: KINNOVIS
          - generic [ref=e13]: Manager
        - button [ref=e15] [cursor=pointer]
      - list [ref=e19]:
        - generic [ref=e21]: Dashboard
        - link "Tasks" [ref=e23] [cursor=pointer]:
          - /url: /tasks
        - link "Facility maps" [ref=e30] [cursor=pointer]:
          - /url: /facility-map
          - generic [ref=e31]: 󰧾
        - link "Analytics" [ref=e35] [cursor=pointer]:
          - /url: /dashboard
          - generic [ref=e36]: 󱖶
        - generic [ref=e40]: Sales
        - link "Bookings" [ref=e42] [cursor=pointer]:
          - /url: /bookings
          - generic [ref=e43]: 󰇡
        - link "Customers" [ref=e47] [cursor=pointer]:
          - /url: /customers
          - generic [ref=e48]: 󰀏
        - link "Invoices" [ref=e52] [cursor=pointer]:
          - /url: /invoices
          - generic [ref=e53]: 󰷉
        - link "Credit notes" [ref=e57] [cursor=pointer]:
          - /url: /credit-notes
        - link "Units" [ref=e64] [cursor=pointer]:
          - /url: /units
          - generic [ref=e65]: 󰍀
        - generic [ref=e69]: Site management
        - link "Locations" [ref=e71] [cursor=pointer]:
          - /url: /locations
          - generic [ref=e72]: 󰟙
        - link "Unit types" [ref=e76] [cursor=pointer]:
          - /url: /unit-types
          - generic [ref=e77]: 󰆧
        - link "Protection Plans" [ref=e81] [cursor=pointer]:
          - /url: /insurances
          - generic [ref=e82]: 󰳌
        - link "Deposits" [ref=e86] [cursor=pointer]:
          - /url: /deposits
          - generic [ref=e87]: 󱙆
        - link "Products" [ref=e91] [cursor=pointer]:
          - /url: /products
          - generic [ref=e92]: 󰄑
        - link "Discounts" [ref=e96] [cursor=pointer]:
          - /url: /discounts
          - generic [ref=e97]: 󰓼
        - generic [ref=e101]:
          - option "Emails" [ref=e102] [cursor=pointer]:
            - generic [ref=e103]: 󰻨
            - generic [ref=e107]: 󰅀
          - text: 󱡰 󰁥
        - generic [ref=e111]: Admin
        - link "Integrations" [ref=e113] [cursor=pointer]:
          - /url: /connected-apps
          - generic [ref=e114]: 󱘖
        - link "User & Roles" [ref=e118] [cursor=pointer]:
          - /url: /users
          - generic [ref=e119]: 󰭘
        - generic [ref=e123]:
          - option "Booking Portal" [ref=e124] [cursor=pointer]:
            - generic [ref=e125]: 󱃁
            - generic [ref=e129]: 󰅀
          - text: 󰖟 󰟙
        - generic [ref=e133]:
          - option "JaneAI" [ref=e134] [cursor=pointer]:
            - generic [ref=e135]: 󱙺
            - generic [ref=e139]: 󰅀
          - text: 󱜹
        - generic [ref=e143]: Feedback
        - link "Voting Portal" [ref=e145] [cursor=pointer]:
          - /url: /voting-portal
          - generic [ref=e146]: 󰔔
      - generic [ref=e152]:
        - button "AS Andreas Stadler andreas.stadler@storeroom.at" [ref=e155] [cursor=pointer]:
          - generic [ref=e156]: AS
          - generic [ref=e159]:
            - generic [ref=e160]: Andreas Stadler
            - generic "andreas.stadler@storeroom.at" [ref=e161]
          - generic [ref=e162]: 󰇙
          - generic: 󰗊 󰅀 󰷖 󰍃
        - button [ref=e163] [cursor=pointer]:
          - generic [ref=e164]: 󰋽
    - main [ref=e166]:
      - generic [ref=e168]:
        - generic [ref=e170]:
          - generic [ref=e171]: Discounts
          - link "Create discount" [ref=e174] [cursor=pointer]:
            - /url: /discounts/create
            - generic [ref=e175]: 󰐕
        - generic [ref=e179]:
          - generic [ref=e181]:
            - button [ref=e182] [cursor=pointer]:
              - generic [ref=e183]:
                - heading "Filters" [level=3] [ref=e186]
                - generic [ref=e188]:
                  - button [ref=e190]:
                    - generic [ref=e191]:
                      - generic [ref=e192]: 󰑐
                      - text: Reset filters
                  - generic [ref=e194]: 󰅀
            - generic [ref=e202]:
              - generic [ref=e207]:
                - generic [ref=e208]: 󰍉
                - generic [ref=e210]:
                  - generic: Search
                  - textbox "Search" [ref=e211]
                - text: 󰅙
              - combobox [ref=e215]:
                - generic [ref=e216]:
                  - generic: Location
                  - combobox "Location" [ref=e218]
                - button [ref=e220] [cursor=pointer]: 󰍝
          - generic [ref=e222]:
            - table [ref=e226]:
              - rowgroup [ref=e227]:
                - row [ref=e228]:
                  - columnheader [ref=e229]:
                    - button "Name" [ref=e230] [cursor=pointer]:
                      - generic [ref=e233]: 󰁝
                  - columnheader [ref=e236]:
                    - button "Location" [ref=e237] [cursor=pointer]:
                      - generic [ref=e240]: 󰁝
                  - columnheader "Terms" [ref=e243]
                  - columnheader "Codes" [ref=e247]
                  - columnheader "Redemptions" [ref=e251]
                  - columnheader "Redeemable till" [ref=e255]
                - row [ref=e259]:
                  - columnheader [ref=e260]
              - rowgroup [ref=e261]:
                - row [ref=e262]:
                  - cell [ref=e263]:
                    - link "Sleek Sale xYWcF2" [ref=e264] [cursor=pointer]:
                      - /url: /discounts/71728323
                  - cell [ref=e266]:
                    - link "City 1030" [ref=e267] [cursor=pointer]:
                      - /url: /discounts/71728323
                  - cell [ref=e269]:
                    - link "48% off once" [ref=e270] [cursor=pointer]:
                      - /url: /discounts/71728323
                  - cell [ref=e272]:
                    - link "REUSEDLOCATION" [ref=e273] [cursor=pointer]:
                      - /url: /discounts/71728323
                  - cell [ref=e275]:
                    - link "0" [ref=e276] [cursor=pointer]:
                      - /url: /discounts/71728323
                  - cell [ref=e278]:
                    - link "-" [ref=e279] [cursor=pointer]:
                      - /url: /discounts/71728323
                - row [ref=e281]:
                  - cell [ref=e282]:
                    - link "Generic Sale kK2gwX" [ref=e283] [cursor=pointer]:
                      - /url: /discounts/1943760209
                  - cell [ref=e285]:
                    - link "Storeroom Innsbruck" [ref=e286] [cursor=pointer]:
                      - /url: /discounts/1943760209
                  - cell [ref=e288]:
                    - link "16% off once" [ref=e289] [cursor=pointer]:
                      - /url: /discounts/1943760209
                  - cell [ref=e291]:
                    - link "DUPECODE" [ref=e292] [cursor=pointer]:
                      - /url: /discounts/1943760209
                  - cell [ref=e294]:
                    - link "0" [ref=e295] [cursor=pointer]:
                      - /url: /discounts/1943760209
                  - cell [ref=e297]:
                    - link "-" [ref=e298] [cursor=pointer]:
                      - /url: /discounts/1943760209
                - row [ref=e300]:
                  - cell [ref=e301]:
                    - link "Rustic Sale CaTEvV" [ref=e302] [cursor=pointer]:
                      - /url: /discounts/547184045
                  - cell [ref=e304]:
                    - link "Vienna South" [ref=e305] [cursor=pointer]:
                      - /url: /discounts/547184045
                  - cell [ref=e307]:
                    - link "19% off once" [ref=e308] [cursor=pointer]:
                      - /url: /discounts/547184045
                  - cell [ref=e310]:
                    - link "-" [ref=e311] [cursor=pointer]:
                      - /url: /discounts/547184045
                  - cell [ref=e313]:
                    - link "0" [ref=e314] [cursor=pointer]:
                      - /url: /discounts/547184045
                  - cell [ref=e316]:
                    - link "-" [ref=e317] [cursor=pointer]:
                      - /url: /discounts/547184045
                - row [ref=e319]:
                  - cell [ref=e320]:
                    - link "Luxurious Sale y5C7EE" [ref=e321] [cursor=pointer]:
                      - /url: /discounts/1872252479
                  - cell [ref=e323]:
                    - link "Vienna South" [ref=e324] [cursor=pointer]:
                      - /url: /discounts/1872252479
                  - cell [ref=e326]:
                    - link "4% off once" [ref=e327] [cursor=pointer]:
                      - /url: /discounts/1872252479
                  - cell [ref=e329]:
                    - link "-" [ref=e330] [cursor=pointer]:
                      - /url: /discounts/1872252479
                  - cell [ref=e332]:
                    - link "0" [ref=e333] [cursor=pointer]:
                      - /url: /discounts/1872252479
                  - cell [ref=e335]:
                    - link "-" [ref=e336] [cursor=pointer]:
                      - /url: /discounts/1872252479
                - row [ref=e338]:
                  - cell [ref=e339]:
                    - link "Unbranded Sale PVlHOp" [ref=e340] [cursor=pointer]:
                      - /url: /discounts/808599373
                  - cell [ref=e342]:
                    - link "Storeroom Innsbruck" [ref=e343] [cursor=pointer]:
                      - /url: /discounts/808599373
                  - cell [ref=e345]:
                    - link "27% off once" [ref=e346] [cursor=pointer]:
                      - /url: /discounts/808599373
                  - cell [ref=e348]:
                    - link "REUSEDPLAN" [ref=e349] [cursor=pointer]:
                      - /url: /discounts/808599373
                  - cell [ref=e351]:
                    - link "0" [ref=e352] [cursor=pointer]:
                      - /url: /discounts/808599373
                  - cell [ref=e354]:
                    - link "-" [ref=e355] [cursor=pointer]:
                      - /url: /discounts/808599373
                - row [ref=e357]:
                  - cell [ref=e358]:
                    - link "Fresh Sale UZvOBE" [ref=e359] [cursor=pointer]:
                      - /url: /discounts/1760505757
                  - cell [ref=e361]:
                    - link "Storeroom Innsbruck" [ref=e362] [cursor=pointer]:
                      - /url: /discounts/1760505757
                  - cell [ref=e364]:
                    - link "48% off once" [ref=e365] [cursor=pointer]:
                      - /url: /discounts/1760505757
                  - cell [ref=e367]:
                    - link "REUSEDLOCATION" [ref=e368] [cursor=pointer]:
                      - /url: /discounts/1760505757
                  - cell [ref=e370]:
                    - link "0" [ref=e371] [cursor=pointer]:
                      - /url: /discounts/1760505757
                  - cell [ref=e373]:
                    - link "-" [ref=e374] [cursor=pointer]:
                      - /url: /discounts/1760505757
                - row [ref=e376]:
                  - cell [ref=e377]:
                    - link "Soft Sale L0Slum" [ref=e378] [cursor=pointer]:
                      - /url: /discounts/1466376243
                  - cell [ref=e380]:
                    - link "Vienna South" [ref=e381] [cursor=pointer]:
                      - /url: /discounts/1466376243
                  - cell [ref=e383]:
                    - link "€10.00 off once" [ref=e384] [cursor=pointer]:
                      - /url: /discounts/1466376243
                  - cell [ref=e386]:
                    - link "-" [ref=e387] [cursor=pointer]:
                      - /url: /discounts/1466376243
                  - cell [ref=e389]:
                    - link "0" [ref=e390] [cursor=pointer]:
                      - /url: /discounts/1466376243
                  - cell [ref=e392]:
                    - link "-" [ref=e393] [cursor=pointer]:
                      - /url: /discounts/1466376243
                - row [ref=e395]:
                  - cell [ref=e396]:
                    - link "Fresh Sale WN977I" [ref=e397] [cursor=pointer]:
                      - /url: /discounts/2132611397
                  - cell [ref=e399]:
                    - link "Vienna South" [ref=e400] [cursor=pointer]:
                      - /url: /discounts/2132611397
                  - cell [ref=e402]:
                    - link "41% off once" [ref=e403] [cursor=pointer]:
                      - /url: /discounts/2132611397
                  - cell [ref=e405]:
                    - link "-" [ref=e406] [cursor=pointer]:
                      - /url: /discounts/2132611397
                  - cell [ref=e408]:
                    - link "0" [ref=e409] [cursor=pointer]:
                      - /url: /discounts/2132611397
                  - cell [ref=e411]:
                    - link "-" [ref=e412] [cursor=pointer]:
                      - /url: /discounts/2132611397
                - row [ref=e414]:
                  - cell [ref=e415]:
                    - link "Incredible Sale edqZ23" [ref=e416] [cursor=pointer]:
                      - /url: /discounts/951124457
                  - cell [ref=e418]:
                    - link "Storeroom Innsbruck" [ref=e419] [cursor=pointer]:
                      - /url: /discounts/951124457
                  - cell [ref=e421]:
                    - link "18% off once" [ref=e422] [cursor=pointer]:
                      - /url: /discounts/951124457
                  - cell [ref=e424]:
                    - link "REUSEDPRODUCT" [ref=e425] [cursor=pointer]:
                      - /url: /discounts/951124457
                  - cell [ref=e427]:
                    - link "0" [ref=e428] [cursor=pointer]:
                      - /url: /discounts/951124457
                  - cell [ref=e430]:
                    - link "-" [ref=e431] [cursor=pointer]:
                      - /url: /discounts/951124457
                - row [ref=e433]:
                  - cell [ref=e434]:
                    - link "Electronic Sale V3vE3e" [ref=e435] [cursor=pointer]:
                      - /url: /discounts/816673366
                  - cell [ref=e437]:
                    - link "Storeroom Innsbruck" [ref=e438] [cursor=pointer]:
                      - /url: /discounts/816673366
                  - cell [ref=e440]:
                    - link "23% off once" [ref=e441] [cursor=pointer]:
                      - /url: /discounts/816673366
                  - cell [ref=e443]:
                    - link "REUSEDPLAN" [ref=e444] [cursor=pointer]:
                      - /url: /discounts/816673366
                  - cell [ref=e446]:
                    - link "0" [ref=e447] [cursor=pointer]:
                      - /url: /discounts/816673366
                  - cell [ref=e449]:
                    - link "-" [ref=e450] [cursor=pointer]:
                      - /url: /discounts/816673366
            - generic [ref=e454]:
              - generic [ref=e455]:
                - generic [ref=e456]: "Items per page:"
                - combobox [ref=e459]:
                  - generic [ref=e461] [cursor=pointer]:
                    - generic [ref=e462]: "10"
                    - combobox "Items per page:": "10"
                  - generic [ref=e464]: 󰍝
              - generic [ref=e466]: 1-10 of 71
              - generic [ref=e467]:
                - button [disabled]:
                  - generic: 󰘀
                - button [disabled]:
                  - generic: 󰅁
                - button [ref=e468] [cursor=pointer]:
                  - generic [ref=e469]: 󰅂
                - button [ref=e471] [cursor=pointer]:
                  - generic [ref=e472]: 󰘁
  - generic:
    - tooltip
    - tooltip
    - tooltip
    - tooltip
    - tooltip
    - tooltip
    - tooltip
    - tooltip
    - 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 { DiscountBillingPlanCard } from '@/manager/modules/discount/components/DiscountBillingPlanCard';
  3  | import { DiscountCreateCodeFieldSet } from '@/manager/modules/discount/components/DiscountCreateCodeFieldSet';
  4  | import { DiscountCreateDurationFieldSet } from '@/manager/modules/discount/components/DiscountCreateDurationFieldSet';
  5  | import { DiscountCreateGeneralFieldSet } from '@/manager/modules/discount/components/DiscountCreateGeneralFieldSet';
  6  | import { DiscountProductCard } from '@/manager/modules/discount/components/DiscountProductCard';
  7  | import { DiscountCreateRestrictionsFieldSet } from '@/manager/modules/discount/components/DiscountCreateRestrictionsFieldSet';
  8  | import { DiscountCreateTypeFieldSet } from '@/manager/modules/discount/components/DiscountCreateTypeFieldSet';
  9  | import { DiscountCreateData } from '@/manager/modules/discount/discount-types';
  10 | import { DiscountDetailsPage } from '@/manager/modules/discount/views/DiscountDetailsPage';
  11 | import { getDialogErrorsHost, getSnackbarHost } from '@/manager/shared/utils/locator-utils';
  12 | import { getDetailsPageRegExpUrl } from '@/manager/shared/utils/url-utils';
  13 | import { Page } from '@playwright/test';
  14 | 
  15 | export class DiscountCreateDialog extends BaseDialog {
  16 |   readonly generalFieldSet = new DiscountCreateGeneralFieldSet(this.main);
  17 |   readonly productCard = new DiscountProductCard(this.main);
  18 |   readonly billingPlanCard = new DiscountBillingPlanCard(this.main);
  19 |   readonly typeFieldSet = new DiscountCreateTypeFieldSet(this.main);
  20 |   readonly durationFieldSet = new DiscountCreateDurationFieldSet(this.main);
  21 |   readonly restrictionsFieldSet = new DiscountCreateRestrictionsFieldSet(this.main);
  22 |   readonly codeFieldSet = new DiscountCreateCodeFieldSet(this.main);
  23 |   readonly errors = getDialogErrorsHost(this.main);
  24 |   readonly snackbar = getSnackbarHost(this.host, 'Discount created successfully');
  25 | 
  26 |   constructor(host: Page) {
  27 |     super(host, 'discount-create-dialog');
  28 |   }
  29 | 
  30 |   async goto(): Promise<void> {
  31 |     await this.host.goto('/discounts/create');
  32 |   }
  33 | 
  34 |   async create(data: DiscountCreateData): Promise<DiscountDetailsPage> {
  35 |     await this.fill(data);
  36 |     await Promise.all([
  37 |       this.snackbar.waitFor(),
> 38 |       this.host.waitForURL(getDetailsPageRegExpUrl('discounts')),
     |                 ^ Error: page.waitForURL: Test timeout of 90000ms exceeded.
  39 |       this.submit(),
  40 |     ]);
  41 |     return new DiscountDetailsPage(this.host);
  42 |   }
  43 | 
  44 |   async fill(data: DiscountCreateData): Promise<void> {
  45 |     await this.generalFieldSet.nameTextField.fill(data.name);
  46 |     await this.generalFieldSet.locationAutocomplete.fill(data.location.name);
  47 | 
  48 |     const products = data.products ?? [];
  49 |     const deposits = data.deposits ?? [];
  50 | 
  51 |     if (products.length > 0 || deposits.length > 0) {
  52 |       const productDialog = await this.productCard.openDiscountEditProductsDialog(false);
  53 |       await productDialog.select({ products, deposits });
  54 |     }
  55 | 
  56 |     if (data.billingPlans && data.billingPlans.length > 0) {
  57 |       const billingPlanDialog = await this.billingPlanCard.openDiscountEditBillingPlansDialog(false);
  58 |       await billingPlanDialog.select(data.billingPlans);
  59 |     }
  60 | 
  61 |     await this.typeFieldSet.typeRadioGroup.check(data.type);
  62 |     await this.typeFieldSet.valueNumberField.fill(data.value);
  63 | 
  64 |     await this.durationFieldSet.durationRadioGroup.check(data.duration.option);
  65 | 
  66 |     if (data.duration.option === 'multiple_months' && data.duration.amount != null) {
  67 |       await this.durationFieldSet.multipleMonthsDurationNumberField.fill(data.duration.amount);
  68 |     }
  69 | 
  70 |     if (data.expirationDate) {
  71 |       await this.restrictionsFieldSet.expiryDateCheckbox.set(true);
  72 |       await this.restrictionsFieldSet.expiryDateTimePicker.fill(data.expirationDate);
  73 |     }
  74 | 
  75 |     if (data.usageLimit != null) {
  76 |       await this.restrictionsFieldSet.usageLimitCheckbox.set(true);
  77 |       await this.restrictionsFieldSet.usageLimitNumberField.fill(data.usageLimit);
  78 |     }
  79 | 
  80 |     if (data.code.active && data.code.value) {
  81 |       await this.codeFieldSet.codeSection.codeSwitch.set(data.code.active);
  82 |       await this.codeFieldSet.codeSection.codeTextField.fill(data.code.value);
  83 |     }
  84 |   }
  85 | 
  86 |   async submit(): Promise<void> {
  87 |     await this.submitButton.click();
  88 |   }
  89 | }
  90 | 
```