@@ -18,7 +18,9 @@ describe("extensibilityService", () => {
18
18
19
19
const getTestInjector = ( ) : IInjector => {
20
20
const testInjector = new Yok ( ) ;
21
- testInjector . register ( "fs" , { } ) ;
21
+ testInjector . register ( "fs" , {
22
+ readJson : ( pathToFile : string ) : any => ( { } )
23
+ } ) ;
22
24
testInjector . register ( "logger" , stubs . LoggerStub ) ;
23
25
testInjector . register ( "npm" , { } ) ;
24
26
testInjector . register ( "settingsService" , SettingsService ) ;
@@ -28,6 +30,33 @@ describe("extensibilityService", () => {
28
30
return testInjector ;
29
31
} ;
30
32
33
+ const getExpectedInstallationPathForExtension = ( testInjector : IInjector , extensionName : string ) : string => {
34
+ const settingsService = testInjector . resolve < ISettingsService > ( "settingsService" ) ;
35
+ const profileDir = settingsService . getProfileDir ( ) ;
36
+
37
+ return path . join ( profileDir , "extensions" , "node_modules" , extensionName ) ;
38
+ } ;
39
+
40
+ const mockFsReadJson = ( testInjector : IInjector , extensionNames : string [ ] ) : void => {
41
+ const fs = testInjector . resolve < IFileSystem > ( "fs" ) ;
42
+ fs . readJson = ( filename : string , encoding ?: string ) : any => {
43
+ const extensionName = _ . find ( extensionNames , extName => filename . indexOf ( extName ) !== - 1 ) ;
44
+ if ( extensionName ) {
45
+ return {
46
+ name : extensionName ,
47
+ version : "1.0.0"
48
+ } ;
49
+ }
50
+
51
+ const dependencies : any = { } ;
52
+ _ . each ( extensionNames , name => {
53
+ dependencies [ name ] = "1.0.0" ;
54
+ } ) ;
55
+
56
+ return { dependencies } ;
57
+ } ;
58
+ } ;
59
+
31
60
describe ( "installExtension" , ( ) => {
32
61
describe ( "fails" , ( ) => {
33
62
it ( "when extensions dir does not exist and trying to create it fails" , async ( ) => {
@@ -133,17 +162,20 @@ describe("extensibilityService", () => {
133
162
it ( "returns the name of the installed extension" , async ( ) => {
134
163
const extensionName = "extension1" ;
135
164
const testInjector = getTestInjector ( ) ;
165
+
136
166
const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
137
167
fs . exists = ( pathToCheck : string ) : boolean => path . basename ( pathToCheck ) !== extensionName ;
138
168
139
169
fs . readDirectory = ( dir : string ) : string [ ] => [ extensionName ] ;
140
170
171
+ fs . readJson = ( ) => ( { name : extensionName , version : "1.0.0" } ) ;
172
+
141
173
const npm : INodePackageManager = testInjector . resolve ( "npm" ) ;
142
- npm . install = async ( packageName : string , pathToSave : string , config ?: any ) : Promise < any > => ( { name : extensionName } ) ;
174
+ npm . install = async ( packageName : string , pathToSave : string , config ?: any ) : Promise < any > => ( { name : extensionName , version : "1.0.0" } ) ;
143
175
144
176
const extensibilityService : IExtensibilityService = testInjector . resolve ( ExtensibilityService ) ;
145
177
const actualResult = await extensibilityService . installExtension ( extensionName ) ;
146
- assert . deepEqual ( actualResult , { extensionName } ) ;
178
+ assert . deepEqual ( actualResult , { extensionName, version : "1.0.0" , docs : undefined , pathToExtension : getExpectedInstallationPathForExtension ( testInjector , extensionName ) } ) ;
147
179
} ) ;
148
180
} ) ;
149
181
@@ -160,16 +192,16 @@ describe("extensibilityService", () => {
160
192
return extensionNames ;
161
193
} ;
162
194
163
- fs . readJson = ( filename : string , encoding ?: string ) : any => {
164
- const dependencies : any = { } ;
165
- _ . each ( extensionNames , name => {
166
- dependencies [ name ] = "1.0.0" ;
167
- } ) ;
168
-
169
- return { dependencies } ;
170
- } ;
195
+ mockFsReadJson ( testInjector , extensionNames ) ;
171
196
172
- const expectedResults : IExtensionData [ ] = _ . map ( extensionNames , extensionName => ( { extensionName } ) ) ;
197
+ const expectedResults : IExtensionData [ ] = _ . map ( extensionNames , extensionName => (
198
+ {
199
+ extensionName,
200
+ version : "1.0.0" ,
201
+ pathToExtension : getExpectedInstallationPathForExtension ( testInjector , extensionName ) ,
202
+ docs : undefined
203
+ }
204
+ ) ) ;
173
205
174
206
const extensibilityService : IExtensibilityService = testInjector . resolve ( ExtensibilityService ) ;
175
207
const actualResult = await Promise . all ( extensibilityService . loadExtensions ( ) ) ;
@@ -194,14 +226,7 @@ describe("extensibilityService", () => {
194
226
}
195
227
} ;
196
228
197
- fs . readJson = ( filename : string , encoding ?: string ) : any => {
198
- const dependencies : any = { } ;
199
- _ . each ( extensionNames , name => {
200
- dependencies [ name ] = "1.0.0" ;
201
- } ) ;
202
-
203
- return { dependencies } ;
204
- } ;
229
+ mockFsReadJson ( testInjector , extensionNames ) ;
205
230
206
231
let isNpmInstallCalled = false ;
207
232
const npm : INodePackageManager = testInjector . resolve ( "npm" ) ;
@@ -211,7 +236,7 @@ describe("extensibilityService", () => {
211
236
return { name : packageName } ;
212
237
} ;
213
238
214
- const expectedResults : IExtensionData [ ] = _ . map ( extensionNames , extensionName => ( { extensionName } ) ) ;
239
+ const expectedResults : IExtensionData [ ] = _ . map ( extensionNames , extensionName => ( { extensionName, version : "1.0.0" , pathToExtension : getExpectedInstallationPathForExtension ( testInjector , extensionName ) , docs : undefined } ) ) ;
215
240
216
241
const extensibilityService : IExtensibilityService = testInjector . resolve ( ExtensibilityService ) ;
217
242
const actualResult = await Promise . all ( extensibilityService . loadExtensions ( ) ) ;
@@ -230,14 +255,7 @@ describe("extensibilityService", () => {
230
255
return extensionNames ;
231
256
} ;
232
257
233
- fs . readJson = ( filename : string , encoding ?: string ) : any => {
234
- const dependencies : any = { } ;
235
- _ . each ( extensionNames , name => {
236
- dependencies [ name ] = "1.0.0" ;
237
- } ) ;
238
-
239
- return { dependencies } ;
240
- } ;
258
+ mockFsReadJson ( testInjector , extensionNames ) ;
241
259
242
260
const requireService : IRequireService = testInjector . resolve ( "requireService" ) ;
243
261
requireService . require = ( module : string ) => {
@@ -246,7 +264,7 @@ describe("extensibilityService", () => {
246
264
}
247
265
} ;
248
266
249
- const expectedResults : any [ ] = _ . map ( extensionNames , extensionName => ( { extensionName } ) ) ;
267
+ const expectedResults : any [ ] = _ . map ( extensionNames , extensionName => ( { extensionName, version : "1.0.0" , pathToExtension : getExpectedInstallationPathForExtension ( testInjector , extensionName ) , docs : undefined } ) ) ;
250
268
expectedResults [ 0 ] = new Error ( "Unable to load extension extension1. You will not be able to use the functionality that it adds. Error: Unable to load module." ) ;
251
269
const extensibilityService : IExtensibilityService = testInjector . resolve ( ExtensibilityService ) ;
252
270
const promises = extensibilityService . loadExtensions ( ) ;
@@ -269,14 +287,7 @@ describe("extensibilityService", () => {
269
287
const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
270
288
const expectedErrorMessage = `Unable to read ${ constants . NODE_MODULES_FOLDER_NAME } dir.` ;
271
289
fs . exists = ( pathToCheck : string ) : boolean => path . basename ( pathToCheck ) === "extensions" || path . basename ( pathToCheck ) === constants . PACKAGE_JSON_FILE_NAME ;
272
- fs . readJson = ( filename : string , encoding ?: string ) : any => {
273
- const dependencies : any = { } ;
274
- _ . each ( extensionNames , name => {
275
- dependencies [ name ] = "1.0.0" ;
276
- } ) ;
277
-
278
- return { dependencies } ;
279
- } ;
290
+ mockFsReadJson ( testInjector , extensionNames ) ;
280
291
281
292
let isReadDirCalled = false ;
282
293
fs . readDirectory = ( dir : string ) : string [ ] => {
@@ -310,14 +321,7 @@ describe("extensibilityService", () => {
310
321
"expected 'extension3' to deeply equal 'extension1'" ] ;
311
322
const fs : IFileSystem = testInjector . resolve ( "fs" ) ;
312
323
fs . exists = ( pathToCheck : string ) : boolean => path . basename ( pathToCheck ) === "extensions" || path . basename ( pathToCheck ) === constants . PACKAGE_JSON_FILE_NAME ;
313
- fs . readJson = ( filename : string , encoding ?: string ) : any => {
314
- const dependencies : any = { } ;
315
- _ . each ( extensionNames , name => {
316
- dependencies [ name ] = "1.0.0" ;
317
- } ) ;
318
-
319
- return { dependencies } ;
320
- } ;
324
+ mockFsReadJson ( testInjector , extensionNames ) ;
321
325
322
326
let isReadDirCalled = false ;
323
327
fs . readDirectory = ( dir : string ) : string [ ] => {
0 commit comments