@trevordsouzabrite/test-package 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.claude/agents/playwright-test-generator.md +85 -0
  2. package/.claude/agents/playwright-test-healer.md +45 -0
  3. package/.claude/agents/playwright-test-planner.md +52 -0
  4. package/.claude/prompts/playwright-test-coverage.md +31 -0
  5. package/.claude/prompts/playwright-test-generate.md +12 -0
  6. package/.claude/prompts/playwright-test-heal.md +6 -0
  7. package/.claude/prompts/playwright-test-plan.md +12 -0
  8. package/.claude/settings.local.json +31 -0
  9. package/.github/agents/playwright-test-generator.agent.md +113 -0
  10. package/.github/agents/playwright-test-healer.agent.md +70 -0
  11. package/.github/agents/playwright-test-planner.agent.md +82 -0
  12. package/.github/prompts/playwright-test-coverage.prompt.md +31 -0
  13. package/.github/prompts/playwright-test-generate.prompt.md +12 -0
  14. package/.github/prompts/playwright-test-heal.prompt.md +6 -0
  15. package/.github/prompts/playwright-test-plan.prompt.md +9 -0
  16. package/.github/workflows/copilot-setup-steps.yml +34 -0
  17. package/.github/workflows/playwright-healer-agent.yml +140 -0
  18. package/.github/workflows/playwright.yml +40 -0
  19. package/.mcp.json +13 -0
  20. package/.vscode/extensions.json +6 -0
  21. package/.vscode/mcp.json +13 -0
  22. package/.vscode/settings.example.json +15 -0
  23. package/bitbucket-pipelines.yml +86 -0
  24. package/lib/WebActions.ts +107 -0
  25. package/package.json +33 -0
  26. package/pageRepository/ApplicantPage.ts +1171 -0
  27. package/pageRepository/CreateApplicationPage.ts +1736 -0
  28. package/playwright/.auth/user.json +0 -0
  29. package/specs/Applicant Create Application Page Test Plan.md +440 -0
  30. package/specs/Applicant Dashboard Page Test Plan.md +74 -0
  31. package/specs/Applicant Forgot Password Page Test Plan.md +112 -0
  32. package/specs/Applicant Help Page Test Plan.md +369 -0
  33. package/specs/Applicant Landing Page Test Plan.md +42 -0
  34. package/specs/Applicant Login Page Test Plan.md +116 -0
  35. package/specs/Applicant My Applications Page Test Plan.md +558 -0
  36. package/specs/Applicant My Medical Coverage Page Test Plan.md +689 -0
  37. package/specs/Applicant Privacy Policy Page Test Plan.md +196 -0
  38. package/specs/Applicant Resources Page Test Plan.md +107 -0
  39. package/specs/Applicant Self Register Page Test Plan.md +190 -0
  40. package/specs/README.md +3 -0
  41. package/test-data/Sample.png +0 -0
  42. package/test-data/createApplication/formData.json +42 -0
  43. package/test-data/createApplication/textMessages.json +52 -0
  44. package/test-data/forgotPassword/email.json +5 -0
  45. package/test-data/forgotPassword/textMessages.json +5 -0
  46. package/test-data/help/textContent.json +48 -0
  47. package/test-data/login/invalidUsernamePassword.json +4 -0
  48. package/test-data/login/textMessages.json +5 -0
  49. package/test-data/privacyPolicy/textContent.json +25 -0
  50. package/test-data/selfRegister/mailingAddressStates.json +21 -0
  51. package/test-data/selfRegister/registrationFieldData.json +13 -0
  52. package/test-data/selfRegister/suffix.json +3 -0
  53. package/test-data/selfRegister/textMessages.json +13 -0
  54. package/test-data/test-data.zip +0 -0
  55. package/tests/ApplicantCreateApplicationPageTest.spec.ts +1452 -0
  56. package/tests/ApplicantDashboardPageTest.spec.ts +74 -0
  57. package/tests/ApplicantForgotPasswordPageTest.spec.ts +88 -0
  58. package/tests/ApplicantHelpPageTest.spec.ts +468 -0
  59. package/tests/ApplicantLandingPageTest.spec.ts +33 -0
  60. package/tests/ApplicantLoginPageTest.spec.ts +117 -0
  61. package/tests/ApplicantMyApplicationsPageTest.spec.ts +516 -0
  62. package/tests/ApplicantMyMedicalCoveragePageTest.spec.ts +470 -0
  63. package/tests/ApplicantPrivacyPolicyPageTest.spec.ts +188 -0
  64. package/tests/ApplicantResourcesPageTest.spec.ts +117 -0
  65. package/tests/ApplicantSelfRegisterPageTest.spec.ts +254 -0
  66. package/tests/auth.setup.ts +42 -0
  67. package/tests/authState.ts +15 -0
  68. package/tests/example.spec.ts +18 -0
  69. package/tests/seed.spec.ts +7 -0
@@ -0,0 +1,689 @@
1
+ # Polk County Applicant My Medical Coverage Page Test Plan
2
+
3
+ ## Application Overview
4
+
5
+ Validate the Polk County Healthcare Plan Applicant **My Medical Coverage** page at `/polkphpapplicant/s/enrollments?language=en_US`.
6
+
7
+ The page is an authenticated applicant portal page. Current exploration found browser title **Enrollments**, authenticated header/footer navigation, an enrollment summary table, action controls for **Change Provider** and **Enrollment card**, a **Update My Information** action, a **Billing Inquiries** action, and a **My Request Status** section. The explored account showed one active PHP enrollment with beneficiary, program, status, coverage begin date, coverage end date, and provider information.
8
+
9
+ Tests tagged `@auth` require a valid authenticated applicant session. Tests tagged `@no-auth` must run without stored authentication state.
10
+
11
+ ## Shared Preconditions
12
+
13
+ | Step | Action | Expected Result |
14
+ |------|--------|-----------------|
15
+ | 1 | Authenticate with a valid applicant account or reuse `playwright/.auth/user.json` | Applicant session is active |
16
+ | 2 | Navigate to `/polkphpapplicant/s/?language=en_US` | Applicant dashboard loads with **Logout** visible |
17
+ | 3 | Click **My Medical Coverage** in the authenticated header | User lands on `/polkphpapplicant/s/enrollments?language=en_US` |
18
+ | 4 | Wait for page title **Enrollments** and enrollment page content | Page is ready for assertions |
19
+
20
+ ## Test Scenarios
21
+
22
+ ### TC-01 - Authenticated My Medical Coverage Page Loads
23
+
24
+ **Automated file:** `tests/ApplicantMyMedicalCoveragePageTest.spec.ts`
25
+
26
+ **Tags:** `@auth @smoke`
27
+
28
+ **Steps:**
29
+
30
+ 1. Start from an authenticated applicant session.
31
+ 2. Navigate to the applicant dashboard.
32
+ 3. Click **My Medical Coverage**.
33
+ 4. Verify the URL contains `/enrollments`.
34
+ 5. Verify browser title is **Enrollments**.
35
+
36
+ **Expected Result:** The authenticated applicant can open the My Medical Coverage page without being redirected to login or an error page.
37
+
38
+ ---
39
+
40
+ ### TC-02 - Authenticated Header And Footer Are Visible
41
+
42
+ **Automated test:** `Verify the header & footer sections are visible on the my medical coverage page @auth`
43
+
44
+ **Tags:** `@auth`
45
+
46
+ **Steps:**
47
+
48
+ 1. Open My Medical Coverage.
49
+ 2. Verify header elements: logo, **Home**, **Create Application**, **My Applications**, **My Medical Coverage**, **Resources**, **Help**, **Privacy Policy**, and **Logout**.
50
+ 3. Scroll to the footer.
51
+ 4. Verify footer image, address, phone number, business hours, footer links, and copyright.
52
+
53
+ **Expected Result:** Shared authenticated portal chrome is present and consistent with other applicant pages.
54
+
55
+ ---
56
+
57
+ ### TC-03 - Enrollment Summary Table Displays For Applicant With Coverage
58
+
59
+ **Tags:** `@auth @smoke`
60
+
61
+ **Precondition:** Applicant has at least one enrollment record.
62
+
63
+ **Steps:**
64
+
65
+ 1. Open My Medical Coverage.
66
+ 2. Verify the enrollment summary area is visible.
67
+ 3. Verify columns are shown: **Beneficiary**, **Program**, **Status**, **Coverage Begin Date**, **Coverage End Date**, and **Actions**.
68
+ 4. Verify each visible enrollment row has beneficiary name, program, status, begin date, and end date values.
69
+
70
+ **Expected Result:** Active or historical enrollment records render in a readable table without missing required columns.
71
+
72
+ ---
73
+
74
+ ### TC-04 - Enrollment Row Date And Status Formatting
75
+
76
+ **Tags:** `@auth`
77
+
78
+ **Steps:**
79
+
80
+ 1. Open My Medical Coverage for an applicant with coverage.
81
+ 2. Read the **Status** value.
82
+ 3. Read **Coverage Begin Date** and **Coverage End Date**.
83
+ 4. Verify the date values use a user-readable format such as `Mar 30, 2026`.
84
+
85
+ **Expected Result:** Coverage status and date fields are populated and formatted consistently.
86
+
87
+ ---
88
+
89
+ ### TC-05 - No Enrollment Empty State
90
+
91
+ **Tags:** `@auth`
92
+
93
+ **Precondition:** Use or seed an applicant account with no enrollment records.
94
+
95
+ **Steps:**
96
+
97
+ 1. Open My Medical Coverage.
98
+ 2. Wait for enrollment content to finish loading.
99
+ 3. Verify the page shows **DID NOT FIND ANY ENROLLMENT RECORDS.**
100
+ 4. Verify header, footer, and main navigation remain available.
101
+
102
+ **Expected Result:** Applicants with no enrollments receive a clear empty state and are not shown a blank page.
103
+
104
+ ---
105
+
106
+ ### TC-06 - Change Provider Modal Opens
107
+
108
+ **Tags:** `@auth @smoke`
109
+
110
+ **Precondition:** Applicant has an enrollment with the **Change Provider** action.
111
+
112
+ **Steps:**
113
+
114
+ 1. Open My Medical Coverage.
115
+ 2. Click **Change Provider**.
116
+ 3. Verify the modal opens with title **Change Provider**.
117
+ 4. Verify instruction text: **Select a new primary care provider below.**
118
+ 5. Verify required fields are visible:
119
+ - **Search and select your new primary care provider**
120
+ - **Tell us why you’re changing your Primary Care Provider (PCP)**
121
+ 6. Verify **Close** and **Submit** controls are visible.
122
+
123
+ **Expected Result:** Change Provider opens in a modal without leaving the Enrollments page.
124
+
125
+ ---
126
+
127
+ ### TC-07 - Change Provider Empty Submit Validation
128
+
129
+ **Tags:** `@auth @validation`
130
+
131
+ **Steps:**
132
+
133
+ 1. Open the **Change Provider** modal.
134
+ 2. Leave provider search blank.
135
+ 3. Leave reason dropdown unselected.
136
+ 4. Click **Submit**.
137
+
138
+ **Expected Result:**
139
+
140
+ - Provider field shows **Complete this field.**
141
+ - Reason field shows **Complete this field.**
142
+ - Error notification is displayed.
143
+ - The modal remains open and no provider change request is submitted.
144
+
145
+ ---
146
+
147
+ ### TC-08 - Change Provider Close Does Not Submit
148
+
149
+ **Tags:** `@auth`
150
+
151
+ **Steps:**
152
+
153
+ 1. Open the **Change Provider** modal.
154
+ 2. Click **Close** without entering data.
155
+ 3. Reopen My Medical Coverage or inspect the enrollment row.
156
+
157
+ **Expected Result:** Modal closes, the user remains on My Medical Coverage, and provider/status data is unchanged.
158
+
159
+ ---
160
+
161
+ ### TC-09 - Change Provider Provider Search Behavior
162
+
163
+ **Tags:** `@auth`
164
+
165
+ **Steps:**
166
+
167
+ 1. Open the **Change Provider** modal.
168
+ 2. Type a valid provider name or partial provider name into the provider search field.
169
+ 3. Wait for search results.
170
+ 4. Select a provider.
171
+
172
+ **Expected Result:** Matching providers are displayed, a provider can be selected, and the selected provider remains visible in the field.
173
+
174
+ ---
175
+
176
+ ### TC-10 - Change Provider No-Match Search
177
+
178
+ **Tags:** `@auth @edge`
179
+
180
+ **Steps:**
181
+
182
+ 1. Open the **Change Provider** modal.
183
+ 2. Search for a provider name that should not exist.
184
+ 3. Wait for lookup results.
185
+
186
+ **Expected Result:** The lookup shows a clear no-results state and does not select an unintended provider.
187
+
188
+ ---
189
+
190
+ ### TC-11 - Change Provider Submit With Missing Reason
191
+
192
+ **Tags:** `@auth @validation`
193
+
194
+ **Steps:**
195
+
196
+ 1. Open the **Change Provider** modal.
197
+ 2. Select a valid provider.
198
+ 3. Leave **Choose Reason** unselected.
199
+ 4. Click **Submit**.
200
+
201
+ **Expected Result:** Reason field validation blocks submission and the selected provider remains populated.
202
+
203
+ ---
204
+
205
+ ### TC-12 - Change Provider Submit With Missing Provider
206
+
207
+ **Tags:** `@auth @validation`
208
+
209
+ **Steps:**
210
+
211
+ 1. Open the **Change Provider** modal.
212
+ 2. Select a reason.
213
+ 3. Leave provider search blank.
214
+ 4. Click **Submit**.
215
+
216
+ **Expected Result:** Provider field validation blocks submission and the selected reason remains populated.
217
+
218
+ ---
219
+
220
+ ### TC-13 - Change Provider Successful Submission
221
+
222
+ **Tags:** `@auth`
223
+
224
+ **Precondition:** Use test data where submitting a provider change request is safe and expected.
225
+
226
+ **Steps:**
227
+
228
+ 1. Open the **Change Provider** modal.
229
+ 2. Select a valid new provider.
230
+ 3. Select a valid reason.
231
+ 4. Click **Submit**.
232
+ 5. Wait for success or request-status update.
233
+
234
+ **Expected Result:** Provider change request is submitted once, a success confirmation appears, and **My Request Status** reflects the submitted request.
235
+
236
+ ---
237
+
238
+ ### TC-14 - My Request Status Displays Current Provider Change Request
239
+
240
+ **Tags:** `@auth`
241
+
242
+ **Steps:**
243
+
244
+ 1. Open My Medical Coverage.
245
+ 2. Inspect the **My Request Status** section.
246
+ 3. Verify columns or labels such as **Status**, **Effective Date**, and **Reference**.
247
+ 4. Verify the current provider reference is displayed when present.
248
+
249
+ **Expected Result:** Request status content is visible and readable. Current exploration showed **Effective**, an effective date, and provider-on-file reference text.
250
+
251
+ ---
252
+
253
+ ### TC-15 - Enrollment Card Generates PDF
254
+
255
+ **Tags:** `@auth @smoke`
256
+
257
+ **Steps:**
258
+
259
+ 1. Open My Medical Coverage.
260
+ 2. Click **Enrollment card** for an enrollment row.
261
+ 3. Wait for navigation or download.
262
+ 4. Verify the browser navigates to `/polkphpapplicant/s/enrollmentcard`.
263
+ 5. Verify a PDF download is initiated.
264
+
265
+ **Expected Result:** The enrollment card route loads and downloads **EnrollmentCard.pdf** from the Visualforce PDF endpoint.
266
+
267
+ ---
268
+
269
+ ### TC-16 - Enrollment Card Uses Selected Enrollment Record
270
+
271
+ **Tags:** `@auth`
272
+
273
+ **Precondition:** Applicant has more than one enrollment record.
274
+
275
+ **Steps:**
276
+
277
+ 1. Open My Medical Coverage.
278
+ 2. Click **Enrollment card** on the first enrollment row.
279
+ 3. Capture the `recordId` in the enrollment-card URL or generated PDF request.
280
+ 4. Return to My Medical Coverage.
281
+ 5. Click **Enrollment card** on a different enrollment row.
282
+
283
+ **Expected Result:** Each card request uses the selected row's enrollment record ID and does not generate another member's card.
284
+
285
+ ---
286
+
287
+ ### TC-17 - Update My Information Action
288
+
289
+ **Tags:** `@auth`
290
+
291
+ **Steps:**
292
+
293
+ 1. Open My Medical Coverage.
294
+ 2. Click **Update My Information**.
295
+ 3. Wait for navigation, modal, or toast.
296
+
297
+ **Expected Result:** The user is either routed to the correct update-information application flow or shown a clear error. Current exploration for the available test account displayed toast text **Error No application found.**
298
+
299
+ ---
300
+
301
+ ### TC-18 - Update My Information Error Is Dismissible
302
+
303
+ **Tags:** `@auth @validation`
304
+
305
+ **Steps:**
306
+
307
+ 1. Click **Update My Information** for an account without a matching application.
308
+ 2. Verify the **Error No application found.** toast appears.
309
+ 3. Click the toast **Close** control.
310
+
311
+ **Expected Result:** Toast closes, the user remains on My Medical Coverage, and no broken page state remains.
312
+
313
+ ---
314
+
315
+ ### TC-19 - Billing Inquiries Page Opens
316
+
317
+ **Tags:** `@auth @smoke`
318
+
319
+ **Steps:**
320
+
321
+ 1. Open My Medical Coverage.
322
+ 2. Click **Billing Inquiries**.
323
+ 3. Wait for navigation.
324
+ 4. Verify URL contains `/billing-inquiries`.
325
+ 5. Verify browser title is **Billing_Inquiries**.
326
+ 6. Verify heading text **Billing Inquiry** and explanatory instructions are visible.
327
+
328
+ **Expected Result:** Billing Inquiry form opens from My Medical Coverage and retains authenticated header/footer.
329
+
330
+ ---
331
+
332
+ ### TC-20 - Billing Inquiry Form Required Fields Are Visible
333
+
334
+ **Tags:** `@auth`
335
+
336
+ **Steps:**
337
+
338
+ 1. Open Billing Inquiries from My Medical Coverage.
339
+ 2. Verify required fields:
340
+ - **Tell us why you believe these services should be covered under your PolkHealthCare Plan benefits**
341
+ - **Date of Service**
342
+ - **Amount Due**
343
+ - **Select Application Member**
344
+ - **Appeal Reason**
345
+ - **Provider or Facility Name**
346
+ - **Type of document uploaded**
347
+ 3. Verify optional/conditional fields:
348
+ - **Was any portion of this bill already paid by another provider or insurance company?**
349
+ - **Claim #**
350
+ - **Amount paid by other provider**
351
+ 4. Verify file upload area is visible.
352
+
353
+ **Expected Result:** All fields required to submit a billing inquiry are visible and labeled.
354
+
355
+ ---
356
+
357
+ ### TC-21 - Billing Inquiry Empty Submit Requires Upload
358
+
359
+ **Tags:** `@auth @validation`
360
+
361
+ **Steps:**
362
+
363
+ 1. Open Billing Inquiries.
364
+ 2. Do not upload a file.
365
+ 3. Click **Submit**.
366
+
367
+ **Expected Result:** Error toast displays **Please upload at least one document.** and submission is blocked.
368
+
369
+ ---
370
+
371
+ ### TC-22 - Billing Inquiry Missing Required Field Validation
372
+
373
+ **Tags:** `@auth @validation`
374
+
375
+ **Steps:**
376
+
377
+ 1. Open Billing Inquiries.
378
+ 2. Upload a valid test document.
379
+ 3. Leave required text, date, amount, member, appeal reason, provider/facility, and document type fields blank.
380
+ 4. Click **Submit**.
381
+
382
+ **Expected Result:** Each missing required field shows inline validation and no request is submitted.
383
+
384
+ ---
385
+
386
+ ### TC-23 - Billing Inquiry File Upload Accepts Supported Documents
387
+
388
+ **Tags:** `@auth`
389
+
390
+ **Steps:**
391
+
392
+ 1. Open Billing Inquiries.
393
+ 2. Upload a supported file type such as PDF or image.
394
+ 3. Verify the uploaded file appears in the upload list.
395
+ 4. Remove the file.
396
+
397
+ **Expected Result:** Supported files can be uploaded and removed before submission.
398
+
399
+ ---
400
+
401
+ ### TC-24 - Billing Inquiry Rejects Unsupported Or Oversized Files
402
+
403
+ **Tags:** `@auth @edge`
404
+
405
+ **Steps:**
406
+
407
+ 1. Open Billing Inquiries.
408
+ 2. Attempt to upload an unsupported file type.
409
+ 3. Attempt to upload a file larger than the configured limit.
410
+
411
+ **Expected Result:** The form blocks unsupported or oversized uploads with a clear error and does not submit partial data.
412
+
413
+ ---
414
+
415
+ ### TC-25 - Billing Inquiry Amount Validation
416
+
417
+ **Tags:** `@auth @validation`
418
+
419
+ **Steps:**
420
+
421
+ 1. Open Billing Inquiries.
422
+ 2. Enter invalid values into **Amount Due**, such as letters, negative values, zero where not allowed, and more than two decimal places.
423
+ 3. Move focus away from the field or submit.
424
+
425
+ **Expected Result:** Invalid amount values are rejected with clear field-level validation.
426
+
427
+ ---
428
+
429
+ ### TC-26 - Billing Inquiry Date Validation
430
+
431
+ **Tags:** `@auth @validation`
432
+
433
+ **Steps:**
434
+
435
+ 1. Open Billing Inquiries.
436
+ 2. Enter invalid date formats into **Date of Service**.
437
+ 3. Enter a future date.
438
+ 4. Submit the form.
439
+
440
+ **Expected Result:** Invalid or future service dates are rejected according to business rules.
441
+
442
+ ---
443
+
444
+ ### TC-27 - Billing Inquiry Cancel Returns Safely
445
+
446
+ **Tags:** `@auth`
447
+
448
+ **Steps:**
449
+
450
+ 1. Open Billing Inquiries.
451
+ 2. Enter partial form data.
452
+ 3. Click **Cancel**.
453
+ 4. Confirm any unsaved-change prompt if shown.
454
+
455
+ **Expected Result:** User returns safely without submitting a billing inquiry or leaving partial data in a submitted state.
456
+
457
+ ---
458
+
459
+ ### TC-28 - Billing Inquiry Successful Submission
460
+
461
+ **Tags:** `@auth`
462
+
463
+ **Precondition:** Use controlled test data where creating a billing inquiry is allowed.
464
+
465
+ **Steps:**
466
+
467
+ 1. Open Billing Inquiries.
468
+ 2. Complete all required fields with valid data.
469
+ 3. Upload the full bill or claim document.
470
+ 4. Click **Submit**.
471
+ 5. Wait for confirmation.
472
+
473
+ **Expected Result:** Billing inquiry is submitted once, success confirmation is shown, and request status or downstream case data reflects the new inquiry.
474
+
475
+ ---
476
+
477
+ ### TC-29 - Direct Unauthenticated Access Redirects To Login
478
+
479
+ **Tags:** `@no-auth @smoke`
480
+
481
+ **Steps:**
482
+
483
+ 1. Create a new browser context without storage state.
484
+ 2. Navigate directly to `/polkphpapplicant/s/enrollments?language=en_US`.
485
+ 3. Wait for navigation.
486
+
487
+ **Expected Result:**
488
+
489
+ - User is redirected to `/polkphpapplicant/s/login/`.
490
+ - URL contains `ec=302`.
491
+ - URL contains `startURL=%2Fpolkphpapplicant%2Fs%2Fenrollments`.
492
+ - Login form shows **UserName**, **Password**, **Log In**, **Forgot password?**, and **Sign Up**.
493
+
494
+ ---
495
+
496
+ ### TC-30 - Login Redirect Returns To My Medical Coverage
497
+
498
+ **Tags:** `@no-auth`
499
+
500
+ **Steps:**
501
+
502
+ 1. Navigate directly to My Medical Coverage without auth.
503
+ 2. Complete login with valid credentials.
504
+ 3. Wait for post-login navigation.
505
+
506
+ **Expected Result:** User lands on My Medical Coverage because the login URL preserved the requested `startURL`.
507
+
508
+ ---
509
+
510
+ ### TC-31 - Logout Protects My Medical Coverage
511
+
512
+ **Tags:** `@auth`
513
+
514
+ **Steps:**
515
+
516
+ 1. Open My Medical Coverage with an authenticated session.
517
+ 2. Click **Logout**.
518
+ 3. Attempt to navigate back to `/polkphpapplicant/s/enrollments?language=en_US`.
519
+
520
+ **Expected Result:** User cannot view enrollment data after logout and is redirected to login.
521
+
522
+ ---
523
+
524
+ ### TC-32 - Unauthorized Enrollment Record Access
525
+
526
+ **Tags:** `@auth @security`
527
+
528
+ **Steps:**
529
+
530
+ 1. Authenticate as Applicant A.
531
+ 2. Attempt to open an enrollment-card URL or enrollment route with a record ID belonging to Applicant B or a nonexistent record.
532
+
533
+ **Expected Result:** The page shows safe access-denied/not-found behavior or redirects. No other applicant's enrollment data or PDF is exposed.
534
+
535
+ ---
536
+
537
+ ### TC-33 - Multiple Enrollment Records
538
+
539
+ **Tags:** `@auth @edge`
540
+
541
+ **Precondition:** Applicant has multiple active or historical enrollments.
542
+
543
+ **Steps:**
544
+
545
+ 1. Open My Medical Coverage.
546
+ 2. Verify all enrollment rows are visible or paginated/scrollable.
547
+ 3. Verify each row has independent **Change Provider** and **Enrollment card** actions.
548
+ 4. Run the action tests against a non-first row.
549
+
550
+ **Expected Result:** Row actions apply to the selected enrollment and do not always use the first record.
551
+
552
+ ---
553
+
554
+ ### TC-34 - Expired Or Inactive Coverage Display
555
+
556
+ **Tags:** `@auth @edge`
557
+
558
+ **Precondition:** Applicant has inactive, expired, terminated, or future-dated coverage.
559
+
560
+ **Steps:**
561
+
562
+ 1. Open My Medical Coverage.
563
+ 2. Verify inactive or expired enrollment rows display their status and dates.
564
+ 3. Inspect available row actions.
565
+
566
+ **Expected Result:** Historical/future coverage is clear to the applicant. Actions that should not apply to inactive coverage are hidden or disabled.
567
+
568
+ ---
569
+
570
+ ### TC-35 - Keyboard Navigation
571
+
572
+ **Tags:** `@auth @accessibility`
573
+
574
+ **Steps:**
575
+
576
+ 1. Open My Medical Coverage.
577
+ 2. Use `Tab` and `Shift+Tab` through header links, enrollment row actions, request status content, billing/update buttons, and footer links.
578
+ 3. Activate **Change Provider**, **Enrollment card**, and **Billing Inquiries** using keyboard controls.
579
+ 4. Dismiss modals or toasts with keyboard controls.
580
+
581
+ **Expected Result:** Focus is visible, focus order is logical, and all interactive page features are reachable without a mouse.
582
+
583
+ ---
584
+
585
+ ### TC-36 - Accessible Names And Semantics
586
+
587
+ **Tags:** `@auth @accessibility`
588
+
589
+ **Steps:**
590
+
591
+ 1. Open My Medical Coverage.
592
+ 2. Verify row action controls have clear accessible names.
593
+ 3. Verify the enrollment table or table-like region exposes column and row relationships to assistive technology.
594
+ 4. Open Change Provider and verify the modal has dialog semantics, focus management, labels, required-state communication, and an accessible close control.
595
+ 5. Open Billing Inquiries and verify all inputs, dropdowns, file upload controls, and toasts are accessible.
596
+
597
+ **Expected Result:** Screen reader users can identify the page, enrollment data, actions, modal fields, validation errors, and toast messages.
598
+
599
+ ---
600
+
601
+ ### TC-37 - Axe Accessibility Baseline
602
+
603
+ **Tags:** `@auth @accessibility`
604
+
605
+ **Steps:**
606
+
607
+ 1. Open My Medical Coverage.
608
+ 2. Run Axe with WCAG 2.x A/AA rules.
609
+ 3. Repeat after opening the Change Provider modal.
610
+ 4. Repeat on Billing Inquiries.
611
+
612
+ **Expected Result:** No critical or serious accessibility violations are present in the main page, modal, or Billing Inquiries form.
613
+
614
+ ---
615
+
616
+ ### TC-38 - Responsive Layout
617
+
618
+ **Tags:** `@auth`
619
+
620
+ **Steps:**
621
+
622
+ 1. Open My Medical Coverage at desktop viewport.
623
+ 2. Repeat at tablet viewport.
624
+ 3. Repeat at mobile viewport.
625
+ 4. Verify the enrollment table, action controls, Change Provider modal, Billing Inquiries form, request status section, header, and footer remain usable.
626
+
627
+ **Expected Result:** Text does not overlap, table data remains readable or scrollable, action controls stay reachable, and modal/form content fits the viewport.
628
+
629
+ ---
630
+
631
+ ### TC-39 - Browser Console And Network Health
632
+
633
+ **Tags:** `@auth`
634
+
635
+ **Steps:**
636
+
637
+ 1. Open My Medical Coverage.
638
+ 2. Monitor console messages and failed network requests during initial load.
639
+ 3. Click Change Provider, Enrollment card, Update My Information, and Billing Inquiries.
640
+ 4. Monitor console messages and failed network requests after each action.
641
+
642
+ **Expected Result:** No application-critical failed requests or uncaught product errors occur. Framework warnings should be reviewed but should not fail the test unless they affect user behavior.
643
+
644
+ ---
645
+
646
+ ### TC-40 - Data Privacy In Enrollment And PDF Output
647
+
648
+ **Tags:** `@auth @security`
649
+
650
+ **Steps:**
651
+
652
+ 1. Open My Medical Coverage.
653
+ 2. Verify only the authenticated applicant's enrollment information is shown.
654
+ 3. Generate the enrollment card PDF.
655
+ 4. Verify the PDF contains only the selected applicant/enrollment data.
656
+ 5. Confirm URLs and client-side data do not expose unrelated applicant IDs or sensitive data.
657
+
658
+ **Expected Result:** Enrollment data and generated PDFs are scoped to the authenticated applicant.
659
+
660
+ ## Traceability
661
+
662
+ | Area | Covered By |
663
+ |------|------------|
664
+ | Authenticated page load and chrome | TC-01, TC-02 |
665
+ | Enrollment data and empty states | TC-03, TC-04, TC-05 |
666
+ | Change Provider modal and validation | TC-06, TC-07, TC-08, TC-09, TC-10, TC-11, TC-12, TC-13 |
667
+ | Request status | TC-14 |
668
+ | Enrollment card PDF | TC-15, TC-16 |
669
+ | Update information | TC-17, TC-18 |
670
+ | Billing inquiries | TC-19, TC-20, TC-21, TC-22, TC-23, TC-24, TC-25, TC-26, TC-27, TC-28 |
671
+ | Authentication and authorization | TC-29, TC-30, TC-31, TC-32 |
672
+ | Edge cases | TC-33, TC-34 |
673
+ | Accessibility and responsive behavior | TC-35, TC-36, TC-37, TC-38 |
674
+ | Observability and privacy | TC-39, TC-40 |
675
+
676
+ ## Exploration Notes
677
+
678
+ - `mcp__playwright_test__` planner setup returned `Transport closed`; local Playwright exploration was used to inspect the authenticated page.
679
+ - Auth setup was refreshed with `tests/auth.setup.ts` before exploration.
680
+ - Current explored authenticated route: `/polkphpapplicant/s/enrollments?language=en_US`.
681
+ - Current explored page title: **Enrollments**.
682
+ - Current explored active enrollment displayed program **PHP**, status **Active**, and coverage dates **Mar 30, 2026** to **Mar 29, 2027**.
683
+ - Clicking **Change Provider** opened a modal with provider search, reason dropdown, **Close**, and **Submit**.
684
+ - Empty **Change Provider** submission displayed **Complete this field.** for both required fields.
685
+ - Clicking **Enrollment card** navigated to `/polkphpapplicant/s/enrollmentcard?...` and initiated **EnrollmentCard.pdf** download.
686
+ - Clicking **Update My Information** for the explored account displayed toast **Error No application found.**
687
+ - Clicking **Billing Inquiries** navigated to `/polkphpapplicant/s/billing-inquiries?language=en_US`.
688
+ - Empty Billing Inquiry submission displayed toast **Please upload at least one document.**
689
+ - Unauthenticated direct access to `/polkphpapplicant/s/enrollments?language=en_US` redirected to login with `ec=302` and a `startURL` back to the enrollments route.