11import { elementUpdated , expect , fixture , html } from '@open-wc/testing' ;
22import { range } from 'lit/directives/range.js' ;
33import { match , restore , spy , stub } from 'sinon' ;
4+ import IgcIconButtonComponent from '../button/icon-button.js' ;
45import { defineComponents } from '../common/definitions/defineComponents.js' ;
56import { first } from '../common/util.js' ;
67import { simulateClick , simulateDoubleClick } from '../common/utils.spec.js' ;
@@ -27,19 +28,13 @@ describe('Tile Manager component', () => {
2728 return Array . from ( tileManager . querySelectorAll ( 'igc-tile' ) ) ;
2829 }
2930
30- // function getTileActionButtons(tile: IgcTileComponent) {
31- // console.log(tile.shadowRoot);
32- // console.log(tile.shadowRoot?.querySelector<HTMLElement>('igc-tile-header'));
33- // const actionsSection = tile.renderRoot.querySelector<HTMLElement>('igc-tile-header')?.querySelector('[part="actions"]')!;
34- // return actionsSection.querySelectorAll<HTMLElement>(`igc-icon-button`);
35- // }
36-
37- // function getTileActionButton(tile: IgcTileComponent, action: 'maximize' | 'restore' | 'fullscreen') {
38- // const btnName = action === 'maximize' ? 'expand_content' : action === 'restore' ? 'collapse_content' : 'fullscreen';
39-
40- // return tile.renderRoot.querySelector<HTMLElement>(`name="${btnName}"`);
31+ function getActionButtons ( tile : IgcTileComponent ) {
32+ const header = tile . querySelector ( IgcTileHeaderComponent . tagName ) ;
33+ return (
34+ header ?. shadowRoot ?. querySelectorAll ( IgcIconButtonComponent . tagName ) || [ ]
35+ ) ;
36+ }
4137
42- // }
4338 // function getTileBaseWrapper(element: IgcTileComponent) {
4439 // return element.renderRoot.querySelector<HTMLDivElement>('[part~="base"]')!;
4540 // }
@@ -305,7 +300,7 @@ describe('Tile Manager component', () => {
305300 } ) ;
306301 } ) ;
307302
308- xdescribe ( 'Tile state change behavior' , ( ) => {
303+ describe ( 'Tile state change behavior' , ( ) => {
309304 let tile : any ;
310305
311306 beforeEach ( async ( ) => {
@@ -343,7 +338,7 @@ describe('Tile Manager component', () => {
343338 restore ( ) ;
344339 } ) ;
345340
346- xit ( 'should correctly change fullscreen state on double click' , async ( ) => {
341+ it ( 'should correctly change fullscreen state on double click' , async ( ) => {
347342 simulateDoubleClick ( tile ) ;
348343 await elementUpdated ( tileManager ) ;
349344
@@ -358,12 +353,10 @@ describe('Tile Manager component', () => {
358353 expect ( tile . fullscreen ) . to . be . false ;
359354 } ) ;
360355
361- xit ( 'should correctly fire `igcTileFullscreen` event' , async ( ) => {
356+ it ( 'should correctly fire `igcTileFullscreen` event' , async ( ) => {
362357 const tile = first ( tileManager . tiles ) ;
363- const tileHeader = tile . querySelector ( 'igc-tile-header' ) ;
364- const fullscreenButton =
365- tileHeader ?. renderRoot . querySelectorAll ( 'igc-icon-button' ) [ 1 ] ;
366358 const eventSpy = spy ( tile , 'emitEvent' ) ;
359+ const fullscreenButton = getActionButtons ( tile ) [ 1 ] ;
367360
368361 simulateClick ( fullscreenButton ! ) ;
369362 await elementUpdated ( tileManager ) ;
@@ -372,7 +365,7 @@ describe('Tile Manager component', () => {
372365 detail : { tile : tile , state : true } ,
373366 cancelable : true ,
374367 } ) ;
375- expect ( tile . fullscreen ) . to . be . false ;
368+ expect ( tile . fullscreen ) . to . be . true ;
376369
377370 simulateClick ( fullscreenButton ! ) ;
378371 await elementUpdated ( tileManager ) ;
@@ -384,7 +377,7 @@ describe('Tile Manager component', () => {
384377 expect ( tile . fullscreen ) . to . be . false ;
385378 } ) ;
386379
387- xit ( 'can cancel `igcTileFullscreen` event' , async ( ) => {
380+ it ( 'can cancel `igcTileFullscreen` event' , async ( ) => {
388381 const eventSpy = spy ( tile , 'emitEvent' ) ;
389382
390383 tile . addEventListener ( 'igcTileFullscreen' , ( ev : CustomEvent ) => {
@@ -405,7 +398,7 @@ describe('Tile Manager component', () => {
405398 expect ( tile . requestFullscreen ) . not . to . have . been . called ;
406399 } ) ;
407400
408- xit ( 'should update fullscreen property on fullscreenchange (e.g. Esc key is pressed)' , async ( ) => {
401+ it ( 'should update fullscreen property on fullscreenchange (e.g. Esc key is pressed)' , async ( ) => {
409402 tile . fullscreen = true ;
410403
411404 // Mock the browser removing fullscreen element and firing a fullscreenchange event
@@ -419,52 +412,91 @@ describe('Tile Manager component', () => {
419412 expect ( tile . fullscreen ) . to . be . false ;
420413 } ) ;
421414
422- //TODO Fix test by selecting header icon and simulate click on it
423- it ( 'should correctly fire `igcTileMaximize` event' , async ( ) => {
415+ it ( 'should properly switch the icons on fullscreen state change.' , async ( ) => {
424416 const tile = first ( tileManager . tiles ) ;
425- const eventSpy = spy ( tile , 'emitEvent' ) ;
417+ const btnFullscreen = getActionButtons ( tile ) [ 1 ] ;
426418
427- // simulateClick(getTileActionButtons(tile)[0]);
428- //tile.toggleMaximize();
419+ expect ( btnFullscreen . name ) . equals ( 'fullscreen' ) ;
429420
421+ simulateClick ( btnFullscreen ) ;
430422 await elementUpdated ( tileManager ) ;
423+ expect ( btnFullscreen . name ) . equals ( 'fullscreen_exit' ) ;
431424
432- expect ( eventSpy ) . calledWith ( 'igcTileMaximize' , {
433- detail : { tile : tile , state : true } ,
434- cancelable : true ,
435- } ) ;
425+ simulateDoubleClick ( tile ) ;
426+ await elementUpdated ( tileManager ) ;
427+ expect ( btnFullscreen . name ) . equals ( 'fullscreen' ) ;
428+
429+ simulateDoubleClick ( tile ) ;
430+ await elementUpdated ( tileManager ) ;
431+ expect ( btnFullscreen . name ) . equals ( 'fullscreen_exit' ) ;
432+
433+ simulateClick ( btnFullscreen ) ;
434+ await elementUpdated ( tileManager ) ;
435+ expect ( btnFullscreen . name ) . equals ( 'fullscreen' ) ;
436+ } ) ;
437+
438+ it ( 'should correctly fire `igcTileMaximize` event on clicking Maximize button' , async ( ) => {
439+ const tile = first ( tileManager . tiles ) ;
440+ const eventSpy = spy ( tile , 'emitEvent' ) ;
441+ const btnMaximize = getActionButtons ( tile ) [ 0 ] ;
442+
443+ simulateClick ( btnMaximize ) ;
444+ await elementUpdated ( tile ) ;
445+ await elementUpdated ( tileManager ) ;
446+
447+ // expect(eventSpy).calledWith('igcTileMaximize');
448+ expect ( eventSpy ) . to . have . been . calledOnceWith (
449+ 'igcTileMaximize'
450+ // {
451+ // detail: { tile: tile, state: true },
452+ // cancelable: true,
453+ // }
454+ ) ;
436455
437456 expect ( tile . maximized ) . to . be . true ;
438457
439- //tile.toggleMaximize( );
458+ simulateClick ( btnMaximize ) ;
440459 await elementUpdated ( tileManager ) ;
441460
442- expect ( eventSpy ) . calledWith ( 'igcTileMaximize' , {
443- detail : { tile : tile , state : false } ,
444- cancelable : true ,
445- } ) ;
461+ expect ( eventSpy ) . to . have . been . calledWith ( 'igcTileMaximize' ) ;
462+ // expect(eventSpy).calledWith('igcTileMaximize', {
463+ // detail: { tile: tile, state: false },
464+ // cancelable: true,
465+ // });
446466
447467 expect ( tile . maximized ) . to . be . false ;
448468 } ) ;
449469
450- //TODO Fix test by selecting header icon and simulate click on it
451- xit ( 'can cancel `igcTileMaximize` event' , async ( ) => {
470+ it ( 'can cancel `igcTileMaximize` event' , async ( ) => {
452471 const tile = first ( tileManager . tiles ) ;
453472 const eventSpy = spy ( tile , 'emitEvent' ) ;
454473
455474 tile . addEventListener ( 'igcTileMaximize' , ( ev ) => {
456475 ev . preventDefault ( ) ;
457476 } ) ;
458477
459- // tile.maximized = !tile.maximized;
478+ const btnMaximize = getActionButtons ( tile ) [ 0 ] ;
479+ simulateClick ( btnMaximize ) ;
460480 await elementUpdated ( tileManager ) ;
461481
462- expect ( eventSpy ) . calledOnceWithExactly ( 'igcTileMaximize' , {
463- detail : { tile : tile , state : true } ,
464- cancelable : true ,
465- } ) ;
482+ expect ( eventSpy ) . calledOnceWith ( 'igcTileMaximize' ) ;
483+ // expect(eventSpy).calledOnceWithExactly('igcTileMaximize', {
484+ // detail: Sinon.match({ tile: tile, state: true }),
485+ // cancelable: true,
486+ // });
466487
467- expect ( tile . maximized ) . to . be . true ;
488+ expect ( tile . maximized ) . to . be . false ;
489+ } ) ;
490+
491+ it ( 'should properly switch the icons on maximized state change.' , async ( ) => {
492+ const tile = first ( tileManager . tiles ) ;
493+ const btnMaximize = getActionButtons ( tile ) [ 0 ] ;
494+
495+ expect ( btnMaximize . name ) . equals ( 'expand_content' ) ;
496+ simulateClick ( btnMaximize ) ;
497+ await elementUpdated ( tileManager ) ;
498+
499+ expect ( btnMaximize . name ) . equals ( 'collapse_content' ) ;
468500 } ) ;
469501 } ) ;
470502
0 commit comments