2
2
3
3
import { test , expect } from "@playwright/test" ;
4
4
import { TEST_URL } from "../playwright-setup" ;
5
-
6
- test . describe ( "querying with the TryTEFCA viewer" , ( ) => {
5
+ import { STEP_ONE_PAGE_TITLE } from "@/app/query/components/searchForm/SearchForm" ;
6
+ import { hyperUnluckyPatient } from "@/app/constants" ;
7
+ import {
8
+ CONTACT_US_DISCLAIMER_EMAIL ,
9
+ CONTACT_US_DISCLAIMER_TEXT ,
10
+ } from "@/app/query/designSystem/SiteAlert" ;
11
+ import { STEP_TWO_PAGE_TITLE } from "@/app/query/components/patientSearchResults/PatientSearchResultsTable" ;
12
+ import { STEP_THREE_PAGE_TITLE } from "@/app/query/components/selectQuery/SelectSavedQuery" ;
13
+
14
+ const TEST_PATIENT = hyperUnluckyPatient ;
15
+ const TEST_PATIENT_NAME =
16
+ hyperUnluckyPatient . FirstName + " A. " + hyperUnluckyPatient . LastName ;
17
+
18
+ test . describe ( "querying with the Query Connector" , ( ) => {
7
19
test . beforeEach ( async ( { page } ) => {
8
20
// Start every test on our main landing page
9
21
await page . goto ( TEST_URL ) ;
@@ -32,18 +44,9 @@ test.describe("querying with the TryTEFCA viewer", () => {
32
44
33
45
test ( "unsuccessful user query: no patients" , async ( { page } ) => {
34
46
await page . getByRole ( "button" , { name : "Go to the demo" } ) . click ( ) ;
35
- await page
36
- . getByLabel ( "Query" , { exact : true } )
37
- . selectOption ( "social-determinants" ) ;
38
- await page . getByRole ( "button" , { name : "Advanced" } ) . click ( ) ;
39
- await page
40
- . getByLabel ( "FHIR Server (QHIN)" , { exact : true } )
41
- . selectOption ( "HELIOS Meld: Direct" ) ;
42
-
43
- await page . getByLabel ( "First Name" ) . fill ( "Ellie" ) ;
44
- await page . getByLabel ( "Last Name" ) . fill ( "Williams" ) ;
45
- await page . getByLabel ( "Phone Number" ) . fill ( "5555555555" ) ;
46
- await page . getByLabel ( "Medical Record Number" ) . fill ( "TLOU1TLOU2" ) ;
47
+ await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
48
+ await page . getByLabel ( "First Name" ) . fill ( "Shouldnt" ) ;
49
+ await page . getByLabel ( "Last Name" ) . fill ( "Findanyone" ) ;
47
50
await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
48
51
49
52
// Better luck next time, user!
@@ -58,9 +61,7 @@ test.describe("querying with the TryTEFCA viewer", () => {
58
61
. click ( ) ;
59
62
} ) ;
60
63
61
- test ( "successful demo user query: the quest for watermelon mcgee" , async ( {
62
- page,
63
- } ) => {
64
+ test ( "successful demo user query" , async ( { page } ) => {
64
65
await page . getByRole ( "button" , { name : "Go to the demo" } ) . click ( ) ;
65
66
66
67
// Check that the info alert is visible and contains the correct text
@@ -70,40 +71,42 @@ test.describe("querying with the TryTEFCA viewer", () => {
70
71
"This site is for demo purposes only. Please do not enter PII on this website." ,
71
72
) ;
72
73
await expect (
73
- page . getByRole ( "heading" , { name : "Search for a Patient" , exact : true } ) ,
74
+ page . getByRole ( "heading" , { name : STEP_ONE_PAGE_TITLE , exact : true } ) ,
74
75
) . toBeVisible ( ) ;
75
76
76
- // Put in the search parameters for the elusive fruit person
77
- await page
78
- . getByLabel ( "Query" , { exact : true } )
79
- . selectOption ( "newborn-screening" ) ;
80
- await page
81
- . getByLabel ( "Patient" , { exact : true } )
82
- . selectOption ( "newborn-screening-referral" ) ;
83
77
await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
84
- await page . getByLabel ( "First Name" ) . fill ( "Watermelon" ) ;
85
- await page . getByLabel ( "Last Name" ) . fill ( "McGee" ) ;
86
- await page . getByLabel ( "Date of Birth" ) . fill ( "2024-07-12" ) ;
87
- await page . getByLabel ( "Medical Record Number" ) . fill ( "18091" ) ;
88
- await page . getByLabel ( "Phone Number" ) . fill ( "5555555555" ) ;
78
+ await page . getByLabel ( "First Name" ) . fill ( TEST_PATIENT . FirstName ) ;
79
+ await page . getByLabel ( "Last Name" ) . fill ( TEST_PATIENT . LastName ) ;
80
+ await page . getByLabel ( "Date of Birth" ) . fill ( TEST_PATIENT . DOB ) ;
81
+ await page . getByLabel ( "Medical Record Number" ) . fill ( TEST_PATIENT . MRN ) ;
82
+ await page . getByLabel ( "Phone Number" ) . fill ( TEST_PATIENT . Phone ) ;
89
83
await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
90
84
await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
91
85
86
+ await page . getByRole ( "link" , { name : "Select patient" } ) . click ( ) ;
87
+ await expect (
88
+ page . getByRole ( "heading" , { name : "Select a query" } ) ,
89
+ ) . toBeVisible ( ) ;
90
+ await page . getByRole ( "button" , { name : "Submit" } ) . click ( ) ;
91
+ await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
92
+
92
93
// Make sure we have a results page with a single patient
93
94
// Non-interactive 'div' elements in the table should be located by text
94
95
await expect (
95
96
page . getByRole ( "heading" , { name : "Patient Record" } ) ,
96
97
) . toBeVisible ( ) ;
97
98
await expect ( page . getByText ( "Patient Name" ) ) . toBeVisible ( ) ;
98
- await expect ( page . getByText ( "WATERMELON SPROUT MCGEE" ) ) . toBeVisible ( ) ;
99
+ await expect ( page . getByText ( TEST_PATIENT_NAME ) ) . toBeVisible ( ) ;
99
100
await expect ( page . getByText ( "Patient Identifiers" ) ) . toBeVisible ( ) ;
100
- await expect ( page . getByText ( "MRN: 18091" ) ) . toBeVisible ( ) ;
101
+ await expect (
102
+ page . getByText ( `Medical Record Number: ${ TEST_PATIENT . MRN } ` ) ,
103
+ ) . toBeVisible ( ) ;
101
104
102
105
// Check that the info alert is visible and has updated to the correct text
103
106
const alert2 = page . locator ( ".custom-alert" ) ;
104
107
await expect ( alert2 ) . toBeVisible ( ) ;
105
108
await expect ( alert2 ) . toHaveText (
106
- "Interested in learning more about using the TEFCA Query Connector for your jurisdiction? Send us an email at [email protected] " ,
109
+ ` ${ CONTACT_US_DISCLAIMER_TEXT } ${ CONTACT_US_DISCLAIMER_EMAIL } ` ,
107
110
) ;
108
111
109
112
// Check to see if the accordion button is open
@@ -117,19 +120,14 @@ test.describe("querying with the TryTEFCA viewer", () => {
117
120
// Now let's use the return to search to go back to a blank form
118
121
await page . getByRole ( "button" , { name : "New patient search" } ) . click ( ) ;
119
122
await expect (
120
- page . getByRole ( "heading" , { name : "Search for a Patient" , exact : true } ) ,
123
+ page . getByRole ( "heading" , { name : STEP_ONE_PAGE_TITLE , exact : true } ) ,
121
124
) . toBeVisible ( ) ;
122
125
} ) ;
123
126
124
127
test ( "query using form-fillable demo patient by phone number" , async ( {
125
128
page,
126
129
} ) => {
127
130
await page . getByRole ( "button" , { name : "Go to the demo" } ) . click ( ) ;
128
-
129
- await page . getByLabel ( "Query" , { exact : true } ) . selectOption ( "syphilis" ) ;
130
- await page
131
- . getByLabel ( "Patient" , { exact : true } )
132
- . selectOption ( "sti-syphilis-positive" ) ;
133
131
await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
134
132
135
133
// Delete last name and MRN to force phone number as one of the 3 fields
@@ -140,25 +138,39 @@ test.describe("querying with the TryTEFCA viewer", () => {
140
138
await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
141
139
await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
142
140
await expect (
143
- page . getByRole ( "heading" , { name : "Patient Record" } ) ,
141
+ page . getByRole ( "heading" , { name : STEP_TWO_PAGE_TITLE } ) ,
144
142
) . toBeVisible ( ) ;
143
+ await page . getByRole ( "link" , { name : "Select patient" } ) . click ( ) ;
144
+ await expect (
145
+ page . getByRole ( "heading" , { name : STEP_THREE_PAGE_TITLE } ) ,
146
+ ) . toBeVisible ( ) ;
147
+ await page . getByRole ( "button" , { name : "Submit" } ) . click ( ) ;
148
+ await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
149
+
145
150
await expect ( page . getByText ( "Patient Name" ) ) . toBeVisible ( ) ;
146
- await expect ( page . getByText ( "Hyper A. Unlucky" ) ) . toBeVisible ( ) ;
151
+ await expect ( page . getByText ( TEST_PATIENT_NAME ) ) . toBeVisible ( ) ;
147
152
await expect ( page . getByText ( "Contact" ) ) . toBeVisible ( ) ;
148
- await expect ( page . getByText ( "517-425-1398" ) ) . toBeVisible ( ) ;
153
+ await expect ( page . getByText ( TEST_PATIENT . Phone ) ) . toBeVisible ( ) ;
149
154
await expect ( page . getByText ( "Patient Identifiers" ) ) . toBeVisible ( ) ;
150
- await expect ( page . getByText ( "8692756" ) ) . toBeVisible ( ) ;
155
+ await expect ( page . getByText ( TEST_PATIENT . MRN ) ) . toBeVisible ( ) ;
151
156
} ) ;
152
157
153
158
test ( "social determinants query with generalized function" , async ( {
154
159
page,
155
160
} ) => {
156
161
await page . getByRole ( "button" , { name : "Go to the demo" } ) . click ( ) ;
157
- await page
158
- . getByLabel ( "Query" , { exact : true } )
159
- . selectOption ( "social-determinants" ) ;
160
162
await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
161
163
await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
164
+ await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
165
+
166
+ await page . getByRole ( "link" , { name : "Select patient" } ) . click ( ) ;
167
+ await expect (
168
+ page . getByRole ( "heading" , { name : "Select a query" } ) ,
169
+ ) . toBeVisible ( ) ;
170
+ await page . getByTestId ( "Select" ) . selectOption ( "social-determinants" ) ;
171
+ await page . getByRole ( "button" , { name : "Submit" } ) . click ( ) ;
172
+ await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
173
+
162
174
await expect (
163
175
page . getByRole ( "heading" , { name : "Patient Record" } ) ,
164
176
) . toBeVisible ( ) ;
@@ -168,127 +180,16 @@ test.describe("querying with the TryTEFCA viewer", () => {
168
180
page,
169
181
} ) => {
170
182
await page . getByRole ( "button" , { name : "Go to the demo" } ) . click ( ) ;
171
- await page . getByLabel ( "Query" , { exact : true } ) . selectOption ( "chlamydia" ) ;
172
183
await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
173
184
await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
174
185
await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
186
+ await page . getByRole ( "link" , { name : "Select patient" } ) . click ( ) ;
187
+ await page . getByTestId ( "Select" ) . selectOption ( "chlamydia" ) ;
188
+ await page . getByRole ( "button" , { name : "Submit" } ) . click ( ) ;
189
+ await expect ( page . getByText ( "Loading" ) ) . toHaveCount ( 0 , { timeout : 10000 } ) ;
175
190
176
191
await expect (
177
192
page . getByRole ( "heading" , { name : "Patient Record" } ) ,
178
193
) . toBeVisible ( ) ;
179
194
} ) ;
180
195
} ) ;
181
-
182
- test . describe ( "Test the user journey of a 'tester'" , ( ) => {
183
- test . beforeEach ( async ( { page } ) => {
184
- // Start every test on direct tester page
185
- await page . goto ( "http://localhost:3000/tefca-viewer/query/test" , {
186
- waitUntil : "load" ,
187
- } ) ;
188
- } ) ;
189
-
190
- test ( "query/test page loads" , async ( { page } ) => {
191
- // Check that interactable elements are present
192
- await expect (
193
- page . getByRole ( "button" , { name : "Data Usage Policy" } ) ,
194
- ) . toBeVisible ( ) ;
195
- await expect (
196
- page . getByRole ( "link" , { name : "TEFCA Viewer" } ) ,
197
- ) . toBeVisible ( ) ;
198
-
199
- // Check that each expected text section is present
200
- await expect (
201
- page . getByRole ( "heading" , { name : "Search for a Patient" , exact : true } ) ,
202
- ) . toBeVisible ( ) ;
203
- await expect ( page . getByLabel ( "Query" , { exact : true } ) ) . toBeVisible ( ) ;
204
- await expect ( page . getByLabel ( "Patient" , { exact : true } ) ) . toBeVisible ( ) ;
205
- await expect ( page . getByRole ( "button" , { name : "Advanced" } ) ) . toBeVisible ( ) ;
206
- } ) ;
207
-
208
- test ( "Query for patient using auto-filled data" , async ( { page } ) => {
209
- await page
210
- . getByLabel ( "Query" , { exact : true } )
211
- . selectOption ( { value : "newborn-screening" } ) ;
212
- await page
213
- . getByLabel ( "Patient" , { exact : true } )
214
- . selectOption ( { value : "newborn-screening-referral" } ) ;
215
- await page . getByRole ( "button" , { name : "Fill fields" } ) . click ( ) ;
216
- await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
217
-
218
- // Make sure we have a results page with a single patient
219
- await expect (
220
- page . getByRole ( "heading" , { name : "Patient Record" } ) ,
221
- ) . toBeVisible ( ) ;
222
- await expect ( page . getByText ( "Patient Name" ) ) . toBeVisible ( ) ;
223
- await expect ( page . getByText ( "WATERMELON SPROUT MCGEE" ) ) . toBeVisible ( ) ;
224
- await expect ( page . getByText ( "Patient Identifiers" ) ) . toBeVisible ( ) ;
225
- await expect ( page . getByText ( "MRN: 18091" ) ) . toBeVisible ( ) ;
226
- } ) ;
227
-
228
- test ( "Query for patient by filling in data" , async ( { page } ) => {
229
- await page
230
- . getByLabel ( "Query" , { exact : true } )
231
- . selectOption ( "Newborn screening follow-up" ) ;
232
- await page . getByRole ( "button" , { name : "Advanced" } ) . click ( ) ;
233
- await page
234
- . getByLabel ( "FHIR Server (QHIN)" , { exact : true } )
235
- . selectOption ( "HELIOS Meld: Direct" ) ;
236
- await page . getByLabel ( "First Name" ) . fill ( "Watermelon" ) ;
237
- await page . getByLabel ( "Last Name" ) . fill ( "McGee" ) ;
238
- await page . getByLabel ( "Phone Number" ) . fill ( "5555555555" ) ;
239
- await page . getByLabel ( "Date of Birth" ) . fill ( "2024-07-12" ) ;
240
- await page . getByLabel ( "Medical Record Number" ) . fill ( "18091" ) ;
241
-
242
- await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
243
-
244
- // Make sure we have a results page with a single patient
245
- await expect (
246
- page . getByRole ( "heading" , { name : "Patient Record" } ) ,
247
- ) . toBeVisible ( ) ;
248
- await expect ( page . getByText ( "Patient Name" ) ) . toBeVisible ( ) ;
249
- await expect ( page . getByText ( "WATERMELON SPROUT MCGEE" ) ) . toBeVisible ( ) ;
250
- await expect ( page . getByText ( "Patient Identifiers" ) ) . toBeVisible ( ) ;
251
- await expect ( page . getByText ( "MRN: 18091" ) ) . toBeVisible ( ) ;
252
- } ) ;
253
-
254
- test ( "Query with multiple patients returned" , async ( { page } ) => {
255
- // Query for a patient with multiple results
256
- await page
257
- . getByLabel ( "Query" , { exact : true } )
258
- . selectOption ( "Chlamydia case investigation" ) ;
259
- await page . getByRole ( "button" , { name : "Advanced" } ) . click ( ) ;
260
- await page
261
- . getByLabel ( "FHIR Server (QHIN)" , { exact : true } )
262
- . selectOption ( "JMC Meld: Direct" ) ;
263
- await page . getByLabel ( "Last Name" ) . fill ( "JMC" ) ;
264
-
265
- await page . getByRole ( "button" , { name : "Search for patient" } ) . click ( ) ;
266
- // Make sure all the elements for the multiple patients view appear
267
- await expect (
268
- page . getByRole ( "heading" , { name : "Select a patient" } ) ,
269
- ) . toBeVisible ( ) ;
270
- // Check that there is a Table element with the correct headers
271
- await expect ( page . locator ( "thead" ) . locator ( "tr" ) ) . toHaveText (
272
- "NameDOBContactAddressMRNActions" ,
273
- ) ;
274
-
275
- // Check that there are multiple rows in the table
276
- await expect ( page . locator ( "tbody" ) . locator ( "tr" ) ) . toHaveCount ( 10 ) ;
277
-
278
- // Click on the first patient's "Select patient" button
279
- await page . locator ( ':nth-match(:text("Select patient"), 1)' ) . click ( ) ;
280
-
281
- // Make sure we have a results page with a single patient & appropriate back buttons
282
- await expect (
283
- page . getByRole ( "heading" , { name : "Patient Record" } ) ,
284
- ) . toBeVisible ( ) ;
285
- await expect (
286
- page . getByRole ( "button" , { name : "New patient search" } ) ,
287
- ) . toBeVisible ( ) ;
288
-
289
- await page . getByRole ( "button" , { name : "New patient search" } ) . click ( ) ;
290
- await expect (
291
- page . getByRole ( "heading" , { name : "Search for a Patient" , exact : true } ) ,
292
- ) . toBeVisible ( ) ;
293
- } ) ;
294
- } ) ;
0 commit comments