@@ -316,3 +316,93 @@ describe("When the project has no instructions", () => {
316
316
} ) ;
317
317
} ) ;
318
318
} ) ;
319
+
320
+ describe ( "When plugins are provided" , ( ) => {
321
+ const initialState = {
322
+ editor : {
323
+ project : {
324
+ components : [ ] ,
325
+ image_list : [ ] ,
326
+ } ,
327
+ instructionsEditable : false ,
328
+ } ,
329
+ instructions : { } ,
330
+ } ;
331
+ const mockStore = configureStore ( [ ] ) ;
332
+ const store = mockStore ( initialState ) ;
333
+ const defaultPlugin = {
334
+ name : "my-amazing-plugin" ,
335
+ icon : ( ) => { } ,
336
+ heading : "My amazing plugin" ,
337
+ title : "my amazing plugin" ,
338
+ panel : ( ) => < p > My amazing content</ p > ,
339
+ } ;
340
+
341
+ describe ( "when plugin has autoOpen true" , ( ) => {
342
+ beforeEach ( ( ) => {
343
+ const plugins = [
344
+ {
345
+ ...defaultPlugin ,
346
+ autoOpen : true ,
347
+ } ,
348
+ ] ;
349
+ render (
350
+ < Provider store = { store } >
351
+ < div id = "app" >
352
+ < Sidebar options = { options } plugins = { plugins } />
353
+ </ div >
354
+ </ Provider > ,
355
+ ) ;
356
+ } ) ;
357
+
358
+ test ( "Shows plugin icon" , ( ) => {
359
+ expect ( screen . queryByTitle ( "my amazing plugin" ) ) . toBeInTheDocument ( ) ;
360
+ } ) ;
361
+
362
+ test ( "Render the plugin panel open by default" , ( ) => {
363
+ expect ( screen . queryByText ( "My amazing plugin" ) ) . toBeInTheDocument ( ) ;
364
+ } ) ;
365
+
366
+ test ( "Renders the plugin content" , ( ) => {
367
+ expect ( screen . queryByText ( "My amazing content" ) ) . toBeInTheDocument ( ) ;
368
+ } ) ;
369
+ } ) ;
370
+
371
+ describe ( "when plugin has autoOpen false" , ( ) => {
372
+ beforeEach ( ( ) => {
373
+ const plugins = [
374
+ {
375
+ ...defaultPlugin ,
376
+ autoOpen : false ,
377
+ } ,
378
+ ] ;
379
+ render (
380
+ < Provider store = { store } >
381
+ < div id = "app" >
382
+ < Sidebar options = { options } plugins = { plugins } />
383
+ </ div >
384
+ </ Provider > ,
385
+ ) ;
386
+ } ) ;
387
+
388
+ test ( "Shows plugin icon" , ( ) => {
389
+ expect ( screen . queryByTitle ( "my amazing plugin" ) ) . toBeInTheDocument ( ) ;
390
+ } ) ;
391
+
392
+ test ( "Does not render the plugin panel open by default" , ( ) => {
393
+ expect ( screen . queryByText ( "My amazing plugin" ) ) . not . toBeInTheDocument ( ) ;
394
+ } ) ;
395
+
396
+ test ( "Opening the panel shows the plugin heading" , ( ) => {
397
+ const pluginButton = screen . getByTitle ( "my amazing plugin" ) ;
398
+ fireEvent . click ( pluginButton ) ;
399
+ expect ( screen . queryByText ( "My amazing plugin" ) ) . toBeInTheDocument ( ) ;
400
+ } ) ;
401
+
402
+ test ( "Opening the panel shows the plugin content" , ( ) => {
403
+ const pluginButton = screen . getByTitle ( "my amazing plugin" ) ;
404
+ fireEvent . click ( pluginButton ) ;
405
+ expect ( screen . queryByText ( "My amazing content" ) ) . toBeInTheDocument ( ) ;
406
+ } ) ;
407
+ } ) ;
408
+ } ) ;
0 commit comments