# Test info

- Name: UI case for client tests >> SWR_015 - Verify Snapshot in request had action type Letter of Protection
- Location: /root/code/portal-automation-test/tests/share-with-me-request/function.spec.ts:441:7

# Error details

```
Error: locator.waitFor: Test timeout of 280000ms exceeded.
Call log:
  - waiting for locator('//p[text()=\'Added New Successfully!\']') to be visible

    at SharedRequestPage.respondToRequest (/root/code/portal-automation-test/pom/share-request.page.ts:177:50)
    at /root/code/portal-automation-test/tests/share-with-me-request/function.spec.ts:452:7
    at /root/code/portal-automation-test/tests/share-with-me-request/function.spec.ts:450:5
```

# 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:
  - button:
    - img
  - button:
    - img
  - img
  - text: Minh Phong shared details regarding New Case 123 Letter of Protection. See the information now. 3 days ago
  - img
  - text: "Get the details: Lawyer Phan's response to the Letter of Protection Test Request is now available. 3 days ago"
  - img
  - text: Son HaiBon Phan assigned a request to you 11 hours ago
  - img
  - text: Son HaiBon Phan assigned a case to you 1 hour ago
  - img
  - text: Tri01 Duc shared some information about New Guy 123 Letter of Protection. Find out what it says. 1 week ago
  - img
  - text: "Get the details: Lawyer Phan's response to the Letter of Protection Test Request is now available. 3 days ago"
  - img
  - text: Son HaiBon Phan assigned a request to you 11 hours ago
  - img
  - text: Son HaiBon Phan assigned a case to you 1 hour ago
  - 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 "2 Cart":
    - img
    - text: 2 Cart
  - text: Feedback
  - img
  - link "Open user menu":
    - /url: "#"
    - text: Minh
- img
- text: "#549574 Letter of Protection"
- img
- img
- text: "Jelena Julia - DOB: 06/25/1999 Category: Bus Accidents - DOI: __/__/____"
- 'button "Status: Open"'
- button "Status Details:":
  - text: "Status Details:"
  - listbox:
    - listitem:
      - text: Awaiting
      - img
  - img
- button:
  - img
- button:
  - img
- button "Activity":
  - img
  - text: Activity
- button "Share":
  - img
  - text: Share
- paragraph: Minh Phong
- text: Posted
- paragraph: 02/01/2026
- img
- list:
  - listitem
- textbox "Message"
- button [disabled]:
  - img
- paragraph: Minh Phong
- text: Posted
- paragraph: 01/31/2026
- img
- img
- list:
  - listitem
- textbox "Comment..."
- button [disabled]:
  - img
- paragraph: Minh Phong
- text: Posted
- paragraph: 01/31/2026
- img
- img
- list:
  - listitem
- textbox "Comment..."
- button [disabled]:
  - img
- paragraph: Minh Phong
- text: Posted
- paragraph: 01/30/2026
- img
- img
- list:
  - listitem
- textbox "Comment..."
- button [disabled]:
  - img
- paragraph: Minh Phong
- text: Posted
- paragraph: 01/30/2026
- img
- img
- list:
  - listitem
- textbox "Comment..."
- button [disabled]:
  - img
- heading "Snapshot" [level=2]
- list:
  - listitem: Minh Phong 12 hours ago Responded Respond
  - listitem: Minh Phong 1 day ago Responded
  - listitem: Minh Phong 1 day ago Responded
  - listitem: Minh Phong 1 day ago Responded
  - listitem: Minh Phong 01/30/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Tri01 Duc 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Tri01 Duc 01/29/2026 Responded
  - listitem: Minh Phong 01/29/2026 Responded
  - listitem: Minh Phong 01/28/2026 Responded
  - listitem: Minh Phong 01/28/2026 Responded
  - listitem: Minh Phong 01/28/2026 Responded
  - listitem: Minh Phong 01/27/2026 Responded
  - listitem: Tri01 Duc 01/27/2026 Responded
  - listitem: Minh Phong 01/27/2026 Responded
  - listitem: Tri01 Duc 01/26/2026 Responded
  - listitem: Minh Phong 01/26/2026 Responded
  - listitem: Minh Phong 01/26/2026 Responded
  - listitem: Tri01 Duc 01/14/2026 Responded
  - listitem: Minh Phong 01/14/2026 Responded
  - listitem: Tri01 Duc 01/13/2026 Responded
  - listitem: Minh Phong 01/13/2026 Responded
  - listitem: Tri01 Duc 01/13/2026 Responded
  - listitem: Minh Phong 01/13/2026 Responded
  - listitem: Tri01 Duc 01/12/2026 Responded
  - listitem: Minh Phong 01/12/2026 Responded
  - listitem: Tri01 Duc 01/12/2026 Responded
  - listitem: Minh Phong 01/12/2026 Responded
  - listitem: Tri01 Duc 01/11/2026 Responded
  - listitem: Minh Phong 01/11/2026 Responded
  - listitem: Tri01 Duc 01/11/2026 Responded
  - listitem: Minh Phong 01/11/2026 Responded
  - listitem: Tri01 Duc 01/10/2026 Responded
  - listitem: Minh Phong 01/10/2026 Responded
  - listitem: Tri01 Duc 01/10/2026 Responded
  - listitem: Minh Phong 01/10/2026 Responded
  - listitem: Tri01 Duc 01/09/2026 Responded
  - listitem: Minh Phong 01/09/2026 Responded
  - listitem: Tri01 Duc 01/09/2026 Responded
  - listitem: Minh Phong 01/09/2026 Responded
  - listitem: Tri01 Duc 01/08/2026 Responded
  - listitem: Minh Phong 01/08/2026 Responded
  - listitem: Tri01 Duc 01/08/2026 Responded
  - listitem: Minh Phong 01/08/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Tri01 Duc 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/07/2026 Responded
  - listitem: Minh Phong 01/06/2026 Responded
  - listitem: Minh Phong 01/06/2026 Responded
  - listitem: Minh Phong 01/06/2026 Responded
  - listitem: Minh Phong 01/06/2026 Responded
  - listitem: Minh Phong 01/05/2026 Responded
  - listitem: Minh Phong 01/05/2026 Responded
  - listitem: Tri01 Duc 01/04/2026 Responded
  - listitem: Minh Phong 01/04/2026 Responded
  - listitem: Tri01 Duc 01/04/2026 Responded
  - listitem: Minh Phong 01/04/2026 Responded
  - listitem: Tri01 Duc 01/03/2026 Responded
  - listitem: Minh Phong 01/03/2026 Responded
  - listitem: Tri01 Duc 01/03/2026 Responded
  - listitem: Minh Phong 01/03/2026 Responded
  - listitem: Tri01 Duc 01/02/2026 Responded
  - listitem: Minh Phong 01/02/2026 Responded
  - listitem: Tri01 Duc 01/02/2026 Responded
  - listitem: Minh Phong 01/02/2026 Responded
  - listitem: Tri01 Duc 01/01/2026 Responded
  - listitem: Minh Phong 01/01/2026 Responded
  - listitem: Tri01 Duc 01/01/2026 Responded
  - listitem: Minh Phong 01/01/2026 Responded
  - listitem: Tri01 Duc 12/31/2025 Responded
  - listitem: Minh Phong 12/31/2025 Responded
  - listitem: Tri01 Duc 12/31/2025 Responded
  - listitem: Minh Phong 12/31/2025 Responded
  - listitem: Tri01 Duc 12/30/2025 Responded
  - listitem: Minh Phong 12/30/2025 Responded
  - listitem: Tri01 Duc 12/30/2025 Responded
  - listitem: Minh Phong 12/30/2025 Responded
  - listitem: Tri01 Duc 12/29/2025 Responded
  - listitem: Minh Phong 12/29/2025 Responded
  - listitem: Tri01 Duc 12/29/2025 Responded
  - listitem: Minh Phong 12/29/2025 Responded
  - listitem: Tri01 Duc 12/28/2025 Responded
  - listitem: Minh Phong 12/28/2025 Responded
  - listitem: Tri01 Duc 12/28/2025 Responded
  - listitem: Minh Phong 12/28/2025 Responded
  - listitem: Tri01 Duc 12/27/2025 Responded
  - listitem: Minh Phong 12/27/2025 Responded
  - listitem: Tri01 Duc 12/27/2025 Responded
  - listitem: Minh Phong 12/27/2025 Responded
  - listitem: Tri01 Duc 12/26/2025 Responded
  - listitem: Minh Phong 12/26/2025 Responded
  - listitem: Tri01 Duc 12/26/2025 Responded
  - listitem: Minh Phong 12/26/2025 Responded
  - listitem: Tri01 Duc 12/25/2025 Responded
  - listitem: Minh Phong 12/25/2025 Responded
  - listitem: Tri01 Duc 12/25/2025 Responded
  - listitem: Minh Phong 12/25/2025 Responded
  - listitem: Minh Phong 12/24/2025 Responded
  - listitem: Minh Phong 12/24/2025 Responded
  - listitem: Tri01 Duc 12/23/2025 Responded
  - listitem: Minh Phong 12/23/2025 Responded
  - listitem: Tri01 Duc 12/23/2025 Responded
  - listitem: Minh Phong 12/23/2025 Responded
  - listitem: Tri01 Duc 12/22/2025 Responded
  - listitem: Minh Phong 12/22/2025 Responded
  - listitem: Tri01 Duc 12/22/2025 Responded
  - listitem: Minh Phong 12/22/2025 Responded
  - listitem: Tri01 Duc 12/21/2025 Responded
  - listitem: Minh Phong 12/21/2025 Responded
  - listitem: Tri01 Duc 12/20/2025 Responded
  - listitem: Minh Phong 12/20/2025 Responded
  - listitem: Tri01 Duc 12/19/2025 Responded
  - listitem: Minh Phong 12/19/2025 Responded
  - listitem: Tri01 Duc 12/19/2025 Responded
  - listitem: Minh Phong 12/19/2025 Responded
  - listitem: Tri01 Duc 12/18/2025 Responded
  - listitem: Minh Phong 12/18/2025 Responded
  - listitem: Tri01 Duc 12/18/2025 Responded
  - listitem: Minh Phong 12/18/2025 Responded
  - listitem: Tri01 Duc 12/17/2025 Responded
  - listitem: Minh Phong 12/17/2025 Responded
  - listitem: Tri01 Duc 12/17/2025 Responded
  - listitem: Minh Phong 12/17/2025 Responded
  - listitem: Tri01 Duc 12/16/2025 Responded
  - listitem: Minh Phong 12/16/2025 Responded
  - listitem: Tri01 Duc 12/16/2025 Responded
  - listitem: Minh Phong 12/16/2025 Responded
  - listitem: Tri01 Duc 12/15/2025 Responded
  - listitem: Minh Phong 12/15/2025 Responded
  - listitem: Tri01 Duc 12/15/2025 Responded
  - listitem: Minh Phong 12/15/2025 Responded
  - listitem: Tri01 Duc 12/14/2025 Responded
  - listitem: Minh Phong 12/14/2025 Responded
  - listitem: Tri01 Duc 12/14/2025 Responded
  - listitem: Minh Phong 12/14/2025 Responded
  - listitem: Minh Phong 12/14/2025 Responded
  - listitem: Tri01 Duc 12/13/2025 Responded
  - listitem: Minh Phong 12/13/2025 Responded
  - listitem: Tri01 Duc 12/13/2025 Responded
  - listitem: Minh Phong 12/13/2025 Responded
  - listitem: Tri01 Duc 12/12/2025 Responded
  - listitem: Minh Phong 12/12/2025 Responded
  - listitem: Tri01 Duc 12/12/2025 Responded
  - listitem: Minh Phong 12/12/2025 Responded
  - listitem: Tri01 Duc 12/11/2025 Responded
  - listitem: Minh Phong 12/11/2025 Responded
  - listitem: Tri01 Duc 12/10/2025 Responded
  - listitem: Minh Phong 12/10/2025 Responded
  - listitem: Tri01 Duc 12/09/2025 Responded
  - listitem: Minh Phong 12/09/2025 Responded
  - listitem: Minh Phong 12/09/2025 Responded
  - listitem: Tri01 Duc 12/09/2025 Submitted a request
- heading "Discussion" [level=2]
- text: Start a discussion
- img
- heading "Minh Phong (You)" [level=4]
- img
- heading "Discussion" [level=2]
- text: Start a discussion
- img
- heading "Minh Phong (You)" [level=4]
- img
- img "image-share-this-request"
- paragraph: Share this request using the Share button.
- text: Share
- heading "Message" [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
- listitem "Font family":
  - button:
    - img
  - img
- listitem "Font size":
  - button [pressed]:
    - img
  - img
- listitem "Fill color or set the text color":
  - button:
    - img
  - img
- listitem "Bold":
  - button:
    - img
- listitem "Italic":
  - button:
    - img
- listitem "Underline":
  - button:
    - img
- listitem "Strike through":
  - button:
    - img
- listitem "Insert Unordered List":
  - button:
    - img
  - img
- listitem "Insert Ordered List":
  - button:
    - img
  - img
- listitem "Align":
  - button:
    - img
  - img
- listitem "Insert Image":
  - button:
    - img
- listitem "Insert table":
  - button:
    - img
- listitem "Open in fullsize":
  - button:
    - img
- paragraph: Hello world
- text: "Chars: 10 Words: 2"
- listitem "Select all":
  - button:
    - img
- button "p"
- 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
- button "Cancel"
- button "Submit"
```

# Test source

```ts
   77 |         }
   78 |     }
   79 |
   80 |     get shareRequestProps() {
   81 |         return {
   82 |             filterProperties: [
   83 |                 {
   84 |                     name: 'patient',
   85 |                     type: 'input'
   86 |                 },
   87 |                 {
   88 |                     name: 'from_business_name',
   89 |                     type: 'select'
   90 |                 },
   91 |                 {
   92 |                     name: 'to_business_name',
   93 |                     type: 'select'
   94 |                 }
   95 |             ],
   96 |             threeDotDropdownMenus: {
   97 |                 customizedColumn: 'Customized Columns',
   98 |             },
   99 |             customizedColumns: [
  100 |                 {
  101 |                     name: 'Pin',
  102 |                     default: true,
  103 |                     tableDisplayName: 'Pin'
  104 |                 },
  105 |                 {
  106 |                     name: 'Request #',
  107 |                     default: true,
  108 |                     tableDisplayName: 'Request #'
  109 |                 },
  110 |                 {
  111 |                     name: 'Request Type',
  112 |                     default: true,
  113 |                     tableDisplayName: 'Request Type'
  114 |                 },
  115 |                 {
  116 |                     name: 'Client Name',
  117 |                     default: true,
  118 |                     tableDisplayName: 'Client Name'
  119 |                 },
  120 |                 {
  121 |                     name: 'Creator',
  122 |                     default: true,
  123 |                     tableDisplayName: 'Creator'
  124 |                 },
  125 |                 {
  126 |                     name: 'Directed To',
  127 |                     default: true,
  128 |                     tableDisplayName: 'Directed To'
  129 |                 },
  130 |                 {
  131 |                     name: 'Status',
  132 |                     default: true,
  133 |                     tableDisplayName: 'Status'
  134 |                 },
  135 |                 {
  136 |                     name: 'Status Details',
  137 |                     default: true,
  138 |                     tableDisplayName: 'Status Details'
  139 |                 },
  140 |                 {
  141 |                     name: 'Submitted User',
  142 |                     default: false,
  143 |                     tableDisplayName: 'Submitted User'
  144 |                 },
  145 |                 {
  146 |                     name: 'Received',
  147 |                     default: false,
  148 |                     tableDisplayName: 'Received'
  149 |                 },
  150 |                 {
  151 |                     name: 'Updated',
  152 |                     default: false,
  153 |                     tableDisplayName: 'Updated'
  154 |                 }
  155 |             ]
  156 |         }
  157 |     }
  158 |
  159 |     // Login as another user in a new browser context and return the new RequestPage
  160 |     async loginInAnotherBrowser(browser: Browser, username: string, password: string): Promise<{ context: BrowserContext; page: Page; sharedRequestPage: SharedRequestPage }> {
  161 |         const context = await browser.newContext();
  162 |         const page = await context.newPage();
  163 |         const loginPage = new LoginPage(page);
  164 |         await loginPage.open();
  165 |         await loginPage.login(username, password);
  166 |         await expect(loginPage.baseLoc.dashboardContainer).toBeVisible({ timeout: 15_000 });
  167 |         return { context, page, sharedRequestPage: new SharedRequestPage(page) };
  168 |     }
  169 |
  170 |     async respondToRequest(message: string): Promise<void> {
  171 |         const textEditorBody = this.shareRequestLoc.textEditorCreateCaseArea;
  172 |         await this.shareRequestLoc.buttonRepond.waitFor({ state: 'visible' });
  173 |         await this.shareRequestLoc.buttonRepond.click({ force: true });
  174 |         await textEditorBody.waitFor({ state: 'visible' });
  175 |         await textEditorBody.type(message, { delay: 20 });
  176 |         await this.shareRequestLoc.btnSubmitMessage.click();
> 177 |         await this.dashboardLoc.msgCreateSuccess.waitFor({ state: 'visible' });
      |                                                  ^ Error: locator.waitFor: Test timeout of 280000ms exceeded.
  178 |         await textEditorBody.waitFor({ state: 'hidden' });
  179 |     }
  180 |
  181 |     async verifyPostSnapshot(): Promise<void> {
  182 |         await this.shareRequestLoc.thumbImagePosted.first().waitFor({ state: 'visible' });
  183 |         await this.shareRequestLoc.thumbImagePosted.first().click();
  184 |         await this.waitForSecond(2);
  185 |     }
  186 |
  187 |     async backToRequestList(): Promise<void> {
  188 |         if (await this.shareRequestLoc.btnBackToReq.isVisible()) {
  189 |             await this.shareRequestLoc.btnBackToReq.click();
  190 |         }
  191 |     }
  192 |
  193 |     async openLinkAndCompletePasscode(sharedRequestPage: SharedRequestPage, requestCtx: any, buttonLocator: Locator): Promise<SharedRequestPage> {
  194 |         const buttonPage = await buttonLocator.elementHandle().then(el => el?.ownerFrame()).then(frame => frame?.page()) || buttonLocator.page();
  195 |         const [newPage] = await Promise.all([
  196 |             buttonPage.context().waitForEvent('page'),
  197 |             buttonLocator.click()
  198 |         ]);
  199 |
  200 |         const newTabPage = new SharedRequestPage(newPage);
  201 |         await newTabPage.dashboardLoc.buttonByText("Next").click();
  202 |         await newTabPage.waitForSecond(3);
  203 |
  204 |         const foundMail = await newTabPage.findMail(requestCtx);
  205 |         expect(foundMail).toBeTruthy();
  206 |
  207 |         const verificationCode = extractVerificationCode(foundMail.Subject) || '';
  208 |         await newTabPage.dashboardLoc.inputCode.fill(verificationCode);
  209 |         await newTabPage.dashboardLoc.buttonByText("Next").click();
  210 |
  211 |         return newTabPage;
  212 |     }
  213 |
  214 |     async findMail(request: { get: (arg0: string) => any; }): Promise<any> {
  215 |         let mailUrl = process.env.MAIL_SERVER || 'http://69.28.90.112:8025/'
  216 |         // Call API to get mails
  217 |         const rawResponse = await request.get(`${mailUrl}/api/v1/messages`);
  218 |         expect(rawResponse.status()).toEqual(200);
  219 |         const response = await rawResponse.json();
  220 |         const messages = await response.messages;
  221 |         return messages[0];
  222 |     }
  223 | }
  224 |
```