@@ -79,33 +79,28 @@ function createMockWebSocket(
79
79
80
80
addEventListener : < E extends keyof WebSocketEventMap > (
81
81
eventType : E ,
82
- callback : WebSocketEventMap [ E ] ,
82
+ cb : ( event : WebSocketEventMap [ E ] ) => void ,
83
83
) => {
84
84
if ( closed ) {
85
85
return ;
86
86
}
87
87
88
88
const subscribers = store [ eventType ] ;
89
- const cb = callback as unknown as CallbackStore [ E ] [ 0 ] ;
90
89
if ( ! subscribers . includes ( cb ) ) {
91
90
subscribers . push ( cb ) ;
92
91
}
93
92
} ,
94
93
95
94
removeEventListener : < E extends keyof WebSocketEventMap > (
96
95
eventType : E ,
97
- callback : WebSocketEventMap [ E ] ,
96
+ cb : ( event : WebSocketEventMap [ E ] ) => void ,
98
97
) => {
99
98
if ( closed ) {
100
99
return ;
101
100
}
102
101
103
- const subscribers = store [ eventType ] ;
104
- const cb = callback as unknown as CallbackStore [ E ] [ 0 ] ;
105
- if ( subscribers . includes ( cb ) ) {
106
- const updated = store [ eventType ] . filter ( ( c ) => c !== cb ) ;
107
- store [ eventType ] = updated as unknown as CallbackStore [ E ] ;
108
- }
102
+ const updated = store [ eventType ] . filter ( ( c ) => c !== cb ) ;
103
+ store [ eventType ] = updated as unknown as CallbackStore [ E ] ;
109
104
} ,
110
105
111
106
close : ( ) => {
@@ -189,25 +184,25 @@ const mockDynamicParametersResponseWithError: DynamicParametersResponse = {
189
184
] ,
190
185
} ;
191
186
192
- const renderCreateWorkspacePageExperimental = (
193
- route = `/templates/${ MockTemplate . name } /workspace` ,
194
- ) => {
195
- return renderWithAuth ( < CreateWorkspacePageExperimental /> , {
196
- route,
197
- path : "/templates/:template/workspace" ,
198
- extraRoutes : [
199
- {
200
- path : "/:username/:workspace" ,
201
- element : < div > Workspace Page</ div > ,
202
- } ,
203
- ] ,
204
- } ) ;
205
- } ;
206
-
207
187
describe ( "CreateWorkspacePageExperimental" , ( ) => {
208
188
let mockWebSocket : WebSocket ;
209
189
let publisher : MockPublisher ;
210
190
191
+ const renderCreateWorkspacePageExperimental = (
192
+ route = `/templates/${ MockTemplate . name } /workspace` ,
193
+ ) => {
194
+ return renderWithAuth ( < CreateWorkspacePageExperimental /> , {
195
+ route,
196
+ path : "/templates/:template/workspace" ,
197
+ extraRoutes : [
198
+ {
199
+ path : "/:username/:workspace" ,
200
+ element : < div > Workspace Page</ div > ,
201
+ } ,
202
+ ] ,
203
+ } ) ;
204
+ } ;
205
+
211
206
beforeEach ( ( ) => {
212
207
jest . clearAllMocks ( ) ;
213
208
@@ -234,14 +229,12 @@ describe("CreateWorkspacePageExperimental", () => {
234
229
callbacks . onClose ( ) ;
235
230
} ) ;
236
231
237
- setTimeout ( ( ) => {
238
- publisher . publishOpen ( new Event ( "open" ) ) ;
239
- publisher . publishMessage (
240
- new MessageEvent ( "message" , {
241
- data : JSON . stringify ( mockDynamicParametersResponse ) ,
242
- } ) ,
243
- ) ;
244
- } , 10 ) ;
232
+ publisher . publishOpen ( new Event ( "open" ) ) ;
233
+ publisher . publishMessage (
234
+ new MessageEvent ( "message" , {
235
+ data : JSON . stringify ( mockDynamicParametersResponse ) ,
236
+ } ) ,
237
+ ) ;
245
238
246
239
return mockWebSocket ;
247
240
} ) ;
@@ -269,7 +262,7 @@ describe("CreateWorkspacePageExperimental", () => {
269
262
) ;
270
263
271
264
await waitFor ( ( ) => {
272
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
265
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i ) ) . toBeInTheDocument ( ) ;
273
266
expect ( screen . getByText ( "CPU Count" ) ) . toBeInTheDocument ( ) ;
274
267
expect ( screen . getByText ( "Enable Monitoring" ) ) . toBeInTheDocument ( ) ;
275
268
expect ( screen . getByText ( "Tags" ) ) . toBeInTheDocument ( ) ;
@@ -280,9 +273,7 @@ describe("CreateWorkspacePageExperimental", () => {
280
273
renderCreateWorkspacePageExperimental ( ) ;
281
274
await waitForLoaderToBeRemoved ( ) ;
282
275
283
- await waitFor ( ( ) => {
284
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
285
- } ) ;
276
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i) ) . toBeInTheDocument ( ) ;
286
277
287
278
expect ( mockWebSocket . send ) . toBeDefined ( ) ;
288
279
@@ -381,18 +372,16 @@ describe("CreateWorkspacePageExperimental", () => {
381
372
callbacks . onMessage ( JSON . parse ( event . data ) ) ;
382
373
} ) ;
383
374
384
- setTimeout ( ( ) => {
385
- publisher . publishOpen ( new Event ( "open" ) ) ;
386
- publisher . publishMessage (
387
- new MessageEvent ( "message" , {
388
- data : JSON . stringify ( {
389
- id : 0 ,
390
- parameters : [ mockDropdownParameter ] ,
391
- diagnostics : [ ] ,
392
- } ) ,
375
+ publisher . publishOpen ( new Event ( "open" ) ) ;
376
+ publisher . publishMessage (
377
+ new MessageEvent ( "message" , {
378
+ data : JSON . stringify ( {
379
+ id : 0 ,
380
+ parameters : [ mockDropdownParameter ] ,
381
+ diagnostics : [ ] ,
393
382
} ) ,
394
- ) ;
395
- } , 0 ) ;
383
+ } ) ,
384
+ ) ;
396
385
397
386
return mockWebSocket ;
398
387
} ) ;
@@ -411,20 +400,18 @@ describe("CreateWorkspacePageExperimental", () => {
411
400
diagnostics : [ ] ,
412
401
} ;
413
402
414
- setTimeout ( ( ) => {
403
+ await waitFor ( ( ) => {
415
404
publisher . publishMessage (
416
405
new MessageEvent ( "message" , { data : JSON . stringify ( response1 ) } ) ,
417
406
) ;
418
407
419
408
publisher . publishMessage (
420
409
new MessageEvent ( "message" , { data : JSON . stringify ( response2 ) } ) ,
421
410
) ;
422
- } , 0 ) ;
423
-
424
- await waitFor ( ( ) => {
425
- expect ( screen . queryByText ( "CPU Count" ) ) . toBeInTheDocument ( ) ;
426
- expect ( screen . queryByText ( "Instance Type" ) ) . not . toBeInTheDocument ( ) ;
427
411
} ) ;
412
+
413
+ expect ( screen . queryByText ( "CPU Count" ) ) . toBeInTheDocument ( ) ;
414
+ expect ( screen . queryByText ( "Instance Type" ) ) . not . toBeInTheDocument ( ) ;
428
415
} ) ;
429
416
} ) ;
430
417
@@ -433,28 +420,18 @@ describe("CreateWorkspacePageExperimental", () => {
433
420
renderCreateWorkspacePageExperimental ( ) ;
434
421
await waitForLoaderToBeRemoved ( ) ;
435
422
436
- await waitFor ( ( ) => {
437
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
438
- expect (
439
- screen . getByRole ( "combobox" , { name : / i n s t a n c e t y p e / i } ) ,
440
- ) . toBeInTheDocument ( ) ;
441
- } ) ;
423
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i) ) . toBeInTheDocument ( ) ;
442
424
443
425
const select = screen . getByRole ( "combobox" , { name : / i n s t a n c e t y p e / i } ) ;
444
426
445
427
await waitFor ( async ( ) => {
446
428
await userEvent . click ( select ) ;
447
429
} ) ;
448
430
449
- expect (
450
- screen . getByRole ( "option" , { name : / t 3 \. m i c r o / i } ) ,
451
- ) . toBeInTheDocument ( ) ;
452
- expect (
453
- screen . getByRole ( "option" , { name : / t 3 \. s m a l l / i } ) ,
454
- ) . toBeInTheDocument ( ) ;
455
- expect (
456
- screen . getByRole ( "option" , { name : / t 3 \. m e d i u m / i } ) ,
457
- ) . toBeInTheDocument ( ) ;
431
+ // Each option appears in both the trigger and the dropdown
432
+ expect ( screen . getAllByText ( / t 3 \. m i c r o / i) ) . toHaveLength ( 2 ) ;
433
+ expect ( screen . getAllByText ( / t 3 \. s m a l l / i) ) . toHaveLength ( 2 ) ;
434
+ expect ( screen . getAllByText ( / t 3 \. m e d i u m / i) ) . toHaveLength ( 2 ) ;
458
435
} ) ;
459
436
460
437
it ( "renders number parameter with slider" , async ( ) => {
@@ -539,13 +516,11 @@ describe("CreateWorkspacePageExperimental", () => {
539
516
callbacks . onMessage ( JSON . parse ( event . data ) ) ;
540
517
} ) ;
541
518
542
- setTimeout ( ( ) => {
543
- publisher . publishMessage (
544
- new MessageEvent ( "message" , {
545
- data : JSON . stringify ( mockDynamicParametersResponseWithError ) ,
546
- } ) ,
547
- ) ;
548
- } , 10 ) ;
519
+ publisher . publishMessage (
520
+ new MessageEvent ( "message" , {
521
+ data : JSON . stringify ( mockDynamicParametersResponseWithError ) ,
522
+ } ) ,
523
+ ) ;
549
524
550
525
return mockWebSocket ;
551
526
} ) ;
@@ -603,28 +578,24 @@ describe("CreateWorkspacePageExperimental", () => {
603
578
callbacks . onMessage ( JSON . parse ( event . data ) ) ;
604
579
} ) ;
605
580
606
- setTimeout ( ( ) => {
607
- publisher . publishOpen ( new Event ( "open" ) ) ;
581
+ publisher . publishOpen ( new Event ( "open" ) ) ;
608
582
609
- publisher . publishMessage (
610
- new MessageEvent ( "message" , {
611
- data : JSON . stringify ( mockResponseInitial ) ,
612
- } ) ,
613
- ) ;
614
- } , 10 ) ;
583
+ publisher . publishMessage (
584
+ new MessageEvent ( "message" , {
585
+ data : JSON . stringify ( mockResponseInitial ) ,
586
+ } ) ,
587
+ ) ;
615
588
616
589
const originalSend = socket . send ;
617
590
socket . send = jest . fn ( ( data ) => {
618
591
originalSend . call ( socket , data ) ;
619
592
620
593
if ( typeof data === "string" && data . includes ( '"200"' ) ) {
621
- setTimeout ( ( ) => {
622
- publisher . publishMessage (
623
- new MessageEvent ( "message" , {
624
- data : JSON . stringify ( mockResponseWithError ) ,
625
- } ) ,
626
- ) ;
627
- } , 10 ) ;
594
+ publisher . publishMessage (
595
+ new MessageEvent ( "message" , {
596
+ data : JSON . stringify ( mockResponseWithError ) ,
597
+ } ) ,
598
+ ) ;
628
599
}
629
600
} ) ;
630
601
@@ -746,9 +717,7 @@ describe("CreateWorkspacePageExperimental", () => {
746
717
747
718
await waitForLoaderToBeRemoved ( ) ;
748
719
749
- await waitFor ( ( ) => {
750
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
751
- } ) ;
720
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i) ) . toBeInTheDocument ( ) ;
752
721
753
722
await waitFor ( ( ) => {
754
723
expect ( screen . getByText ( "Create workspace" ) ) . toBeInTheDocument ( ) ;
@@ -764,9 +733,7 @@ describe("CreateWorkspacePageExperimental", () => {
764
733
renderCreateWorkspacePageExperimental ( ) ;
765
734
await waitForLoaderToBeRemoved ( ) ;
766
735
767
- await waitFor ( ( ) => {
768
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
769
- } ) ;
736
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i) ) . toBeInTheDocument ( ) ;
770
737
771
738
const nameInput = screen . getByRole ( "textbox" , {
772
739
name : / w o r k s p a c e n a m e / i,
@@ -813,10 +780,8 @@ describe("CreateWorkspacePageExperimental", () => {
813
780
) ;
814
781
await waitForLoaderToBeRemoved ( ) ;
815
782
816
- await waitFor ( ( ) => {
817
- expect ( screen . getByText ( "Instance Type" ) ) . toBeInTheDocument ( ) ;
818
- expect ( screen . getByText ( "CPU Count" ) ) . toBeInTheDocument ( ) ;
819
- } ) ;
783
+ expect ( screen . getByText ( / i n s t a n c e t y p e / i) ) . toBeInTheDocument ( ) ;
784
+ expect ( screen . getByText ( "CPU Count" ) ) . toBeInTheDocument ( ) ;
820
785
} ) ;
821
786
822
787
it ( "uses custom template version when specified" , async ( ) => {
0 commit comments