# 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/portal/tests/e2e/booking/booking-create.spec.ts >> creates an active booking for a business customer with a monthly plan and card payment
- Location: src/portal/tests/e2e/booking/booking-create.spec.ts:131:7

# Error details

```
Test timeout of 120000ms exceeded.
```

```
Error: locator.click: Test timeout of 120000ms exceeded.
Call log:
  - waiting for locator('div[id=reka-combobox-content-v-42]').locator('div[role=option]:has(span:has-text("Bahamas"))')

```

# Page snapshot

```yaml
- generic [ref=f1e3]:
  - generic [ref=f1e8]:
    - banner [ref=f1e9]:
      - generic [ref=f1e11]:
        - img "Logo of Storeroom Innsbruck" [ref=f1e14]
        - complementary [ref=f1e15]:
          - button "English" [ref=f1e17] [cursor=pointer]
          - button "Help" [ref=f1e23] [cursor=pointer]:
            - figure [ref=f1e24]
    - main [ref=f1e30]:
      - generic [ref=f1e31]:
        - link "Back" [ref=f1e33] [cursor=pointer]:
          - /url: /5000500053/unit-type/836900462/options/basket
          - figure [ref=f1e34]
        - heading "Your details" [level=1] [ref=f1e39]
      - generic [ref=f1e41]:
        - generic [ref=f1e46]:
          - generic [ref=f1e47]:
            - generic [ref=f1e48]: Customer type *
            - combobox "Customer type *" [ref=f1e50]:
              - option "Private"
              - option "Business" [selected]
          - generic [ref=f1e51]:
            - generic [ref=f1e52]: Company name *
            - textbox "Company name *" [ref=f1e56]: Frami - Rolfson
          - generic [ref=f1e57]:
            - generic [ref=f1e58]:
              - generic [ref=f1e59]: VAT type
              - combobox "Show popup" [ref=f1e64]
            - generic [ref=f1e65]:
              - generic [ref=f1e66]: VAT number
              - textbox "VAT number" [ref=f1e70]: BS15714155
          - generic [ref=f1e71]:
            - generic [ref=f1e72]:
              - generic [ref=f1e73]: First name *
              - textbox "First name *" [ref=f1e77]: Erik
            - generic [ref=f1e78]:
              - generic [ref=f1e79]: Last name *
              - textbox "Last name *" [ref=f1e83]: Greenfelder
          - generic [ref=f1e84]:
            - generic [ref=f1e85]:
              - generic [ref=f1e86]: Email address *
              - textbox "Email address *" [ref=f1e90]: erik_greenfelder24@hotmail.com
            - generic [ref=f1e91]:
              - generic [ref=f1e92]: Mobile phone number *
              - generic [ref=f1e96]:
                - generic [ref=f1e97]:
                  - button "Show popup" [ref=f1e100] [cursor=pointer]:
                    - img "United States of America" [ref=f1e101]
                  - generic [ref=f1e104]: "+1"
                - textbox "Mobile phone number * +1" [active] [ref=f1e105]: "8242151612"
          - generic [ref=f1e106]:
            - generic [ref=f1e107]: Street and house number *
            - textbox "Street and house number *" [ref=f1e111]: 3752 S Broadway
          - generic [ref=f1e112]:
            - generic [ref=f1e113]:
              - generic [ref=f1e114]: Postcode *
              - textbox "Postcode *" [ref=f1e118]: 44563-7125
            - generic [ref=f1e119]:
              - generic [ref=f1e120]: City *
              - textbox "City *" [ref=f1e124]: Farrellville
          - generic [ref=f1e125]:
            - generic [ref=f1e126]: Country *
            - combobox "Show popup" [ref=f1e131]
            - list [ref=f1e134]:
              - listitem [ref=f1e135]: This field is required
          - generic [ref=f1e136]:
            - generic [ref=f1e139]:
              - checkbox "I have read and understood the terms and conditions *"
              - generic [ref=f1e145] [cursor=pointer]:
                - generic [ref=f1e146]:
                  - text: I have read and understood the
                  - link "terms and conditions" [ref=f1e147]:
                    - /url: https://www.storeroom.com/gtc
                - text: "*"
            - generic [ref=f1e150]:
              - checkbox "I agree to the privacy policy guidelines *"
              - generic [ref=f1e156] [cursor=pointer]:
                - generic [ref=f1e157]:
                  - text: I agree to the
                  - link "privacy policy guidelines" [ref=f1e158]:
                    - /url: https://www.storeroom.com/privacy
                - text: "*"
            - generic [ref=f1e161]:
              - checkbox "I have read and understood the forbidden items policy *"
              - generic [ref=f1e167] [cursor=pointer]:
                - generic [ref=f1e168]:
                  - text: I have read and understood the
                  - link "forbidden items policy" [ref=f1e169]:
                    - /url: https://www.storeroom.com/forbidden-items/gtc
                - text: "*"
            - generic [ref=f1e172]:
              - checkbox "I have read and understood the cancellation policy *"
              - generic [ref=f1e178] [cursor=pointer]:
                - generic [ref=f1e179]:
                  - text: I have read and understood the
                  - link "cancellation policy" [ref=f1e180]:
                    - /url: https://www.storeroom.com/cancellation-policy
                - text: "*"
          - button "Book and pay now" [ref=f1e182] [cursor=pointer]
        - complementary [ref=f1e184]:
          - generic [ref=f1e185]:
            - generic [ref=f1e187]:
              - generic [ref=f1e188]:
                - heading "Storeroom Innsbruck" [level=2] [ref=f1e189]
                - generic [ref=f1e190]: Gewerbepark 2, 6010 Innsbruck
              - img "Image of the facility named \"Storeroom Innsbruck\"" [ref=f1e193]
            - separator [ref=f1e194]
            - generic [ref=f1e195]:
              - generic [ref=f1e196]: Move-in date
              - generic [ref=f1e198]: Oct 5, 2026
            - separator [ref=f1e200]
            - generic [ref=f1e201]:
              - generic [ref=f1e202]:
                - generic [ref=f1e203]:
                  - generic [ref=f1e204]: VI 30 sqm Unit
                  - generic [ref=f1e205]: every 12 months
                - generic [ref=f1e206]: €6,300.00
              - generic [ref=f1e210]:
                - generic [ref=f1e211]:
                  - generic [ref=f1e212]: VI - Insurance monthly - 10
                  - generic [ref=f1e213]: every 12 months
                - generic [ref=f1e214]: €90.00
              - generic [ref=f1e216]:
                - separator [ref=f1e217]
                - generic [ref=f1e221]:
                  - generic [ref=f1e222]:
                    - generic [ref=f1e223]: Discount code
                    - generic [ref=f1e224]: €20.00 off forever
                  - button "Remove" [ref=f1e225] [cursor=pointer]
                - separator [ref=f1e227]
                - generic [ref=f1e228]:
                  - generic [ref=f1e229]:
                    - generic [ref=f1e230]: Total
                    - generic [ref=f1e231]: first invoice
                  - generic [ref=f1e234]:
                    - generic [ref=f1e235]: €6,390.00
                    - generic [ref=f1e236]: €6,370.00
                - generic [ref=f1e237]:
                  - generic [ref=f1e238]:
                    - generic [ref=f1e239]: Recurring payment
                    - generic [ref=f1e240]: every 12 months
                  - generic [ref=f1e243]:
                    - generic [ref=f1e244]: €6,390.00
                    - generic [ref=f1e245]: €6,370.00
  - contentinfo [ref=f1e246]:
    - separator [ref=f1e247]
    - generic [ref=f1e248]:
      - link "Imprint" [ref=f1e249] [cursor=pointer]:
        - /url: https://www.storeroom.com/imprint
      - generic [ref=f1e250]: •
      - link "Data privacy" [ref=f1e251] [cursor=pointer]:
        - /url: https://www.storeroom.com/privacy
      - generic [ref=f1e252]: •
      - button "Privacy settings" [ref=f1e253] [cursor=pointer]
```

# Test source

```ts
  1  | import { BaseComponent } from '@/shared/base/BaseComponent';
  2  | import { getAttribute } from '@/shared/utils/locator-utils';
  3  | import { Locator } from '@playwright/test';
  4  | 
  5  | export class SingleAutocomplete extends BaseComponent {
  6  |   private readonly input = this.host.locator('input');
  7  |   private readonly clearButton = this.host.getByRole('button');
  8  | 
  9  |   async fill(value: string): Promise<void> {
  10 |     if (await this.clearButton.isVisible()) {
  11 |       await this.clearButton.click();
  12 |     }
  13 | 
  14 |     await this.input.fill(value);
> 15 |     await (await this.getMenuOption(value)).click({ force: true }); // TODO: force option used until FE reka ui combobox bug is resolved
     |                                             ^ Error: locator.click: Test timeout of 120000ms exceeded.
  16 |   }
  17 | 
  18 |   private async getMenuOption(name: string): Promise<Locator> {
  19 |     return (await this.getMenu()).locator(`div[role=option]:has(span:has-text("${name}"))`);
  20 |   }
  21 | 
  22 |   private async getMenu(): Promise<Locator> {
  23 |     const id = await getAttribute(this.input, 'aria-controls');
  24 |     return this.host.page().locator(`div[id=${id}]`);
  25 |   }
  26 | }
  27 | 
```