# 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/customer/customer-create.spec.ts >> creates a customer with multiple locations
- Location: src/manager/tests/e2e/customer/customer-create.spec.ts:16:7

# Error details

```
Error: expect(locator).toHaveCount(expected) failed

Locator:  getByTestId('app-page').getByTestId('app-page-content').locator('.ui-data-grid').locator('[data-test-id=ui-data-grid-table]:not(.disabled):not(.loading):not(.fetching)').getByTestId('ui-data-grid-table-with-data').locator('tr')
Expected: 1
Received: 10
Timeout:  20000ms

Call log:
  - Expect "toHaveCount" with timeout 20000ms
  - waiting for getByTestId('app-page').getByTestId('app-page-content').locator('.ui-data-grid').locator('[data-test-id=ui-data-grid-table]:not(.disabled):not(.loading):not(.fetching)').getByTestId('ui-data-grid-table-with-data').locator('tr')
    2 × locator resolved to 0 elements
      - unexpected value "0"
    22 × locator resolved to 10 elements
       - unexpected value "10"

```

# Page snapshot

```yaml
- generic [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]:
            - generic [ref=e14]: Manager
            - button [ref=e15] [cursor=pointer]:
              - img [ref=e16]
      - list [ref=e19]:
        - generic [ref=e21]: Dashboard
        - link "Tasks" [ref=e22] [cursor=pointer]:
          - /url: /tasks
          - img [ref=e25]
          - generic [ref=e28]: Tasks
        - link "Facility maps" [ref=e29] [cursor=pointer]:
          - /url: /facility-map
          - generic [ref=e31]: 󰧾
          - generic [ref=e33]: Facility maps
        - link "Analytics" [ref=e34] [cursor=pointer]:
          - /url: /dashboard
          - generic [ref=e36]: 󱖶
          - generic [ref=e38]: Analytics
        - generic [ref=e40]: Sales
        - link "Bookings" [ref=e41] [cursor=pointer]:
          - /url: /bookings
          - generic [ref=e43]: 󰇡
          - generic [ref=e45]: Bookings
        - link "Customers" [ref=e46] [cursor=pointer]:
          - /url: /customers
          - generic [ref=e48]: 󰀏
          - generic [ref=e50]: Customers
        - link "Invoices" [ref=e51] [cursor=pointer]:
          - /url: /invoices
          - generic [ref=e53]: 󰷉
          - generic [ref=e55]: Invoices
        - link "Credit notes" [ref=e56] [cursor=pointer]:
          - /url: /credit-notes
          - img [ref=e59]
          - generic [ref=e62]: Credit notes
        - link "Units" [ref=e63] [cursor=pointer]:
          - /url: /units
          - generic [ref=e65]: 󰍀
          - generic [ref=e67]: Units
        - generic [ref=e69]: Site management
        - link "Locations" [ref=e70] [cursor=pointer]:
          - /url: /locations
          - generic [ref=e72]: 󰟙
          - generic [ref=e74]: Locations
        - link "Unit types" [ref=e75] [cursor=pointer]:
          - /url: /unit-types
          - generic [ref=e77]: 󰆧
          - generic [ref=e79]: Unit types
        - link "Protection Plans" [ref=e80] [cursor=pointer]:
          - /url: /insurances
          - generic [ref=e82]: 󰳌
          - generic [ref=e84]: Protection Plans
        - link "Deposits" [ref=e85] [cursor=pointer]:
          - /url: /deposits
          - generic [ref=e87]: 󱙆
          - generic [ref=e89]: Deposits
        - link "Products" [ref=e90] [cursor=pointer]:
          - /url: /products
          - generic [ref=e92]: 󰄑
          - generic [ref=e94]: Products
        - link "Discounts" [ref=e95] [cursor=pointer]:
          - /url: /discounts
          - generic [ref=e97]: 󰓼
          - generic [ref=e99]: Discounts
        - generic [ref=e100]:
          - option "Emails" [ref=e101] [cursor=pointer]:
            - generic [ref=e103]: 󰻨
            - generic [ref=e105]: 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=e131]: 󰅀
          - text: 󰖟 󰟙
        - generic [ref=e132]:
          - option "JaneAI" [ref=e133] [cursor=pointer]:
            - generic [ref=e135]: 󱙺
            - generic [ref=e137]: JaneAI
            - generic [ref=e141]: 󰅀
          - text: 󱜹
        - generic [ref=e143]: Feedback
        - link "Voting Portal" [ref=e144] [cursor=pointer]:
          - /url: /voting-portal
          - generic [ref=e146]: 󰔔
          - generic [ref=e148]: Voting Portal
      - generic [ref=e150]:
        - button "AS Andreas Stadler andreas.stadler@storeroom.at" [ref=e153] [cursor=pointer]:
          - generic [ref=e156]: AS
          - generic [ref=e157]:
            - generic [ref=e158]: Andreas Stadler
            - generic "andreas.stadler@storeroom.at" [ref=e159]
          - generic [ref=e160]: 󰇙
          - generic:
            - text: 󰗊 󰅀
            - text: 󰷖 󰍃
        - button [ref=e161] [cursor=pointer]:
          - generic [ref=e163]: 󰋽
    - main [ref=e164]:
      - generic [ref=e166]:
        - generic [ref=e168]:
          - generic [ref=e170]: Customers
          - generic [ref=e172]:
            - link "Create customer" [ref=e173] [cursor=pointer]:
              - /url: /customers/create
              - generic [ref=e174]:
                - generic [ref=e175]: 󰐕
                - text: Create customer
            - button [ref=e176] [cursor=pointer]:
              - generic [ref=e180]: 󰍝
        - generic [ref=e182]:
          - generic [ref=e184]:
            - button "Filters Reset filters" [ref=e185] [cursor=pointer]:
              - generic [ref=e186]:
                - heading "Filters" [level=3] [ref=e189]
                - generic [ref=e191]:
                  - button "Reset filters" [ref=e193]:
                    - generic [ref=e194]:
                      - generic [ref=e195]: 󰑐
                      - text: Reset filters
                  - generic [ref=e199]: 󰅀
            - generic [ref=e205]:
              - generic [ref=e210]:
                - generic [ref=e212]: 󰍉
                - textbox "Search" [active] [ref=e214]: Ole5@gmail.com
                - button "Clear Search" [ref=e216] [cursor=pointer]: 󰅙
                - generic:
                  - generic: Search
              - combobox [ref=e220]:
                - generic [ref=e221]:
                  - generic: Location
                  - combobox "Location" [ref=e223]
                - button [ref=e225] [cursor=pointer]: 󰍝
              - combobox [ref=e229]:
                - generic [ref=e230]:
                  - generic: Has past due invoice(s)
                  - combobox "Has past due invoice(s)" [ref=e232]
                - button [ref=e234] [cursor=pointer]: 󰍝
              - combobox [ref=e238]:
                - generic [ref=e239]:
                  - generic: Status
                  - combobox "Status" [ref=e241]
                - button [ref=e243] [cursor=pointer]: 󰍝
          - generic [ref=e245]:
            - table [ref=e249]:
              - rowgroup [ref=e250]:
                - row "Customer no. Name Location(s) Email address Phone number Status Past due invoice(s) Created at" [ref=e251]:
                  - columnheader "Customer no." [ref=e252]:
                    - button "Customer no." [ref=e253] [cursor=pointer]:
                      - generic [ref=e255]: Customer no.
                      - generic [ref=e258]: 󰁝
                  - columnheader "Name" [ref=e259]:
                    - button "Name" [ref=e260] [cursor=pointer]:
                      - generic [ref=e262]: Name
                      - generic [ref=e265]: 󰁝
                  - columnheader "Location(s)" [ref=e266]:
                    - button "Location(s)" [ref=e267] [cursor=pointer]:
                      - generic [ref=e269]: Location(s)
                      - generic [ref=e272]: 󰁝
                  - columnheader "Email address" [ref=e273]:
                    - button "Email address" [ref=e274] [cursor=pointer]:
                      - generic [ref=e276]: Email address
                      - generic [ref=e279]: 󰁝
                  - columnheader "Phone number" [ref=e280]:
                    - generic [ref=e283]: Phone number
                  - columnheader "Status" [ref=e284]:
                    - button "Status" [ref=e285] [cursor=pointer]:
                      - generic [ref=e287]: Status
                      - generic [ref=e290]: 󰁝
                  - columnheader "Past due invoice(s)" [ref=e291]:
                    - button "Past due invoice(s)" [ref=e292] [cursor=pointer]:
                      - generic [ref=e294]: Past due invoice(s)
                      - generic [ref=e297]: 󰁝
                  - columnheader "Created at" [ref=e298]:
                    - button "Created at" [ref=e299] [cursor=pointer]:
                      - generic [ref=e301]: Created at
                      - generic [ref=e304]: 󰁝
                - row [ref=e305]:
                  - columnheader [ref=e306]
              - rowgroup [ref=e307]:
                - row "8543-2780-1 Debbie Considine Storeroom Innsbruck Vienna North Vienna South ole5@gmail.com +43 6346 545949 Lead None 22 May 2026" [ref=e308]:
                  - cell "8543-2780-1" [ref=e309]:
                    - link "8543-2780-1" [ref=e310] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e311]: 8543-2780-1
                  - cell "Debbie Considine" [ref=e312]:
                    - link "Debbie Considine" [ref=e313] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e314]: Debbie Considine
                  - cell "Storeroom Innsbruck Vienna North Vienna South" [ref=e315]:
                    - link "Storeroom Innsbruck Vienna North Vienna South" [ref=e316] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e318]:
                        - generic [ref=e320]: Storeroom Innsbruck
                        - generic [ref=e322]: Vienna North
                        - generic [ref=e324]: Vienna South
                  - cell "ole5@gmail.com" [ref=e325]:
                    - link "ole5@gmail.com" [ref=e326] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e329]: ole5@gmail.com
                  - cell "+43 6346 545949" [ref=e330]:
                    - link "+43 6346 545949" [ref=e331] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e334]: +43 6346 545949
                  - cell "Lead" [ref=e335]:
                    - link "Lead" [ref=e336] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e339]: Lead
                  - cell "None" [ref=e340]:
                    - link "None" [ref=e341] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e344]: None
                  - cell "22 May 2026" [ref=e345]:
                    - link "22 May 2026" [ref=e346] [cursor=pointer]:
                      - /url: /customers/854327801
                      - generic [ref=e347]: 22 May 2026
                - row "5547-2778 Langosh, Breitenberg-Morar and Weissnat Vienna South skye95@gmail.com +43 4445 817066 Lead None 22 May 2026" [ref=e348]:
                  - cell "5547-2778" [ref=e349]:
                    - link "5547-2778" [ref=e350] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e351]: 5547-2778
                  - cell "Langosh, Breitenberg-Morar and Weissnat" [ref=e352]:
                    - link "Langosh, Breitenberg-Morar and Weissnat" [ref=e353] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e354]: Langosh, Breitenberg-Morar and Weissnat
                  - cell "Vienna South" [ref=e355]:
                    - link "Vienna South" [ref=e356] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e360]: Vienna South
                  - cell "skye95@gmail.com" [ref=e361]:
                    - link "skye95@gmail.com" [ref=e362] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e365]: skye95@gmail.com
                  - cell "+43 4445 817066" [ref=e366]:
                    - link "+43 4445 817066" [ref=e367] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e370]: +43 4445 817066
                  - cell "Lead" [ref=e371]:
                    - link "Lead" [ref=e372] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e375]: Lead
                  - cell "None" [ref=e376]:
                    - link "None" [ref=e377] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e380]: None
                  - cell "22 May 2026" [ref=e381]:
                    - link "22 May 2026" [ref=e382] [cursor=pointer]:
                      - /url: /customers/55472778
                      - generic [ref=e383]: 22 May 2026
                - row "1669-4168-6 Elvera Sawayn Vienna South deanna.kohler0@gmail.com +43 2605 558163 Lead None 22 May 2026" [ref=e384]:
                  - cell "1669-4168-6" [ref=e385]:
                    - link "1669-4168-6" [ref=e386] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e387]: 1669-4168-6
                  - cell "Elvera Sawayn" [ref=e388]:
                    - link "Elvera Sawayn" [ref=e389] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e390]: Elvera Sawayn
                  - cell "Vienna South" [ref=e391]:
                    - link "Vienna South" [ref=e392] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e396]: Vienna South
                  - cell "deanna.kohler0@gmail.com" [ref=e397]:
                    - link "deanna.kohler0@gmail.com" [ref=e398] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e401]: deanna.kohler0@gmail.com
                  - cell "+43 2605 558163" [ref=e402]:
                    - link "+43 2605 558163" [ref=e403] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e406]: +43 2605 558163
                  - cell "Lead" [ref=e407]:
                    - link "Lead" [ref=e408] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e411]: Lead
                  - cell "None" [ref=e412]:
                    - link "None" [ref=e413] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e416]: None
                  - cell "22 May 2026" [ref=e417]:
                    - link "22 May 2026" [ref=e418] [cursor=pointer]:
                      - /url: /customers/166941686
                      - generic [ref=e419]: 22 May 2026
                - row "1095-6483-88 Camylle McKenzie Vienna South krystal80@yahoo.com +43 3825 738224 Lead None 22 May 2026" [ref=e420]:
                  - cell "1095-6483-88" [ref=e421]:
                    - link "1095-6483-88" [ref=e422] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e423]: 1095-6483-88
                  - cell "Camylle McKenzie" [ref=e424]:
                    - link "Camylle McKenzie" [ref=e425] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e426]: Camylle McKenzie
                  - cell "Vienna South" [ref=e427]:
                    - link "Vienna South" [ref=e428] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e432]: Vienna South
                  - cell "krystal80@yahoo.com" [ref=e433]:
                    - link "krystal80@yahoo.com" [ref=e434] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e437]: krystal80@yahoo.com
                  - cell "+43 3825 738224" [ref=e438]:
                    - link "+43 3825 738224" [ref=e439] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e442]: +43 3825 738224
                  - cell "Lead" [ref=e443]:
                    - link "Lead" [ref=e444] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e447]: Lead
                  - cell "None" [ref=e448]:
                    - link "None" [ref=e449] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e452]: None
                  - cell "22 May 2026" [ref=e453]:
                    - link "22 May 2026" [ref=e454] [cursor=pointer]:
                      - /url: /customers/1095648388
                      - generic [ref=e455]: 22 May 2026
                - row "1185-7525-56 Grace Wisozk Vienna South lucille45@yahoo.com +43 5366 085406 Lead None 22 May 2026" [ref=e456]:
                  - cell "1185-7525-56" [ref=e457]:
                    - link "1185-7525-56" [ref=e458] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e459]: 1185-7525-56
                  - cell "Grace Wisozk" [ref=e460]:
                    - link "Grace Wisozk" [ref=e461] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e462]: Grace Wisozk
                  - cell "Vienna South" [ref=e463]:
                    - link "Vienna South" [ref=e464] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e468]: Vienna South
                  - cell "lucille45@yahoo.com" [ref=e469]:
                    - link "lucille45@yahoo.com" [ref=e470] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e473]: lucille45@yahoo.com
                  - cell "+43 5366 085406" [ref=e474]:
                    - link "+43 5366 085406" [ref=e475] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e478]: +43 5366 085406
                  - cell "Lead" [ref=e479]:
                    - link "Lead" [ref=e480] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e483]: Lead
                  - cell "None" [ref=e484]:
                    - link "None" [ref=e485] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e488]: None
                  - cell "22 May 2026" [ref=e489]:
                    - link "22 May 2026" [ref=e490] [cursor=pointer]:
                      - /url: /customers/1185752556
                      - generic [ref=e491]: 22 May 2026
                - row "2135-1647-18 Carter-Gutkowski Vienna South ritchie.vida@hotmail.com +43 57216686096400200 Lead None 22 May 2026" [ref=e492]:
                  - cell "2135-1647-18" [ref=e493]:
                    - link "2135-1647-18" [ref=e494] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e495]: 2135-1647-18
                  - cell "Carter-Gutkowski" [ref=e496]:
                    - link "Carter-Gutkowski" [ref=e497] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e498]: Carter-Gutkowski
                  - cell "Vienna South" [ref=e499]:
                    - link "Vienna South" [ref=e500] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e504]: Vienna South
                  - cell "ritchie.vida@hotmail.com" [ref=e505]:
                    - link "ritchie.vida@hotmail.com" [ref=e506] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e509]: ritchie.vida@hotmail.com
                  - cell "+43 57216686096400200" [ref=e510]:
                    - link "+43 57216686096400200" [ref=e511] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e514]: +43 57216686096400200
                  - cell "Lead" [ref=e515]:
                    - link "Lead" [ref=e516] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e519]: Lead
                  - cell "None" [ref=e520]:
                    - link "None" [ref=e521] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e524]: None
                  - cell "22 May 2026" [ref=e525]:
                    - link "22 May 2026" [ref=e526] [cursor=pointer]:
                      - /url: /customers/2135164718
                      - generic [ref=e527]: 22 May 2026
                - row "1471-5104-95 Botsford, Fay and Runolfsson Vienna North albertha.schoen@gmail.com +43 66019389201482945 Lead None 22 May 2026" [ref=e528]:
                  - cell "1471-5104-95" [ref=e529]:
                    - link "1471-5104-95" [ref=e530] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e531]: 1471-5104-95
                  - cell "Botsford, Fay and Runolfsson" [ref=e532]:
                    - link "Botsford, Fay and Runolfsson" [ref=e533] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e534]: Botsford, Fay and Runolfsson
                  - cell "Vienna North" [ref=e535]:
                    - link "Vienna North" [ref=e536] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e540]: Vienna North
                  - cell "albertha.schoen@gmail.com" [ref=e541]:
                    - link "albertha.schoen@gmail.com" [ref=e542] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e545]: albertha.schoen@gmail.com
                  - cell "+43 66019389201482945" [ref=e546]:
                    - link "+43 66019389201482945" [ref=e547] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e550]: +43 66019389201482945
                  - cell "Lead" [ref=e551]:
                    - link "Lead" [ref=e552] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e555]: Lead
                  - cell "None" [ref=e556]:
                    - link "None" [ref=e557] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e560]: None
                  - cell "22 May 2026" [ref=e561]:
                    - link "22 May 2026" [ref=e562] [cursor=pointer]:
                      - /url: /customers/1471510495
                      - generic [ref=e563]: 22 May 2026
                - row "3398-3092-7 Runolfsdottir PLC Storeroom Innsbruck City 1030 macejkovic.leopoldo@kassulke.com +43 16082968579237071 Lead None 22 May 2026" [ref=e564]:
                  - cell "3398-3092-7" [ref=e565]:
                    - link "3398-3092-7" [ref=e566] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e567]: 3398-3092-7
                  - cell "Runolfsdottir PLC" [ref=e568]:
                    - link "Runolfsdottir PLC" [ref=e569] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e570]: Runolfsdottir PLC
                  - cell "Storeroom Innsbruck City 1030" [ref=e571]:
                    - link "Storeroom Innsbruck City 1030" [ref=e572] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e574]:
                        - generic [ref=e576]: Storeroom Innsbruck
                        - generic [ref=e578]: City 1030
                  - cell "macejkovic.leopoldo@kassulke.com" [ref=e579]:
                    - link "macejkovic.leopoldo@kassulke.com" [ref=e580] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e583]: macejkovic.leopoldo@kassulke.com
                  - cell "+43 16082968579237071" [ref=e584]:
                    - link "+43 16082968579237071" [ref=e585] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e588]: +43 16082968579237071
                  - cell "Lead" [ref=e589]:
                    - link "Lead" [ref=e590] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e593]: Lead
                  - cell "None" [ref=e594]:
                    - link "None" [ref=e595] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e598]: None
                  - cell "22 May 2026" [ref=e599]:
                    - link "22 May 2026" [ref=e600] [cursor=pointer]:
                      - /url: /customers/339830927
                      - generic [ref=e601]: 22 May 2026
                - row "1424-5788-77 Fred Bashirian Vienna South alene90@gerhold.net +43 75662210871888785 Lead None 22 May 2026" [ref=e602]:
                  - cell "1424-5788-77" [ref=e603]:
                    - link "1424-5788-77" [ref=e604] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e605]: 1424-5788-77
                  - cell "Fred Bashirian" [ref=e606]:
                    - link "Fred Bashirian" [ref=e607] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e608]: Fred Bashirian
                  - cell "Vienna South" [ref=e609]:
                    - link "Vienna South" [ref=e610] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e614]: Vienna South
                  - cell "alene90@gerhold.net" [ref=e615]:
                    - link "alene90@gerhold.net" [ref=e616] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e619]: alene90@gerhold.net
                  - cell "+43 75662210871888785" [ref=e620]:
                    - link "+43 75662210871888785" [ref=e621] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e624]: +43 75662210871888785
                  - cell "Lead" [ref=e625]:
                    - link "Lead" [ref=e626] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e629]: Lead
                  - cell "None" [ref=e630]:
                    - link "None" [ref=e631] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e634]: None
                  - cell "22 May 2026" [ref=e635]:
                    - link "22 May 2026" [ref=e636] [cursor=pointer]:
                      - /url: /customers/1424578877
                      - generic [ref=e637]: 22 May 2026
                - row "3966-8131 Alvina Wiza Vienna North ottilie14@ondricka.net +43 34751202654888360 Lead None 22 May 2026" [ref=e638]:
                  - cell "3966-8131" [ref=e639]:
                    - link "3966-8131" [ref=e640] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e641]: 3966-8131
                  - cell "Alvina Wiza" [ref=e642]:
                    - link "Alvina Wiza" [ref=e643] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e644]: Alvina Wiza
                  - cell "Vienna North" [ref=e645]:
                    - link "Vienna North" [ref=e646] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e650]: Vienna North
                  - cell "ottilie14@ondricka.net" [ref=e651]:
                    - link "ottilie14@ondricka.net" [ref=e652] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e655]: ottilie14@ondricka.net
                  - cell "+43 34751202654888360" [ref=e656]:
                    - link "+43 34751202654888360" [ref=e657] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e660]: +43 34751202654888360
                  - cell "Lead" [ref=e661]:
                    - link "Lead" [ref=e662] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e665]: Lead
                  - cell "None" [ref=e666]:
                    - link "None" [ref=e667] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e670]: None
                  - cell "22 May 2026" [ref=e671]:
                    - link "22 May 2026" [ref=e672] [cursor=pointer]:
                      - /url: /customers/39668131
                      - generic [ref=e673]: 22 May 2026
            - generic [ref=e676]:
              - generic [ref=e677]:
                - generic [ref=e678]: "Items per page:"
                - combobox [ref=e681]:
                  - generic [ref=e683] [cursor=pointer]:
                    - generic [ref=e685]: "10"
                    - combobox "Items per page:": "10"
                  - generic [ref=e687]: 󰍝
              - generic [ref=e688]: 1-10 of 33
              - generic [ref=e689]:
                - button [disabled]:
                  - generic:
                    - generic: 󰘀
                - button [disabled]:
                  - generic:
                    - generic: 󰅁
                - button [ref=e690] [cursor=pointer]:
                  - generic [ref=e692]: 󰅂
                - button [ref=e693] [cursor=pointer]:
                  - generic [ref=e695]: 󰘁
  - 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 { getCustomerCreateData } from '@/manager/modules/customer/customer-factories';
  2   | import { test } from '@/manager/modules/customer/customer-fixtures';
  3   | import { formatCustomerName } from '@/manager/modules/customer/customer-utils';
  4   | import { customerCreateHappyTestCases } from '@/manager/modules/customer/test-cases/customer-create-happy-test-cases';
  5   | import {
  6   |   expectDataTableChipsColumnToHaveText,
  7   |   expectDataTableTextColumnToHaveText,
  8   | } from '@/manager/modules/ui/data-table/data-table-assertions';
  9   | import { customerTableColumnTestIds } from '@/manager/modules/ui/data-table/data/data-table-column-test-ids';
  10  | import { expectMultiLocatorToHaveText, expectSingleLocatorToHaveText } from '@/manager/shared/utils/expect-utils';
  11  | import { vatTypes } from '@/shared/data/seed-vat-types';
  12  | import { formatAddress, formatCurrency, formatDate, formatPhone } from '@/shared/utils/formatters';
  13  | import { expect } from '@/shared/utils/matchers';
  14  | 
  15  | for (const tc of customerCreateHappyTestCases) {
  16  |   test(tc.description, async ({ customerCreateDialog, trackCustomerForTeardown }) => {
  17  |     const data = getCustomerCreateData(tc.options);
  18  |     const customerFullName = formatCustomerName(data.firstName, data.lastName);
  19  |     const customerTitle = data.type === 'business' ? data.companyName : customerFullName;
  20  |     const customerPhone = formatPhone(data.phone);
  21  |     const customerAddress = formatAddress(data.street, data.postalCode, data.city, data.country.name);
  22  |     const customerStatus = 'lead';
  23  |     const customerCreatedAt = formatDate(new Date());
  24  |     const customerCurrency = data.locations[0].currency;
  25  |     const customerLocationNames = data.locations.map((l) => l.name);
  26  |     const zeroAmount = formatCurrency(0, customerCurrency);
  27  | 
  28  |     await customerCreateDialog.goto();
  29  | 
  30  |     const detailsPage = await test.step('create customer', () => customerCreateDialog.create(data));
  31  | 
  32  |     trackCustomerForTeardown(detailsPage.getCustomerId());
  33  | 
  34  |     await test.step('verify new customer on details page', async () => {
  35  |       await expectSingleLocatorToHaveText(detailsPage.title, customerTitle);
  36  |       await expectSingleLocatorToHaveText(detailsPage.status, customerStatus);
  37  |       await expectMultiLocatorToHaveText(detailsPage.generalCard.locations, customerLocationNames);
  38  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.type, data.type);
  39  | 
  40  |       if (data.type === 'business') {
  41  |         await expectSingleLocatorToHaveText(detailsPage.generalCard.companyName, data.companyName);
  42  |         await expectSingleLocatorToHaveText(detailsPage.generalCard.vatType, data.vatType?.name);
  43  |         await expectSingleLocatorToHaveText(detailsPage.generalCard.vatNumber, data.vatNumber);
  44  |       } else {
  45  |         await expect(detailsPage.generalCard.companyName).toBeHidden();
  46  |         await expect(detailsPage.generalCard.vatType).toBeHidden();
  47  |         await expect(detailsPage.generalCard.vatNumber).toBeHidden();
  48  |       }
  49  | 
  50  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.name, customerFullName);
  51  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.email, data.email);
  52  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.phoneNumber, customerPhone);
  53  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.language, data.language.id);
  54  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.address, customerAddress);
  55  |       await expectSingleLocatorToHaveText(detailsPage.generalCard.note, data.note);
  56  | 
  57  |       await expect(detailsPage.detailsCard.customerId).not.toBeEmpty();
  58  |       await expectSingleLocatorToHaveText(detailsPage.detailsCard.createdAt, customerCreatedAt);
  59  |       await expectSingleLocatorToHaveText(detailsPage.detailsCard.totalSpent, zeroAmount);
  60  |       await expectSingleLocatorToHaveText(detailsPage.detailsCard.totalPastDueAmount, zeroAmount);
  61  |       await expect(detailsPage.detailsCard.paymentMethods).toHaveCount(0);
  62  |       await expectSingleLocatorToHaveText(
  63  |         detailsPage.detailsCard.accountsReceivableNumber,
  64  |         data.accountsReceivableNumber
  65  |       );
  66  | 
  67  |       await expect(detailsPage.bookingsCard.main).toBeHidden();
  68  |       await expect(detailsPage.invoicesCard.main).toBeHidden();
  69  |     });
  70  | 
  71  |     await test.step('verify new customer on list page', async () => {
  72  |       const listPage = await detailsPage.returnToCustomerListPage();
  73  | 
  74  |       await listPage.searchTextField.fill(data.email);
  75  | 
> 76  |       await expect(listPage.dataTable.getRows()).toHaveCount(1);
      |                                                  ^ Error: expect(locator).toHaveCount(expected) failed
  77  |       await expect(listPage.dataTable.getRowColumn(0, customerTableColumnTestIds.id)).not.toBeEmpty();
  78  |       await expectDataTableTextColumnToHaveText(listPage.dataTable, customerTableColumnTestIds.name, customerTitle);
  79  |       await expectDataTableChipsColumnToHaveText(
  80  |         listPage.dataTable,
  81  |         customerTableColumnTestIds.locations,
  82  |         customerLocationNames
  83  |       );
  84  |       await expectDataTableTextColumnToHaveText(listPage.dataTable, customerTableColumnTestIds.email, data.email);
  85  |       await expectDataTableTextColumnToHaveText(
  86  |         listPage.dataTable,
  87  |         customerTableColumnTestIds.phoneNumber,
  88  |         customerPhone
  89  |       );
  90  |       await expectDataTableChipsColumnToHaveText(listPage.dataTable, customerTableColumnTestIds.status, customerStatus);
  91  |       await expectDataTableChipsColumnToHaveText(
  92  |         listPage.dataTable,
  93  |         customerTableColumnTestIds.hasPastDueInvoices,
  94  |         'none'
  95  |       );
  96  |       await expectDataTableTextColumnToHaveText(
  97  |         listPage.dataTable,
  98  |         customerTableColumnTestIds.createdAt,
  99  |         customerCreatedAt
  100 |       );
  101 |     });
  102 |   });
  103 | }
  104 | 
  105 | test('rejects a private customer without all required fields', async ({ customerCreateDialog }) => {
  106 |   const data = getCustomerCreateData({ type: 'private', firstName: '', lastName: '' });
  107 | 
  108 |   await customerCreateDialog.goto();
  109 | 
  110 |   await test.step('submit invalid customer create form', async () => {
  111 |     await customerCreateDialog.fill(data);
  112 |     await customerCreateDialog.submit();
  113 |   });
  114 | 
  115 |   await test.step('verify errors on form', async () => {
  116 |     await expect(customerCreateDialog.errors).toHaveCountGreaterThan(0);
  117 |   });
  118 | });
  119 | 
  120 | test('rejects a business customer without all required fields', async ({ customerCreateDialog }) => {
  121 |   const data = getCustomerCreateData({ type: 'business', companyName: '' });
  122 | 
  123 |   await customerCreateDialog.goto();
  124 | 
  125 |   await test.step('submit invalid customer create form', async () => {
  126 |     await customerCreateDialog.fill(data);
  127 |     await customerCreateDialog.submit();
  128 |   });
  129 | 
  130 |   await test.step('verify errors on form', async () => {
  131 |     await expect(customerCreateDialog.errors).toHaveCountGreaterThan(0);
  132 |   });
  133 | });
  134 | 
  135 | test('rejects a customer with a duplicate email', async ({ createCustomer, customerCreateDialog }) => {
  136 |   const existing = await createCustomer(getCustomerCreateData());
  137 |   const data = getCustomerCreateData({ email: existing.email });
  138 | 
  139 |   await customerCreateDialog.goto();
  140 | 
  141 |   await test.step('submit customer create form with duplicate email', async () => {
  142 |     await customerCreateDialog.fill(data);
  143 |     await customerCreateDialog.submit();
  144 |   });
  145 | 
  146 |   await test.step('verify errors on form', async () => {
  147 |     await expect(customerCreateDialog.errors).toHaveCountGreaterThan(0);
  148 |   });
  149 | });
  150 | 
  151 | test('rejects a customer with a duplicate phone number', async ({ createCustomer, customerCreateDialog }) => {
  152 |   const existing = await createCustomer(getCustomerCreateData());
  153 |   const data = getCustomerCreateData({ phone: existing.phone, country: existing.country });
  154 | 
  155 |   await customerCreateDialog.goto();
  156 | 
  157 |   await test.step('submit customer create form with duplicate phone number', async () => {
  158 |     await customerCreateDialog.fill(data);
  159 |     await customerCreateDialog.submit();
  160 |   });
  161 | 
  162 |   await test.step('verify errors on form', async () => {
  163 |     await expect(customerCreateDialog.errors).toHaveCountGreaterThan(0);
  164 |   });
  165 | });
  166 | 
  167 | test('rejects a customer with a vat number that does not match the vat type', async ({ customerCreateDialog }) => {
  168 |   const data = getCustomerCreateData({
  169 |     type: 'business',
  170 |     vatType: vatTypes.eu_vat,
  171 |     vatNumber: 'INVALID-VAT-1234',
  172 |   });
  173 | 
  174 |   await customerCreateDialog.goto();
  175 | 
  176 |   await test.step('submit customer create form with mismatched vat type and number', async () => {
```