import { TestBed , ComponentFixture } from '@angular/core/testing' ; import { AppTestingModule } from '../../testing/app-testing.module' ; import { ContextMenuComponent } from './context-menu.component' ; import { ContextMenuModule } from './context-menu.module' ; import { ContextMenuOverlayRef } from './context-menu-overlay' ; import { ContentActionType } from '@alfresco/adf-extensions' ; import { of } from 'rxjs' ; import { Store } from '@ngrx/store' ; import { AppExtensionService } from '@alfresco/aca-shared' ; describe ( 'ContextMenuComponent' , ( ) => { let fixture ; let component ; let contextMenuOverlayRef ; let extensionsService ; const contextItem = { type : ContentActionType . button , id : 'action-button' , title : 'Test Button' , actions : { click : 'TEST_EVENT' } } ; beforeEach ( ( ) => { TestBed . configureTestingModule ( { imports : [ ContextMenuModule , AppTestingModule ] , providers : [ { provide : ContextMenuOverlayRef , useValue : { close : jasmine . createSpy ( 'close' ) } } , { provide : Store , useValue : { dispatch : ( ) => { } , select : ( ) => of ( { count : 1 } ) } } ] } ) ; fixture = TestBed . createComponent ( ContextMenuComponent ) ; component = fixture . componentInstance ; contextMenuOverlayRef = TestBed . inject ( ContextMenuOverlayRef ) ; extensionsService = TestBed . inject ( AppExtensionService ) ; spyOn ( extensionsService , 'getAllowedContextMenuActions' ) . and . returnValue ( of ( [ contextItem ] ) ) ; fixture . detectChanges ( ) ; } ) ; it ( 'should close context menu on Escape event' , ( ) => { document . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Escape' } ) ) ; expect ( contextMenuOverlayRef . close ) . toHaveBeenCalled ( ) ; } ) ; it ( 'should render defined context menu actions items' , async ( ) => { component . ngAfterViewInit ( ) ; fixture . detectChanges ( ) ; await fixture . whenStable ( ) ; const contextMenuElements = document . body . querySelector ( '.aca-context-menu' ) . querySelectorAll ( 'button' ) ; expect ( contextMenuElements . length ) . toBe ( 1 ) ; expect ( contextMenuElements [ 0 ] . querySelector ( 'span' ) . innerText ) . toBe ( contextItem . title ) ; } ) ; it ( 'should run action with provided action id' , ( ) => { spyOn ( extensionsService , 'runActionById' ) ; component . runAction ( contextItem . actions . click ) ; expect ( extensionsService . runActionById ) . toHaveBeenCalledWith ( contextItem . actions . click ) ; } ) ; } ) ;