# Test info

- Name: Feature case for request-listing >> REQ_037 - Verify prodive manually Affidavit
- Location: /root/code/portal-automation-test/tests/request/function.spec.ts:1215:9

# Error details

```
Error: Timed out 10000ms waiting for expect(locator).toBeVisible()

Locator: locator('//p[text()=\'file-test-21.pdf\']')
Expected: visible
Received: <element(s) not found>
Call log:
  - expect.toBeVisible with timeout 10000ms
  - waiting for locator('//p[text()=\'file-test-21.pdf\']')

    at /root/code/portal-automation-test/tests/request/function.spec.ts:1256:105
    at /root/code/portal-automation-test/tests/request/function.spec.ts:1246:9
```

# Page snapshot

```yaml
- complementary:
  - img
  - link "WellCare Pharmacy12321@@@@ Portal QA":
    - /url: /
    - paragraph: WellCare Pharmacy12321@@@@
    - paragraph: Portal QA
  - list:
    - listitem:
      - link "Home":
        - /url: https://qa.loprx.com
        - img
        - text: Home
    - listitem:
      - link "Case":
        - /url: https://qa.loprx.com/cases
        - img
        - text: Case
    - listitem:
      - link "Request":
        - /url: https://qa.loprx.com/requests
        - img
        - text: Request
    - listitem:
      - link "Patient":
        - /url: https://qa.loprx.com/clients
        - img
        - text: Patient
    - listitem:
      - button "Business/Contact":
        - img
        - text: Business/Contact
    - listitem:
      - button "Inbox/Sent":
        - img
        - text: Inbox/Sent
    - listitem:
      - button "Settings":
        - img
        - text: Settings
  - list:
    - listitem:
      - link "Shared with me":
        - /url: https://qa.loprx.com/shared/requests
        - img
        - text: Shared with me
- banner:
  - img
  - img
  - textbox "Search..."
  - img
  - img
  - paragraph: No notifications yet
  - paragraph: When you get notifications, they'll show up here
  - button "Refresh"
  - list:
    - listitem:
      - img
      - paragraph: Pause notifications...
      - list:
        - listitem: For 30 minutes
        - listitem: For 1 hour
        - listitem: For 2 hours
        - listitem: Until tomorrow
    - listitem:
      - img
    - listitem:
      - img
    - listitem:
      - img
    - listitem:
      - img
    - listitem:
      - img
    - listitem:
      - img
  - img
  - button "0 Cart":
    - img
    - text: 0 Cart
  - text: Feedback
  - img
  - link "Open user menu":
    - /url: "#"
    - text: Son HaiBon
- img
- text: "#529757 Affidavit"
- img
- img
- link "John Doe 20245":
  - /url: /clients/03cde497-a01b-4bbd-a669-cc54a95551a1
- text: "-"
- 'link "DOB: 01/01/2000"':
  - /url: /clients/03cde497-a01b-4bbd-a669-cc54a95551a1
- 'link "Case: #235054"':
  - /url: /cases/235054
- text: "-"
- 'link "DOI: 01/01/2010"':
  - /url: /cases/235054
- 'link "Category: ATV Accidents"':
  - /url: /cases/235054
- text: Tag
- img
- 'button "Status: Open"'
- button "Status Details:":
  - text: "Status Details:"
  - listbox:
    - listitem:
      - text: Inquiry
      - img
  - img
- 'button "Assignee: --"':
  - text: "Assignee: --"
  - img
- button:
  - img
- button:
  - img
- button "Activity":
  - img
  - text: Activity
- button "Share":
  - img
  - text: Share
- paragraph: Son HaiBon Phan
- text: Posted
- paragraph: 02/01/2026
- img
- list:
  - listitem
  - listitem
  - listitem
  - listitem
- link:
  - /url: /api/v1/requests/529757/letters/a0fa04e8-5fac-46b0-a5fb-6af7f3104f05/download
  - img
- textbox "Message"
- button [disabled]:
  - img
- paragraph: Son HaiBon Phan
- text: Posted
- paragraph: 01/31/2026
- img
- img
- list:
  - listitem
  - listitem
  - listitem
  - listitem
- link:
  - /url: /api/v1/requests/529757/letters/a0f90322-7a63-4e72-bb89-162a0e9a2655/download
  - img
- textbox "Comment..."
- button [disabled]:
  - img
- paragraph: Son HaiBon Phan
- text: Posted
- paragraph: 01/31/2026
- img
- paragraph: Son HaiBon Phan
- text: Posted
- paragraph: 01/30/2026
- img
- paragraph: Son HaiBon Phan
- text: Posted
- paragraph: 01/30/2026
- img
- heading "Snapshot" [level=2]
- list:
  - listitem: Son HaiBon Phan 12 hours ago Provided Provide
  - listitem: Son HaiBon Phan 1 day ago Provided
  - listitem: Son HaiBon Phan 1 day ago Provided
  - listitem: Son HaiBon Phan 1 day ago Provided
  - listitem: Son HaiBon Phan 01/30/2026 Provided
  - listitem: Son HaiBon Phan 01/29/2026 Provided
  - listitem: Son HaiBon Phan 01/29/2026 Provided
  - listitem: Son HaiBon Phan 01/28/2026 Provided
  - listitem: Son HaiBon Phan 01/28/2026 Provided
  - listitem: Son HaiBon Phan 01/27/2026 Provided
  - listitem: Son HaiBon Phan 01/27/2026 Provided
  - listitem: Son HaiBon Phan 01/26/2026 Provided
  - listitem: Son HaiBon Phan 01/26/2026 Provided
  - listitem: Son HaiBon Phan 01/25/2026 Provided
  - listitem: Son HaiBon Phan 01/24/2026 Provided
  - listitem: Son HaiBon Phan 01/24/2026 Provided
  - listitem: Son HaiBon Phan 01/23/2026 Provided
  - listitem: Son HaiBon Phan 01/23/2026 Provided
  - listitem: Son HaiBon Phan 01/22/2026 Provided
  - listitem: Son HaiBon Phan 01/21/2026 Provided
  - listitem: Son HaiBon Phan 01/20/2026 Provided
  - listitem: Son HaiBon Phan 01/20/2026 Provided
  - listitem: Son HaiBon Phan 01/19/2026 Provided
  - listitem: Son HaiBon Phan 01/18/2026 Provided
  - listitem: Son HaiBon Phan 01/18/2026 Provided
  - listitem: Son HaiBon Phan 01/17/2026 Provided
  - listitem: Son HaiBon Phan 01/16/2026 Provided
  - listitem: Son HaiBon Phan 01/14/2026 Provided
  - listitem: Son HaiBon Phan 01/14/2026 Provided
  - listitem: Son HaiBon Phan 01/13/2026 Provided
  - listitem: Son HaiBon Phan 01/13/2026 Provided
  - listitem: Son HaiBon Phan 01/12/2026 Provided
  - listitem: Son HaiBon Phan 01/11/2026 Provided
  - listitem: Son HaiBon Phan 01/11/2026 Provided
  - listitem: Son HaiBon Phan 01/09/2026 Provided
  - listitem: Son HaiBon Phan 01/09/2026 Provided
  - listitem: Son HaiBon Phan 01/08/2026 Provided
  - listitem: Son HaiBon Phan 01/08/2026 Provided
  - listitem: Son HaiBon Phan 01/07/2026 Provided
  - listitem: Son HaiBon Phan 01/06/2026 Provided
  - listitem: Son HaiBon Phan 01/06/2026 Provided
  - listitem: Son HaiBon Phan 12/31/2025 Provided
  - listitem: Son HaiBon Phan 12/30/2025 Provided
  - listitem: Son HaiBon Phan 12/30/2025 Provided
  - listitem: Son HaiBon Phan 12/30/2025 Provided
  - listitem: Son HaiBon Phan 12/28/2025 Provided
  - listitem: Son HaiBon Phan 12/28/2025 Provided
  - listitem: Son HaiBon Phan 12/23/2025 Provided
  - listitem: Son HaiBon Phan 12/22/2025 Provided
  - listitem: Son HaiBon Phan 12/18/2025 Provided
  - listitem: Son HaiBon Phan 12/17/2025 Provided
  - listitem: Son HaiBon Phan 12/17/2025 Provided
  - listitem: Son HaiBon Phan 12/16/2025 Provided
  - listitem: Son HaiBon Phan 12/16/2025 Provided
  - listitem: Son HaiBon Phan 12/15/2025 Provided
  - listitem: Son HaiBon Phan 12/15/2025 Provided
  - listitem: Son HaiBon Phan 12/14/2025 Provided
  - listitem: Son HaiBon Phan 12/14/2025 Provided
  - listitem: Son HaiBon Phan 12/14/2025 Provided
  - listitem: Son HaiBon Phan 12/13/2025 Provided
  - listitem: Son HaiBon Phan 12/13/2025 Provided
  - listitem: Son HaiBon Phan 12/12/2025 Provided
  - listitem: Son HaiBon Phan 12/12/2025 Provided
  - listitem: Son HaiBon Phan 12/11/2025 Provided
  - listitem: Son HaiBon Phan 12/11/2025 Provided
  - listitem: Son HaiBon Phan 12/10/2025 Provided
  - listitem: Son HaiBon Phan 12/10/2025 Provided
  - listitem: Son HaiBon Phan 12/10/2025 Provided
  - listitem: Son HaiBon Phan 12/09/2025 Provided
  - listitem: Son HaiBon Phan 12/09/2025 Provided
  - listitem: Son HaiBon Phan 12/08/2025 Provided
  - listitem: Son HaiBon Phan 12/08/2025 Provided
  - listitem: Son HaiBon Phan 12/07/2025 Provided
  - listitem: Son HaiBon Phan 12/07/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/06/2025 Provided
  - listitem: Son HaiBon Phan 12/05/2025 Provided
  - listitem: Son HaiBon Phan 12/05/2025 Provided
  - listitem: Son HaiBon Phan 12/04/2025 Provided
  - listitem: Son HaiBon Phan 12/04/2025 Provided
  - listitem: Son HaiBon Phan 12/03/2025 Provided
  - listitem: Son HaiBon Phan 12/03/2025 Provided
  - listitem: Son HaiBon Phan 12/02/2025 Provided
  - listitem: Son HaiBon Phan 12/02/2025 Provided
  - listitem: Son HaiBon Phan 12/01/2025 Provided
  - listitem: Son HaiBon Phan 12/01/2025 Provided
  - listitem: Son HaiBon Phan 12/01/2025 Provided
  - listitem: Son HaiBon Phan 11/30/2025 Provided
  - listitem: Son HaiBon Phan 11/30/2025 Provided
  - listitem: Son HaiBon Phan 11/29/2025 Provided
  - listitem: Son HaiBon Phan 11/29/2025 Provided
  - listitem: Son HaiBon Phan 11/28/2025 Provided
  - listitem: Son HaiBon Phan 11/28/2025 Provided
  - listitem: Son HaiBon Phan 11/27/2025 Provided
  - listitem: Son HaiBon Phan 11/27/2025 Provided
  - listitem: Son HaiBon Phan 11/26/2025 Provided
  - listitem: Son HaiBon Phan 11/26/2025 Provided
  - listitem: Son HaiBon Phan 11/25/2025 Provided
  - listitem: Son HaiBon Phan 11/25/2025 Provided
  - listitem: Son HaiBon Phan 11/24/2025 Provided
  - listitem: Son HaiBon Phan 11/24/2025 Provided
  - listitem: Son HaiBon Phan 11/24/2025 Provided
  - listitem: Son HaiBon Phan 11/23/2025 Provided
  - listitem: Son HaiBon Phan 11/23/2025 Provided
  - listitem: Son HaiBon Phan 11/22/2025 Provided
  - listitem: Son HaiBon Phan 11/21/2025 Provided
  - listitem: Son HaiBon Phan 11/21/2025 Provided
  - listitem: Son HaiBon Phan 11/20/2025 Provided
  - listitem: Son HaiBon Phan 11/20/2025 Provided
  - listitem: Son HaiBon Phan 11/19/2025 Provided
  - listitem: Son HaiBon Phan 11/19/2025 Provided
  - listitem: Son HaiBon Phan 11/18/2025 Provided
  - listitem: Son HaiBon Phan 11/18/2025 Provided
  - listitem: Son HaiBon Phan 11/17/2025 Provided
  - listitem: Son HaiBon Phan 11/17/2025 Provided
  - listitem: Son HaiBon Phan 11/16/2025 Provided
  - listitem: Son HaiBon Phan 11/16/2025 Provided
  - listitem: Son HaiBon Phan 11/15/2025 Provided
  - listitem: Son HaiBon Phan 11/15/2025 Provided
  - listitem: Son HaiBon Phan 11/14/2025 Provided
  - listitem: Son HaiBon Phan 11/14/2025 Provided
  - listitem: Son HaiBon Phan 11/13/2025 Provided
  - listitem: Son HaiBon Phan 11/13/2025 Provided
  - listitem: Son HaiBon Phan 11/13/2025 Provided
  - listitem: Son HaiBon Phan 11/12/2025 Provided
  - listitem: Son HaiBon Phan 11/12/2025 Provided
  - listitem: Son HaiBon Phan 11/12/2025 Provided
  - listitem: Son HaiBon Phan 11/11/2025 Provided
  - listitem: Son HaiBon Phan 11/11/2025 Provided
  - listitem: Son HaiBon Phan 11/10/2025 Provided
  - listitem: Son HaiBon Phan 11/10/2025 Provided
  - listitem: Son HaiBon Phan 11/09/2025 Provided
  - listitem: Son HaiBon Phan 11/09/2025 Provided
  - listitem: Son HaiBon Phan 11/08/2025 Provided
  - listitem: Son HaiBon Phan 11/07/2025 Provided
  - listitem: Son HaiBon Phan 11/07/2025 Provided
  - listitem: Son HaiBon Phan 11/06/2025 Provided
  - listitem: Son HaiBon Phan 11/06/2025 Provided
  - listitem: Son HaiBon Phan 11/05/2025 Provided
  - listitem: Son HaiBon Phan 11/05/2025 Provided
  - listitem: Son HaiBon Phan 11/04/2025 Provided
  - listitem: Son HaiBon Phan 11/04/2025 Provided
  - listitem: Son HaiBon Phan 11/04/2025 Provided
  - listitem: Son HaiBon Phan 11/02/2025 Provided
  - listitem: Son HaiBon Phan 11/02/2025 Provided
  - listitem: Son HaiBon Phan 11/01/2025 Provided
  - listitem: Son HaiBon Phan 11/01/2025 Provided
  - listitem: Son HaiBon Phan 10/31/2025 Provided
  - listitem: Son HaiBon Phan 10/31/2025 Provided
  - listitem: Son HaiBon Phan 10/30/2025 Provided
  - listitem: Son HaiBon Phan 10/30/2025 Provided
  - listitem: Son HaiBon Phan 10/29/2025 Provided
  - listitem: Son HaiBon Phan 10/29/2025 Provided
  - listitem: Son HaiBon Phan 10/28/2025 Provided
  - listitem: Son HaiBon Phan 10/28/2025 Provided
  - listitem: Son HaiBon Phan 10/27/2025 Provided
  - listitem: Son HaiBon Phan 10/27/2025 Provided
  - listitem: Son HaiBon Phan 10/27/2025 Provided
  - listitem: Son HaiBon Phan 10/23/2025 Provided
  - listitem: Son HaiBon Phan 10/23/2025 Provided
  - listitem: Son HaiBon Phan 10/22/2025 Provided
  - listitem: Son HaiBon Phan 10/22/2025 Provided
  - listitem: Son HaiBon Phan 10/21/2025 Provided
  - listitem: Son HaiBon Phan 10/21/2025 Provided
  - listitem: Son HaiBon Phan 10/20/2025 Provided
  - listitem: Son HaiBon Phan 10/20/2025 Provided
  - listitem: Son HaiBon Phan 10/19/2025 Provided
  - listitem: Son HaiBon Phan 10/19/2025 Provided
  - listitem: Son HaiBon Phan 10/18/2025 Provided
  - listitem: Son HaiBon Phan 10/18/2025 Provided
  - listitem: Son HaiBon Phan 10/17/2025 Provided
  - listitem: Son HaiBon Phan 10/17/2025 Provided
  - listitem: Son HaiBon Phan 10/16/2025 Provided
  - listitem: Son HaiBon Phan 10/16/2025 Provided
  - listitem: Son HaiBon Phan 10/15/2025 Provided
  - listitem: Son HaiBon Phan 10/15/2025 Provided
  - listitem: Son HaiBon Phan 10/14/2025 Provided
  - listitem: Son HaiBon Phan 10/14/2025 Provided
  - listitem: Son HaiBon Phan 10/13/2025 Provided
  - listitem: Son HaiBon Phan 10/13/2025 Provided
  - listitem: Son HaiBon Phan 10/12/2025 Provided
  - listitem: Son HaiBon Phan 10/12/2025 Provided
  - listitem: Son HaiBon Phan 10/11/2025 Provided
  - listitem: Son HaiBon Phan 10/11/2025 Provided
  - listitem: Son HaiBon Phan 10/10/2025 Provided
  - listitem: Son HaiBon Phan 10/10/2025 Provided
  - listitem: Son HaiBon Phan 10/09/2025 Provided
  - listitem: Son HaiBon Phan 10/09/2025 Provided
  - listitem: Son HaiBon Phan 10/08/2025 Provided
  - listitem: Son HaiBon Phan 10/08/2025 Provided
  - listitem: Son HaiBon Phan 10/07/2025 Provided
  - listitem: Son HaiBon Phan 10/07/2025 Provided
  - listitem: Son HaiBon Phan 10/06/2025 Provided
  - listitem: Son HaiBon Phan 10/06/2025 Provided
  - listitem: Son HaiBon Phan 10/05/2025 Provided
  - listitem: Son HaiBon Phan 10/05/2025 Provided
  - listitem: Son HaiBon Phan 10/04/2025 Provided
  - listitem: Son HaiBon Phan 10/04/2025 Provided
  - listitem: Son HaiBon Phan 10/03/2025 Provided
  - listitem: Son HaiBon Phan 10/03/2025 Provided
  - listitem: Son HaiBon Phan 10/02/2025 Provided
  - listitem: Son HaiBon Phan 10/02/2025 Provided
  - listitem: Son HaiBon Phan 10/02/2025 Provided
  - listitem: Son HaiBon Phan 10/01/2025 Provided
  - listitem: Son HaiBon Phan 10/01/2025 Provided
  - listitem: Son HaiBon Phan 09/30/2025 Provided
  - listitem: Son HaiBon Phan 09/30/2025 Provided
  - listitem: Son HaiBon Phan 09/29/2025 Provided
  - listitem: Son HaiBon Phan 09/29/2025 Provided
  - listitem: Son HaiBon Phan 09/29/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/28/2025 Provided
  - listitem: Son HaiBon Phan 09/25/2025 Provided
  - listitem: Son HaiBon Phan 09/24/2025 Provided
  - listitem: Son HaiBon Phan 09/24/2025 Provided
  - listitem: Son HaiBon Phan 09/24/2025 Provided
  - listitem: Son HaiBon Phan 09/23/2025 Provided
  - listitem: Son HaiBon Phan 09/23/2025 Provided
  - listitem: Son HaiBon Phan 09/23/2025 Provided
  - listitem: Son HaiBon Phan 09/22/2025 Provided
  - listitem: Son HaiBon Phan 09/22/2025 Provided
  - listitem: Son HaiBon Phan 09/21/2025 Provided
  - listitem: Son HaiBon Phan 09/21/2025 Provided
  - listitem: Son HaiBon Phan 09/20/2025 Provided
  - listitem: Son HaiBon Phan 09/20/2025 Provided
  - listitem: Son HaiBon Phan 09/19/2025 Provided
  - listitem: Son HaiBon Phan 09/19/2025 Provided
  - listitem: Son HaiBon Phan 09/18/2025 Provided
  - listitem: Son HaiBon Phan 09/18/2025 Provided
  - listitem: Son HaiBon Phan 09/18/2025 Provided
  - listitem: Son HaiBon Phan 09/17/2025 Provided
  - listitem: Son HaiBon Phan 09/17/2025 Provided
  - listitem: Son HaiBon Phan 09/16/2025 Provided
  - listitem: Son HaiBon Phan 09/16/2025 Provided
  - listitem: Son HaiBon Phan 09/15/2025 Provided
  - listitem: Son HaiBon Phan 09/15/2025 Provided
  - listitem: Son HaiBon Phan 09/15/2025 Provided
  - listitem: Son HaiBon Phan 09/14/2025 Provided
  - listitem: Son HaiBon Phan 09/13/2025 Provided
  - listitem: Son HaiBon Phan 09/13/2025 Provided
  - listitem: Son HaiBon Phan 09/12/2025 Provided
  - listitem: Son HaiBon Phan 09/12/2025 Provided
  - listitem: Son HaiBon Phan 09/11/2025 Provided
  - listitem: Son HaiBon Phan 09/11/2025 Provided
  - listitem: Son HaiBon Phan 09/10/2025 Provided
  - listitem: Son HaiBon Phan 09/10/2025 Provided
  - listitem: Son HaiBon Phan 09/10/2025 Provided
  - listitem: Son HaiBon Phan 09/09/2025 Provided
  - listitem: Son HaiBon Phan 09/09/2025 Provided
  - listitem: Son HaiBon Phan 09/08/2025 Provided
  - listitem: Son HaiBon Phan 09/08/2025 Provided
  - listitem: Son HaiBon Phan 09/08/2025 Provided
  - listitem: Son HaiBon Phan 09/07/2025 Provided
  - listitem: Son HaiBon Phan 09/07/2025 Provided
  - listitem: Son HaiBon Phan 09/06/2025 Provided
  - listitem: Son HaiBon Phan 09/06/2025 Provided
  - listitem: Son HaiBon Phan 09/05/2025 Provided
  - listitem: Son HaiBon Phan 09/05/2025 Provided
  - listitem: Son HaiBon Phan 09/04/2025 Provided
  - listitem: Son HaiBon Phan 09/04/2025 Provided
  - listitem: Son HaiBon Phan 09/03/2025 Provided
  - listitem: Son HaiBon Phan 09/03/2025 Provided
  - listitem: Son HaiBon Phan 09/03/2025 Provided
  - listitem: Son HaiBon Phan 09/02/2025 Provided
  - listitem: Son HaiBon Phan 09/02/2025 Provided
  - listitem: Son HaiBon Phan 09/01/2025 Provided
  - listitem: Son HaiBon Phan 09/01/2025 Provided
  - listitem: Son HaiBon Phan 08/31/2025 Provided
  - listitem: Son HaiBon Phan 08/31/2025 Provided
  - listitem: Son HaiBon Phan 08/30/2025 Provided
  - listitem: Son HaiBon Phan 08/30/2025 Provided
  - listitem: Son HaiBon Phan 08/29/2025 Provided
  - listitem: Son HaiBon Phan 08/29/2025 Provided
  - listitem: Son HaiBon Phan 08/28/2025 Provided
  - listitem: Son HaiBon Phan 08/28/2025 Provided
  - listitem: Son HaiBon Phan 08/27/2025 Provided
  - listitem: Son HaiBon Phan 08/27/2025 Provided
  - listitem: Son HaiBon Phan 08/26/2025 Provided
  - listitem: Son HaiBon Phan 08/26/2025 Provided
  - listitem: Son HaiBon Phan 08/25/2025 Provided
  - listitem: Son HaiBon Phan 08/25/2025 Provided
  - listitem: Son HaiBon Phan 08/25/2025 Provided
  - listitem: Son HaiBon Phan 08/25/2025 Provided
  - listitem: Son HaiBon Phan 08/24/2025 Provided
  - listitem: Son HaiBon Phan 08/24/2025 Provided
  - listitem: Son HaiBon Phan 08/23/2025 Provided
  - listitem: Son HaiBon Phan 08/23/2025 Provided
  - listitem: Son HaiBon Phan 08/22/2025 Provided
  - listitem: Son HaiBon Phan 08/22/2025 Provided
  - listitem: Son HaiBon Phan 08/22/2025 Provided
  - listitem: Son HaiBon Phan 08/21/2025 Provided
  - listitem: Son HaiBon Phan 08/21/2025 Provided
  - listitem: Son HaiBon Phan 08/20/2025 Provided
  - listitem: Son HaiBon Phan 08/20/2025 Provided
  - listitem: Son HaiBon Phan 08/19/2025 Provided
  - listitem: Son HaiBon Phan 08/19/2025 Provided
  - listitem: Son HaiBon Phan 08/19/2025 Provided
  - listitem: Son HaiBon Phan 08/18/2025 Provided
  - listitem: Son HaiBon Phan 08/18/2025 Provided
  - listitem: Son HaiBon Phan 08/17/2025 Provided
  - listitem: Son HaiBon Phan 08/17/2025 Provided
  - listitem: Son HaiBon Phan 08/16/2025 Provided
  - listitem: Son HaiBon Phan 08/16/2025 Provided
  - listitem: Son HaiBon Phan 08/15/2025 Provided
  - listitem: Son HaiBon Phan 08/15/2025 Provided
  - listitem: Son HaiBon Phan 08/14/2025 Provided
  - listitem: Son HaiBon Phan 08/14/2025 Provided
  - listitem: Son HaiBon Phan 08/13/2025 Provided
  - listitem: Son HaiBon Phan 08/13/2025 Provided
  - listitem: Son HaiBon Phan 08/13/2025 Provided
  - listitem: Son HaiBon Phan 08/13/2025 Provided
  - listitem: Son HaiBon Phan 08/13/2025 Provided
  - listitem: Son HaiBon Phan 08/12/2025 Provided
  - listitem: Son HaiBon Phan 08/12/2025 Provided
  - listitem: Son HaiBon Phan 08/12/2025 Provided
  - listitem: Son HaiBon Phan 08/11/2025 Provided
  - listitem: Son HaiBon Phan 08/11/2025 Provided
  - listitem: Son HaiBon Phan 08/11/2025 Provided
  - listitem: Son HaiBon Phan 08/10/2025 Provided
  - listitem: Son HaiBon Phan 08/09/2025 Provided
  - listitem: Son HaiBon Phan 08/09/2025 Provided
  - listitem: Son HaiBon Phan 08/08/2025 Provided
  - listitem: Son HaiBon Phan 08/08/2025 Provided
  - listitem: Son HaiBon Phan 08/08/2025 Provided
  - listitem: Son HaiBon Phan 08/08/2025 Provided
  - listitem: Son HaiBon Phan 08/08/2025 Provided
  - listitem: Son HaiBon Phan 08/07/2025 Provided
  - listitem: Son HaiBon Phan 08/07/2025 Provided
  - listitem: Son HaiBon Phan 08/07/2025 Provided
  - listitem: Son HaiBon Phan 08/07/2025 Provided
  - listitem: Son HaiBon Phan 08/06/2025 Provided
  - listitem: Son HaiBon Phan 08/06/2025 Provided
  - listitem: Son HaiBon Phan 08/05/2025 Provided
  - listitem: Son HaiBon Phan 08/05/2025 Provided
  - listitem: Son HaiBon Phan 08/05/2025 Provided
  - listitem: Son HaiBon Phan 08/04/2025 Provided
  - listitem: Son HaiBon Phan 08/04/2025 Provided
  - listitem: Son HaiBon Phan 08/03/2025 Provided
  - listitem: Son HaiBon Phan 08/03/2025 Provided
  - listitem: Son HaiBon Phan 08/01/2025 Provided
  - listitem: Son HaiBon Phan 08/01/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/30/2025 Provided
  - listitem: Son HaiBon Phan 07/23/2025 Provided
  - listitem: Son HaiBon Phan 07/23/2025 Provided
  - listitem: Son HaiBon Phan 07/22/2025 Provided
  - listitem: Son HaiBon Phan 07/22/2025 Provided
  - listitem: Son HaiBon Phan 07/21/2025 Provided
  - listitem: Son HaiBon Phan 07/21/2025 Provided
  - listitem: Son HaiBon Phan 07/20/2025 Provided
  - listitem: Son HaiBon Phan 07/20/2025 Provided
  - listitem: Son HaiBon Phan 07/19/2025 Provided
  - listitem: Son HaiBon Phan 07/19/2025 Provided
  - listitem: Son HaiBon Phan 07/18/2025 Provided
  - listitem: Son HaiBon Phan 07/18/2025 Provided
  - listitem: Son HaiBon Phan 07/17/2025 Provided
  - listitem: Son HaiBon Phan 07/17/2025 Provided
  - listitem: Son HaiBon Phan 07/16/2025 Provided
  - listitem: Son HaiBon Phan 07/16/2025 Provided
  - listitem: Son HaiBon Phan 07/16/2025 Provided
  - listitem: Son HaiBon Phan 07/15/2025 Provided
  - listitem: Son HaiBon Phan 07/15/2025 Provided
  - listitem: Son HaiBon Phan 07/15/2025 Provided
  - listitem: "Son HaiBon Phan 07/15/2025 Record Request: Medical & Billing"
- heading "Discussion" [level=2]
- text: Start a discussion
- img
- heading "Son HaiBon Phan (You)" [level=4]
- img
- heading "Team Discussion" [level=4]
- img
- heading "Discussion" [level=2]
- text: Start a discussion
- img
- heading "Son HaiBon Phan (You)" [level=4]
- img
- heading "Team Discussion" [level=4]
- img
- img "image-share-this-request"
- paragraph: Share this request using the Share button.
- text: Share
- 'heading "Prepare Records - Case #235054" [level=3]'
- button "Close"
- paragraph: Use the suggested content to jump right in, or type or upload your own content.
- listitem: Type New
- listitem: Upload
- text: Click on
- img
- text: to expand the editor to full screen
- iframe
- text: You can upload up to 50 files, with a total combined size of up to 50MB. Only PDF and image (jpg,jpeg,png) files are accepted.
- paragraph: Browse or Drop
- paragraph: files here
- img
- paragraph: PROVIDED Affidavit of Billing Records for John Doe 20245
- text: 125 KB
- img
- button "Back"
- button "Submit"
```

# Test source

```ts
  1156 |             const expectedSuggestedBalance = parseFloat((balanceBeforeValue - expectedReductionOffer).toFixed(2));
  1157 |
  1158 |             expect(actualReductionOffer).toBeCloseTo(expectedReductionOffer, 2);
  1159 |             expect(suggestedBalanceValue).toBeCloseTo(expectedSuggestedBalance, 2);
  1160 |         });
  1161 |
  1162 |         await test.step("Verify change suggested Balance will change the reduction", async () => {
  1163 |             const balanceBeforeValue = extractNumber(await requestPage.requestLoc.detail.snapshot.inputBalance.inputValue());
  1164 |             const randomSuggestedBalance = getRandomNumberInRange(balanceBeforeValue - 1, 1);
  1165 |             await requestPage.requestLoc.detail.snapshot.inputTotal.fill(randomSuggestedBalance.toString());
  1166 |
  1167 |             const expectedReductionOffer = parseFloat((balanceBeforeValue - randomSuggestedBalance).toFixed(2));
  1168 |             const actualReductionOffer = extractNumber(await requestPage.requestLoc.detail.snapshot.inputReductionOffer.inputValue());
  1169 |
  1170 |             const actualReductionPercentage = extractNumber(await requestPage.requestLoc.detail.snapshot.inputReduction.inputValue());
  1171 |             const expectedReductionPercentage = parseFloat((expectedReductionOffer / balanceBeforeValue * 100).toFixed(2));
  1172 |
  1173 |             expect(actualReductionOffer).toBeCloseTo(expectedReductionOffer, 2);
  1174 |             expect(actualReductionPercentage).toBeCloseTo(expectedReductionPercentage, 2);
  1175 |
  1176 |             await requestPage.requestLoc.detail.btnCancelModalMessage.click();
  1177 |         });
  1178 |
  1179 |         await test.step("Verify when change update medical bill", async () => {
  1180 |             const newBalance = getRandomNumberInRange(20000, 1);
  1181 |             await requestPage.dashboardLoc.buttonLinkByText("Update Balance").click();
  1182 |             await expect(requestPage.dashboardLoc.modal.headerModal("Message")).toBeVisible();
  1183 |             await requestPage.requestLoc.detail.snapshot.inputTotal.fill(newBalance.toString());
  1184 |             const balanceInMessage = await requestPage.requestLoc.detail.snapshot.balanceValueInMessage.innerText();
  1185 |             expect(parseFloat(balanceInMessage.replace(/[^0-9.-]/g, ""))).toBe(newBalance);
  1186 |         })
  1187 |     });
  1188 |
  1189 |     test("REQ_036 - Verify when change Medicall bill Star had change Medicall Bill in Affidavit", {
  1190 |         tag: ["@REQ_036", "@request", "@function"]
  1191 |     }, async ({ conf, requestPage36 }) => {
  1192 |         await test.step("Check medical bill before change star", async () => {
  1193 |             await expect(requestPage36.requestLoc.detail.snapshot.titleMedicalBillStar).toContainText(conf.data.request_first);
  1194 |             const listPostMedicalBill = (await requestPage36.requestLoc.detail.snapshot.listPostMedicalbill.all()).length;
  1195 |             expect(listPostMedicalBill).toBe(2);
  1196 |             await requestPage36.requestLoc.detail.snapshot.btnCloseModal.click();
  1197 |         })
  1198 |
  1199 |         await test.step("Check medical bill after change star", async () => {
  1200 |             await requestPage36.requestLoc.detail.caseID(conf.data.case_client).click();
  1201 |             let casePage = new CasePage(requestPage36.page);
  1202 |             await casePage.changeStarFocus(conf.data.request_second);
  1203 |             await requestPage36.open();
  1204 |             await requestPage36.getDetailRequest(conf.data.case);
  1205 |
  1206 |             await requestPage36.dashboardLoc.buttonLinkByText("Provide").click();
  1207 |             await expect(requestPage36.dashboardLoc.modal.headerModalContainText("Prepare Records")).toBeVisible();
  1208 |
  1209 |             await expect(requestPage36.requestLoc.detail.snapshot.titleMedicalBillStar).toContainText(conf.data.request_second);
  1210 |             const listPostMedicalBill = (await requestPage36.requestLoc.detail.snapshot.listPostMedicalbill.all()).length;
  1211 |             expect(listPostMedicalBill).toBe(1);
  1212 |         })
  1213 |     })
  1214 |
  1215 |     test("REQ_037 - Verify prodive manually Affidavit", {
  1216 |         tag: ["@REQ_037", "@request", "@function"]
  1217 |     }, async ({ conf }) => {
  1218 |         const filePath1 = path.resolve(__dirname, 'file/file-test.pdf');
  1219 |         const filePath2 = path.resolve(__dirname, 'file/img-test.png');
  1220 |         const filePathExceedMaximum = path.resolve(__dirname, 'file/file-test-50mb.pdf');
  1221 |         const filePathInvalid = path.resolve(__dirname, 'file/file-test-invalid-type.exe');
  1222 |
  1223 |         await test.step("Verify open modal update maunualy", async () => {
  1224 |             await requestPage.getDetailCase(conf.data.case);
  1225 |             await requestPage.dashboardLoc.buttonLinkByText("Provide").click();
  1226 |             await expect(requestPage.dashboardLoc.modal.headerModalContainText("Prepare Records")).toBeVisible();
  1227 |             await requestPage.dashboardLoc.buttonByText("Skip, upload manually").click();
  1228 |         })
  1229 |
  1230 |         await test.step("Verify upload exceed size file", async () => {
  1231 |             await requestPage.requestLoc.detail.snapshot.inputUploadFile.setInputFiles(filePathExceedMaximum);
  1232 |             await expect(requestPage.dashboardLoc.modal.errorMessageSpan(conf.data.message_error_maximum)).toBeVisible({ timeout: 20_000 });
  1233 |         });
  1234 |
  1235 |         await test.step("Verify upload invalid file", async () => {
  1236 |             await requestPage.requestLoc.detail.snapshot.inputUploadFile.setInputFiles(filePathInvalid);
  1237 |             await expect(requestPage.dashboardLoc.tag.errorMaxTag).toContainText(conf.data.message_invalid_file, { timeout: 15_000 });
  1238 |         });
  1239 |
  1240 |         await test.step("Verify upload more than maximum allowed", async () => {
  1241 |             const filesArray = Array(51).fill(filePath1);
  1242 |             await requestPage.requestLoc.detail.snapshot.inputUploadFile.setInputFiles(filesArray);
  1243 |             await expect(requestPage.dashboardLoc.modal.errorMessageSpan(conf.data.message_error_maximum_file)).toBeVisible({ timeout: 20_000 });
  1244 |         });
  1245 |
  1246 |         await test.step("Verify upload maximum 50 files", async () => {
  1247 |             const buffer = fs.readFileSync(filePath1);
  1248 |             const filesArray = Array.from({ length: 49 }, (_, i) => ({
  1249 |                 name: `file-test-${i + 1}.pdf`,
  1250 |                 mimeType: 'application/pdf',
  1251 |                 buffer
  1252 |             }));
  1253 |             await requestPage.requestLoc.detail.snapshot.inputUploadFile.setInputFiles(filesArray, { timeout: 60_000 });
  1254 |             // await expect(requestPage.requestLoc.detail.uploadZone).not.toBeVisible();
  1255 |             for (let i = 0; i < 49; i++) {
> 1256 |                 await expect(requestPage.requestLoc.detail.snapshot.fileName(`file-test-${i + 1}.pdf`)).toBeVisible();
       |                                                                                                         ^ Error: Timed out 10000ms waiting for expect(locator).toBeVisible()
  1257 |             }
  1258 |             await expect(requestPage.dashboardLoc.modal.errorMessageSpan(conf.data.message_error_maximum_file)).not.toBeVisible({ timeout: 20_000 });
  1259 |         });
  1260 |
  1261 |         await test.step("Verify upload 2 file", async () => {
  1262 |             // Reopen modal to upload file again
  1263 |             await requestPage.requestLoc.detail.btnCancelModalMessage.click();
  1264 |             await expect(requestPage.dashboardLoc.modal.headerModalContainText("Prepare Records")).toBeVisible();
  1265 |             await requestPage.dashboardLoc.buttonByText("Skip, upload manually").click();
  1266 |             await requestPage.waitForSecond(5);
  1267 |             await expect(requestPage.dashboardLoc.common.spanText("Type New")).toBeVisible();
  1268 |             await requestPage.dashboardLoc.common.spanText("Type New").click({ force: true });
  1269 |             await requestPage.requestLoc.textEditorCreateCaseArea.fill("Data Test");
  1270 |             await requestPage.requestLoc.detail.snapshot.inputUploadFile.setInputFiles([filePath1, filePath2]);
  1271 |             await expect(requestPage.requestLoc.detail.snapshot.fileName("file-test.pdf")).toBeVisible();
  1272 |             await expect(requestPage.requestLoc.detail.snapshot.fileName("img-test.png")).toBeVisible();
  1273 |         });
  1274 |
  1275 |         await test.step("Verify submit post with file", async () => {
  1276 |             await requestPage.requestLoc.detail.btnSubmitMessage.click();
  1277 |             await expect(requestPage.requestLoc.messageRepondSucces.first()).toBeVisible();
  1278 |             await requestPage.dashboardLoc.buttonByText("Minimize").click();
  1279 |         });
  1280 |     });
  1281 |
  1282 |     test("REQ_038 - Affidavit - When Type New: Hide block “Files you have selected …”", {
  1283 |         tag: ["@REQ_038", "@request", "@function"]
  1284 |     }, async ({ conf }) => {
  1285 |         await test.step("Verify show box selected files", async () => {
  1286 |             await requestPage.getDetailCase(conf.data.case);
  1287 |             await requestPage.dashboardLoc.buttonLinkByText("Provide").click();
  1288 |             await requestPage.requestLoc.detail.snapshot.checkFileAffidatvit.first().click();
  1289 |             await requestPage.requestLoc.detail.btnNextPrepareRecord.click();
  1290 |             await expect(requestPage.requestLoc.detail.snapshot.boxSelectedFiles).toBeVisible({ timeout: 15_000 });
  1291 |         })
  1292 |
  1293 |         await test.step("Verify when change to type new not show box selected filess", async () => {
  1294 |             await requestPage.requestLoc.detail.snapshot.buttonTypeNew.click();
  1295 |             await expect(requestPage.requestLoc.detail.snapshot.boxSelectedFiles).not.toBeVisible();
  1296 |         })
  1297 |     })
  1298 |
  1299 |     test("REQ_040 - Verify add request to Cart from action and remove requests from cart", {
  1300 |         tag: ["@REQ_040", "@request", "@function"]
  1301 |     }, async ({ conf, checkCart }) => {
  1302 |         await test.step("Add request to cart", async () => {
  1303 |             await checkCart.search(conf.data.case);
  1304 |             await requestPage.waitForSecond(2);
  1305 |
  1306 |             await checkCart.requestLoc.detail.cartRequest.iconShowListCart.first().click();
  1307 |             await expect(checkCart.requestLoc.detail.cartRequest.titleListCart).toBeVisible();
  1308 |
  1309 |             //Add 8 requests from request page
  1310 |             for (let i = 0; i < 8; i++) {
  1311 |                 await checkCart.requestLoc.detail.cartRequest.itemsInListCart.first().click();
  1312 |             }
  1313 |             await expect(checkCart.requestLoc.detail.cartRequest.quickSubmitButton("8")).toBeVisible();
  1314 |
  1315 |             //Add more 2 requests in Fast submission
  1316 |             await checkCart.requestLoc.detail.cartRequest.quickSubmitButton("8").click();
  1317 |             await checkCart.dashboardLoc.buttonByText("Add more").click();
  1318 |             await checkCart.waitForSecond(0.5);
  1319 |             await checkCart.dashboardLoc.buttonByText("Add more").click();
  1320 |
  1321 |             const listRequest = (await checkCart.requestLoc.detail.cartRequest.listRequestsInFastCreate.all()).length;
  1322 |             expect(listRequest).toBe(10);
  1323 |             await checkCart.waitForSecond(2);
  1324 |         })
  1325 |
  1326 |         await test.step("Verify delete action type Letter of protection, medical bill and prescription", async () => {
  1327 |             let listRequest = (await checkCart.requestLoc.detail.cartRequest.listRequestsInFastCreate.all()).length;
  1328 |
  1329 |             while (listRequest > 7) {
  1330 |                 try {
  1331 |                     await checkCart.requestLoc.detail.cartRequest.deleteFirstCart.click();
  1332 |                     await checkCart.waitForSecond(3);
  1333 |                 } catch (error) {
  1334 |                     console.log("Error get list request", error);
  1335 |                     break;
  1336 |                 }
  1337 |                 listRequest = (await checkCart.requestLoc.detail.cartRequest.listRequestsInFastCreate.all()).length;
  1338 |             }
  1339 |
  1340 |             expect(listRequest).toBe(7);
  1341 |
  1342 |             await checkCart.dashboardLoc.cart.buttonCart.hover();
  1343 |             await expect(checkCart.dashboardLoc.cart.totalRequestsInCart("5")).toBeVisible()
  1344 |         })
  1345 |     })
  1346 |
  1347 |     test("REQ_041 - Verify when adding a request by hovering over the Case ID from two different business", {
  1348 |         tag: ["@REQ_041", "@request", "@function"]
  1349 |     }, async ({ conf, checkCart }) => {
  1350 |         await test.step("Add two requests from first request", async () => {
  1351 |             await checkCart.search(conf.data.case_first);
  1352 |             expect(async () => {
  1353 |                 const rowCount = await checkCart.getTableRowCount();
  1354 |                 expect(rowCount).toBe(1);
  1355 |
  1356 |             }).toPass();
```