@@ -14,6 +14,7 @@ import {
14
14
createMockAxiosInstance ,
15
15
createMockConfiguration ,
16
16
createMockTreeView ,
17
+ createMockUri ,
17
18
} from "./test-helpers" ;
18
19
19
20
// Setup all mocks
@@ -116,12 +117,33 @@ beforeEach(() => {
116
117
vi . clearAllMocks ( ) ;
117
118
} ) ;
118
119
120
+ // Test helper functions
121
+ const setupVSCodeMocks = async ( ) => {
122
+ const vscode = await import ( "vscode" ) ;
123
+ return vscode ;
124
+ } ;
125
+
126
+ const createAuthTestContext = ( ) => {
127
+ const mockStorage = createMockStorage ( { writeToCoderOutputChannel :vi . fn ( ) } ) ;
128
+ const mockMyWorkspacesProvider = createMockWorkspaceProvider ( {
129
+ fetchAndRefresh :vi . fn ( ) ,
130
+ } ) ;
131
+ const mockAllWorkspacesProvider = createMockWorkspaceProvider ( {
132
+ fetchAndRefresh :vi . fn ( ) ,
133
+ } ) ;
134
+ return {
135
+ mockStorage,
136
+ mockMyWorkspacesProvider,
137
+ mockAllWorkspacesProvider,
138
+ } ;
139
+ } ;
140
+
119
141
describe ( "extension" , ( ) => {
120
142
describe ( "setupRemoteSSHExtension" , ( ) => {
121
143
it . each ( [
122
144
[ "ms-vscode-remote.remote-ssh" , "ms-vscode-remote.remote-ssh" , false ] ,
123
145
] ) ( "should handle %s" , async ( _ , extensionId , shouldShowError ) => {
124
- const vscode = await import ( "vscode" ) ;
146
+ const vscode = await setupVSCodeMocks ( ) ;
125
147
const mockExtension = extensionId
126
148
?createMockRemoteSSHExtension ( { extensionPath :"/path/to/extension" } )
127
149
:undefined ;
@@ -150,7 +172,7 @@ describe("extension", () => {
150
172
151
173
describe ( "initializeInfrastructure" , ( ) => {
152
174
it ( "should create storage and logger with verbose setting from config" , async ( ) => {
153
- const vscode = await import ( "vscode" ) ;
175
+ const vscode = await setupVSCodeMocks ( ) ;
154
176
const Storage = ( await import ( "./storage" ) ) . Storage ;
155
177
const Logger = ( await import ( "./logger" ) ) . Logger ;
156
178
@@ -165,17 +187,13 @@ describe("extension", () => {
165
187
} ) ;
166
188
167
189
// Track Storage and Logger creation
168
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
- let storageInstance :any ;
170
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
- let loggerInstance :any ;
172
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
- vi . mocked ( Storage ) . mockImplementation ( ( ...args :any [ ] ) => {
190
+ let storageInstance :unknown ;
191
+ let loggerInstance :unknown ;
192
+ vi . mocked ( Storage ) . mockImplementation ( ( ...args :unknown [ ] ) => {
174
193
storageInstance = { args, setLogger :vi . fn ( ) } ;
175
194
return storageInstance as never ;
176
195
} ) ;
177
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
178
- vi . mocked ( Logger ) . mockImplementation ( ( ...args :any [ ] ) => {
196
+ vi . mocked ( Logger ) . mockImplementation ( ( ...args :unknown [ ] ) => {
179
197
loggerInstance = { args} ;
180
198
return loggerInstance as never ;
181
199
} ) ;
@@ -316,17 +334,15 @@ describe("extension", () => {
316
334
} ) ;
317
335
318
336
describe ( "registerUriHandler" , ( ) => {
319
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
- let registeredHandler :any ;
337
+ let registeredHandler :vscodeActual . UriHandler ;
321
338
322
339
const setupUriHandler = async ( ) => {
323
340
const { needToken} = await import ( "./api" ) ;
324
341
const { toSafeHost} = await import ( "./util" ) ;
325
- const vscode = await import ( "vscode" ) ;
342
+ const vscode = await setupVSCodeMocks ( ) ;
326
343
327
344
vi . mocked ( vscode . window . registerUriHandler ) . mockImplementation (
328
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
329
- ( handler :any ) => {
345
+ ( handler :vscodeActual . UriHandler ) => {
330
346
registeredHandler = handler ;
331
347
return { dispose :vi . fn ( ) } ;
332
348
} ,
@@ -335,7 +351,8 @@ describe("extension", () => {
335
351
return { needToken, toSafeHost} ;
336
352
} ;
337
353
338
- it . each ( [
354
+ // Test data for URI handler tests
355
+ const uriHandlerTestCases = [
339
356
{
340
357
name :"/open path with all parameters" ,
341
358
path :"/open" ,
@@ -370,7 +387,9 @@ describe("extension", () => {
370
387
"/workspace" ,
371
388
] ,
372
389
} ,
373
- ] ) (
390
+ ] ;
391
+
392
+ it . each ( uriHandlerTestCases ) (
374
393
"should handle $name" ,
375
394
async ( { path, query, mockUrl, oldUrl, hasToken, expectedCommand} ) => {
376
395
const vscode = await import ( "vscode" ) ;
@@ -394,7 +413,7 @@ describe("extension", () => {
394
413
mockRestClient as never ,
395
414
mockStorage as never ,
396
415
) ;
397
- await registeredHandler . handleUri ( { path, query} ) ;
416
+ await registeredHandler . handleUri ( createMockUri ( ` ${ path } ? ${ query } ` ) ) ;
398
417
399
418
expect ( mockCommands . maybeAskUrl ) . toHaveBeenCalledWith ( mockUrl , oldUrl ) ;
400
419
expect ( mockRestClient . setHost ) . toHaveBeenCalledWith ( mockUrl ) ;
@@ -429,7 +448,7 @@ describe("extension", () => {
429
448
mocks . storage as never ,
430
449
) ;
431
450
await expect (
432
- registeredHandler . handleUri ( { path : "/unknown" , query : "" } ) ,
451
+ registeredHandler . handleUri ( createMockUri ( "/unknown?" ) ) ,
433
452
) . rejects . toThrow ( "Unknown path /unknown" ) ;
434
453
} ) ;
435
454
@@ -458,7 +477,7 @@ describe("extension", () => {
458
477
mocks . storage as never ,
459
478
) ;
460
479
await expect (
461
- registeredHandler . handleUri ( { path, query} ) ,
480
+ registeredHandler . handleUri ( createMockUri ( ` ${ path } ? ${ query } ` ) ) ,
462
481
) . rejects . toThrow ( error ) ;
463
482
} ) ;
464
483
} ) ;
@@ -571,21 +590,6 @@ describe("extension", () => {
571
590
vi . clearAllMocks ( ) ;
572
591
} ) ;
573
592
574
- const createAuthTestSetup = ( ) => {
575
- const mockStorage = { writeToCoderOutputChannel :vi . fn ( ) } ;
576
- const mockMyWorkspacesProvider = createMockWorkspaceProvider ( {
577
- fetchAndRefresh :vi . fn ( ) ,
578
- } ) ;
579
- const mockAllWorkspacesProvider = createMockWorkspaceProvider ( {
580
- fetchAndRefresh :vi . fn ( ) ,
581
- } ) ;
582
- return {
583
- mockStorage,
584
- mockMyWorkspacesProvider,
585
- mockAllWorkspacesProvider,
586
- } ;
587
- } ;
588
-
589
593
it . each ( [
590
594
[
591
595
"valid member authentication" ,
@@ -600,7 +604,7 @@ describe("extension", () => {
600
604
mockStorage,
601
605
mockMyWorkspacesProvider,
602
606
mockAllWorkspacesProvider,
603
- } = createAuthTestSetup ( ) ;
607
+ } = createAuthTestContext ( ) ;
604
608
605
609
const mockRestClient = {
606
610
getAxiosInstance :vi