@@ -279,6 +279,91 @@ test('return error when manifest contains unrecognized properties', async () =>
279
279
} ) ;
280
280
} ) ;
281
281
282
+ describe ( 'requiredOpenSearchPlugins' , ( ) => {
283
+ test ( 'return error when plugin `requiredOpenSearchPlugins` is a string and not an array of string' , async ( ) => {
284
+ mockReadFile . mockImplementation ( ( path , cb ) => {
285
+ cb (
286
+ null ,
287
+ Buffer . from (
288
+ JSON . stringify ( {
289
+ id : 'id1' ,
290
+ version : '7.0.0' ,
291
+ server : true ,
292
+ requiredOpenSearchPlugins : 'abc' ,
293
+ } )
294
+ )
295
+ ) ;
296
+ } ) ;
297
+
298
+ await expect ( parseManifest ( pluginPath , packageInfo , logger ) ) . rejects . toMatchObject ( {
299
+ message : `The "requiredOpenSearchPlugins" in plugin manifest for "id1" should be an array of strings. (invalid-manifest, ${ pluginManifestPath } )` ,
300
+ type : PluginDiscoveryErrorType . InvalidManifest ,
301
+ path : pluginManifestPath ,
302
+ } ) ;
303
+ } ) ;
304
+
305
+ test ( 'return error when `requiredOpenSearchPlugins` is not a string' , async ( ) => {
306
+ mockReadFile . mockImplementation ( ( path , cb ) => {
307
+ cb (
308
+ null ,
309
+ Buffer . from ( JSON . stringify ( { id : 'id2' , version : '7.0.0' , requiredOpenSearchPlugins : 2 } ) )
310
+ ) ;
311
+ } ) ;
312
+
313
+ await expect ( parseManifest ( pluginPath , packageInfo , logger ) ) . rejects . toMatchObject ( {
314
+ message : `The "requiredOpenSearchPlugins" in plugin manifest for "id2" should be an array of strings. (invalid-manifest, ${ pluginManifestPath } )` ,
315
+ type : PluginDiscoveryErrorType . InvalidManifest ,
316
+ path : pluginManifestPath ,
317
+ } ) ;
318
+ } ) ;
319
+
320
+ test ( 'return error when plugin requiredOpenSearchPlugins is an array that contains non-string values' , async ( ) => {
321
+ mockReadFile . mockImplementation ( ( path , cb ) => {
322
+ cb (
323
+ null ,
324
+ Buffer . from (
325
+ JSON . stringify ( { id : 'id3' , version : '7.0.0' , requiredOpenSearchPlugins : [ 'plugin1' , 2 ] } )
326
+ )
327
+ ) ;
328
+ } ) ;
329
+
330
+ await expect ( parseManifest ( pluginPath , packageInfo , logger ) ) . rejects . toMatchObject ( {
331
+ message : `The "requiredOpenSearchPlugins" in plugin manifest for "id3" should be an array of strings. (invalid-manifest, ${ pluginManifestPath } )` ,
332
+ type : PluginDiscoveryErrorType . InvalidManifest ,
333
+ path : pluginManifestPath ,
334
+ } ) ;
335
+ } ) ;
336
+
337
+ test ( 'Happy path when plugin `requiredOpenSearchPlugins` is an array of string' , async ( ) => {
338
+ mockReadFile . mockImplementation ( ( path , cb ) => {
339
+ cb (
340
+ null ,
341
+ Buffer . from (
342
+ JSON . stringify ( {
343
+ id : 'id1' ,
344
+ version : '7.0.0' ,
345
+ server : true ,
346
+ requiredOpenSearchPlugins : [ 'plugin1' , 'plugin2' ] ,
347
+ } )
348
+ )
349
+ ) ;
350
+ } ) ;
351
+
352
+ await expect ( parseManifest ( pluginPath , packageInfo , logger ) ) . resolves . toEqual ( {
353
+ id : 'id1' ,
354
+ configPath : 'id_1' ,
355
+ version : '7.0.0' ,
356
+ opensearchDashboardsVersion : '7.0.0' ,
357
+ optionalPlugins : [ ] ,
358
+ requiredPlugins : [ ] ,
359
+ requiredOpenSearchPlugins : [ 'plugin1' , 'plugin2' ] ,
360
+ requiredBundles : [ ] ,
361
+ server : true ,
362
+ ui : false ,
363
+ } ) ;
364
+ } ) ;
365
+ } ) ;
366
+
282
367
describe ( 'configPath' , ( ) => {
283
368
test ( 'falls back to plugin id if not specified' , async ( ) => {
284
369
mockReadFile . mockImplementation ( ( path , cb ) => {
@@ -339,6 +424,7 @@ test('set defaults for all missing optional fields', async () => {
339
424
opensearchDashboardsVersion : '7.0.0' ,
340
425
optionalPlugins : [ ] ,
341
426
requiredPlugins : [ ] ,
427
+ requiredOpenSearchPlugins : [ ] ,
342
428
requiredBundles : [ ] ,
343
429
server : true ,
344
430
ui : false ,
@@ -357,6 +443,7 @@ test('return all set optional fields as they are in manifest', async () => {
357
443
opensearchDashboardsVersion : '7.0.0' ,
358
444
requiredPlugins : [ 'some-required-plugin' , 'some-required-plugin-2' ] ,
359
445
optionalPlugins : [ 'some-optional-plugin' ] ,
446
+ requiredOpenSearchPlugins : [ 'test-opensearch-plugin-1' , 'test-opensearch-plugin-2' ] ,
360
447
ui : true ,
361
448
} )
362
449
)
@@ -371,6 +458,7 @@ test('return all set optional fields as they are in manifest', async () => {
371
458
optionalPlugins : [ 'some-optional-plugin' ] ,
372
459
requiredBundles : [ ] ,
373
460
requiredPlugins : [ 'some-required-plugin' , 'some-required-plugin-2' ] ,
461
+ requiredOpenSearchPlugins : [ 'test-opensearch-plugin-1' , 'test-opensearch-plugin-2' ] ,
374
462
server : false ,
375
463
ui : true ,
376
464
} ) ;
@@ -387,6 +475,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version matches
387
475
version : 'some-version' ,
388
476
opensearchDashboardsVersion : '7.0.0-alpha2' ,
389
477
requiredPlugins : [ 'some-required-plugin' ] ,
478
+ requiredOpenSearchPlugins : [ ] ,
390
479
server : true ,
391
480
} )
392
481
)
@@ -400,6 +489,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version matches
400
489
opensearchDashboardsVersion : '7.0.0-alpha2' ,
401
490
optionalPlugins : [ ] ,
402
491
requiredPlugins : [ 'some-required-plugin' ] ,
492
+ requiredOpenSearchPlugins : [ ] ,
403
493
requiredBundles : [ ] ,
404
494
server : true ,
405
495
ui : false ,
@@ -430,6 +520,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version is `ope
430
520
opensearchDashboardsVersion : 'opensearchDashboards' ,
431
521
optionalPlugins : [ ] ,
432
522
requiredPlugins : [ 'some-required-plugin' ] ,
523
+ requiredOpenSearchPlugins : [ ] ,
433
524
requiredBundles : [ ] ,
434
525
server : true ,
435
526
ui : true ,
0 commit comments