@@ -87,6 +87,17 @@ describe("extensibilityService", () => {
8787 return testInjector ;
8888 } ;
8989
90+ const stubInstalledExtensions = (
91+ testInjector : IInjector ,
92+ resolve : ( extensionName : string , fromDir : string ) => string ,
93+ ) : void => {
94+ const packageManager = testInjector . resolve ( "packageManager" ) ;
95+ packageManager . getInstalledPackagePath = async (
96+ packageName : string ,
97+ fromDir : string ,
98+ ) : Promise < string > => resolve ( packageName , fromDir ) ;
99+ } ;
100+
90101 const getExpectedInstallationPathForExtension = (
91102 testInjector : IInjector ,
92103 extensionName : string ,
@@ -320,14 +331,9 @@ describe("extensibilityService", () => {
320331 const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
321332 const extensionNames = [ "extension1" , "extension2" , "extension3" ] ;
322333 fs . exists = ( pathToCheck : string ) : boolean => true ;
323- fs . readDirectory = ( dir : string ) : string [ ] => {
324- assert . deepStrictEqual (
325- path . basename ( dir ) ,
326- constants . NODE_MODULES_FOLDER_NAME ,
327- ) ;
328- // Simulates extensions are installed in node_modules
329- return extensionNames ;
330- } ;
334+ stubInstalledExtensions ( testInjector , ( name , fromDir ) =>
335+ path . join ( fromDir , constants . NODE_MODULES_FOLDER_NAME , name ) ,
336+ ) ;
331337
332338 mockFsReadJson ( testInjector , extensionNames ) ;
333339
@@ -359,20 +365,15 @@ describe("extensibilityService", () => {
359365 fs . exists = ( pathToCheck : string ) : boolean =>
360366 path . basename ( pathToCheck ) !== extensionNames [ 0 ] ;
361367
362- let isFirstReadDirExecution = true ;
363- fs . readDirectory = ( dir : string ) : string [ ] => {
364- assert . deepStrictEqual (
365- path . basename ( dir ) ,
366- constants . NODE_MODULES_FOLDER_NAME ,
367- ) ;
368- // Simulates extensions are installed in node_modules
369- if ( isFirstReadDirExecution ) {
370- isFirstReadDirExecution = false ;
371- return extensionNames . filter ( ( ext ) => ext !== "extension1" ) ;
372- } else {
373- return extensionNames ;
368+ // extension1 is missing until the service installs it
369+ let isExtension1Installed = false ;
370+ stubInstalledExtensions ( testInjector , ( name , fromDir ) => {
371+ if ( name === "extension1" && ! isExtension1Installed ) {
372+ isExtension1Installed = true ;
373+ return null ;
374374 }
375- } ;
375+ return path . join ( fromDir , constants . NODE_MODULES_FOLDER_NAME , name ) ;
376+ } ) ;
376377
377378 mockFsReadJson ( testInjector , extensionNames ) ;
378379
@@ -415,14 +416,9 @@ describe("extensibilityService", () => {
415416 const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
416417 const extensionNames = [ "extension1" , "extension2" , "extension3" ] ;
417418 fs . exists = ( pathToCheck : string ) : boolean => true ;
418- fs . readDirectory = ( dir : string ) : string [ ] => {
419- assert . deepStrictEqual (
420- path . basename ( dir ) ,
421- constants . NODE_MODULES_FOLDER_NAME ,
422- ) ;
423- // Simulates extensions are installed in node_modules
424- return extensionNames ;
425- } ;
419+ stubInstalledExtensions ( testInjector , ( name , fromDir ) =>
420+ path . join ( fromDir , constants . NODE_MODULES_FOLDER_NAME , name ) ,
421+ ) ;
426422
427423 mockFsReadJson ( testInjector , extensionNames ) ;
428424
@@ -469,7 +465,7 @@ describe("extensibilityService", () => {
469465 }
470466 } ) ;
471467
472- it ( "rejects all promises when unable to read node_modules dir (simulate EPERM error)" , async ( ) => {
468+ it ( "rejects all promises when the package manager cannot locate extensions (simulate EPERM error)" , async ( ) => {
473469 const testInjector = getTestInjector ( ) ;
474470 const extensionNames = [ "extension1" , "extension2" , "extension3" ] ;
475471 const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
@@ -480,14 +476,10 @@ describe("extensibilityService", () => {
480476 mockFsReadJson ( testInjector , extensionNames ) ;
481477
482478 let isReadDirCalled = false ;
483- fs . readDirectory = ( dir : string ) : string [ ] => {
479+ stubInstalledExtensions ( testInjector , ( ) => {
484480 isReadDirCalled = true ;
485- assert . deepStrictEqual (
486- path . basename ( dir ) ,
487- constants . NODE_MODULES_FOLDER_NAME ,
488- ) ;
489481 throw new Error ( expectedErrorMessage ) ;
490- } ;
482+ } ) ;
491483
492484 const extensibilityService : IExtensibilityService =
493485 testInjector . resolve ( ExtensibilityService ) ;
@@ -532,14 +524,10 @@ describe("extensibilityService", () => {
532524 mockFsReadJson ( testInjector , extensionNames ) ;
533525
534526 let isReadDirCalled = false ;
535- fs . readDirectory = ( dir : string ) : string [ ] => {
527+ stubInstalledExtensions ( testInjector , ( ) => {
536528 isReadDirCalled = true ;
537- assert . deepStrictEqual (
538- path . basename ( dir ) ,
539- constants . NODE_MODULES_FOLDER_NAME ,
540- ) ;
541- return [ ] ;
542- } ;
529+ return null ;
530+ } ) ;
543531
544532 let isNpmInstallCalled = false ;
545533 const npm : INodePackageManager = testInjector . resolve ( "npm" ) ;
0 commit comments