mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACA-3808] - fix e2e actionMenu (#1580)
* fix e2e actionMenu * PR changes * wait for context menu to close * wait for menu to close after escape key Co-authored-by: Silviu Popa <p3701014@L3700101120.ness.com>
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { BrowsingPage, Viewer, Utils } from '@alfresco/aca-testing-shared';
|
import { BrowsingPage, Viewer, Utils, Menu } from '@alfresco/aca-testing-shared';
|
||||||
import { BrowserActions } from '@alfresco/adf-testing';
|
import { BrowserActions } from '@alfresco/adf-testing';
|
||||||
|
|
||||||
const page = new BrowsingPage();
|
const page = new BrowsingPage();
|
||||||
@@ -31,6 +31,7 @@ const { dataTable, toolbar } = page;
|
|||||||
const contextMenu = dataTable.menu;
|
const contextMenu = dataTable.menu;
|
||||||
const viewer = new Viewer();
|
const viewer = new Viewer();
|
||||||
const viewerToolbar = viewer.toolbar;
|
const viewerToolbar = viewer.toolbar;
|
||||||
|
const menu = new Menu();
|
||||||
|
|
||||||
export async function checkContextMenu(item: string, expectedContextMenu: string[]): Promise<void> {
|
export async function checkContextMenu(item: string, expectedContextMenu: string[]): Promise<void> {
|
||||||
await dataTable.rightClickOnItem(item);
|
await dataTable.rightClickOnItem(item);
|
||||||
@@ -39,6 +40,7 @@ export async function checkContextMenu(item: string, expectedContextMenu: string
|
|||||||
expect(actualActions).toEqual(expectedContextMenu);
|
expect(actualActions).toEqual(expectedContextMenu);
|
||||||
|
|
||||||
await Utils.pressEscape();
|
await Utils.pressEscape();
|
||||||
|
await menu.waitForMenuToClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkToolbarPrimary(item: string, expectedToolbarPrimary: string[]): Promise<void> {
|
export async function checkToolbarPrimary(item: string, expectedToolbarPrimary: string[]): Promise<void> {
|
||||||
@@ -80,6 +82,7 @@ export async function checkMultipleSelContextMenu(items: string[], expectedConte
|
|||||||
expect(actualActions).toEqual(expectedContextMenu);
|
expect(actualActions).toEqual(expectedContextMenu);
|
||||||
|
|
||||||
await Utils.pressEscape();
|
await Utils.pressEscape();
|
||||||
|
await menu.waitForMenuToClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkMultipleSelToolbarPrimary(items: string[], expectedToolbarPrimary: string[]): Promise<void> {
|
export async function checkMultipleSelToolbarPrimary(items: string[], expectedToolbarPrimary: string[]): Promise<void> {
|
||||||
@@ -122,6 +125,7 @@ export async function checkViewerActions(item: string, expectedToolbarPrimary: s
|
|||||||
expect(actualMoreActions).toEqual(expectedToolbarMore);
|
expect(actualMoreActions).toEqual(expectedToolbarMore);
|
||||||
|
|
||||||
await Utils.pressEscape();
|
await Utils.pressEscape();
|
||||||
|
await menu.waitForMenuToClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
const toRemove = ['Close', 'Previous File', 'Next File', 'View details'];
|
const toRemove = ['Close', 'Previous File', 'Next File', 'View details'];
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
[attr.aria-label]="actionRef.description || actionRef.title | translate"
|
[attr.aria-label]="actionRef.description || actionRef.title | translate"
|
||||||
[attr.title]="actionRef.description || actionRef.title | translate"
|
[attr.title]="actionRef.description || actionRef.title | translate"
|
||||||
[matMenuTriggerFor]="menu"
|
[matMenuTriggerFor]="menu"
|
||||||
|
#matTrigger="matMenuTrigger"
|
||||||
>
|
>
|
||||||
<adf-icon [value]="actionRef.icon"></adf-icon>
|
<adf-icon [value]="actionRef.icon"></adf-icon>
|
||||||
</button>
|
</button>
|
||||||
@@ -13,10 +14,7 @@
|
|||||||
<ng-container *ngFor="let child of actionRef.children; trackBy: trackById">
|
<ng-container *ngFor="let child of actionRef.children; trackBy: trackById">
|
||||||
<ng-container [ngSwitch]="child.type">
|
<ng-container [ngSwitch]="child.type">
|
||||||
<ng-container *ngSwitchCase="'custom'">
|
<ng-container *ngSwitchCase="'custom'">
|
||||||
<adf-dynamic-component
|
<adf-dynamic-component [id]="child.component" [data]="child.data"></adf-dynamic-component>
|
||||||
[id]="child.component"
|
|
||||||
[data]="child.data"
|
|
||||||
></adf-dynamic-component>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngSwitchDefault>
|
<ng-container *ngSwitchDefault>
|
||||||
<app-toolbar-menu-item [actionRef]="child"></app-toolbar-menu-item>
|
<app-toolbar-menu-item [actionRef]="child"></app-toolbar-menu-item>
|
||||||
|
@@ -24,9 +24,39 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { ToolbarMenuComponent } from './toolbar-menu.component';
|
import { ToolbarMenuComponent } from './toolbar-menu.component';
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { MaterialModule } from '@alfresco/adf-core';
|
||||||
|
import { OverlayModule } from '@angular/cdk/overlay';
|
||||||
|
import { TranslateModule, TranslateLoader, TranslateFakeLoader } from '@ngx-translate/core';
|
||||||
|
import { ContentActionRef } from '@alfresco/adf-extensions';
|
||||||
|
|
||||||
describe('ToolbarMenuComponent', () => {
|
describe('ToolbarMenuComponent', () => {
|
||||||
it('should be defined', () => {
|
let fixture: ComponentFixture<ToolbarMenuComponent>;
|
||||||
expect(ToolbarMenuComponent).toBeDefined();
|
let component: ToolbarMenuComponent;
|
||||||
|
|
||||||
|
const actions = { id: 'action-1', type: 'button' } as ContentActionRef;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [
|
||||||
|
MaterialModule,
|
||||||
|
OverlayModule,
|
||||||
|
TranslateModule.forRoot({
|
||||||
|
loader: { provide: TranslateLoader, useClass: TranslateFakeLoader }
|
||||||
|
})
|
||||||
|
]
|
||||||
|
});
|
||||||
|
fixture = TestBed.createComponent(ToolbarMenuComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
component.matTrigger = jasmine.createSpyObj('MatMenuTrigger', ['closeMenu']);
|
||||||
|
component.actionRef = actions;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should close toolbar context menu', () => {
|
||||||
|
spyOn(component.matTrigger, 'closeMenu');
|
||||||
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }));
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(component.matTrigger.closeMenu).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,8 +23,9 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
import { Component, Input, ViewEncapsulation, HostListener, ViewChild } from '@angular/core';
|
||||||
import { ContentActionRef } from '@alfresco/adf-extensions';
|
import { ContentActionRef } from '@alfresco/adf-extensions';
|
||||||
|
import { MatMenuTrigger } from '@angular/material/menu';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-toolbar-menu',
|
selector: 'app-toolbar-menu',
|
||||||
@@ -39,6 +40,13 @@ export class ToolbarMenuComponent {
|
|||||||
@Input()
|
@Input()
|
||||||
color = '';
|
color = '';
|
||||||
|
|
||||||
|
@ViewChild('matTrigger') matTrigger: MatMenuTrigger;
|
||||||
|
|
||||||
|
@HostListener('document:keydown.Escape')
|
||||||
|
handleKeydownEscape() {
|
||||||
|
this.matTrigger.closeMenu();
|
||||||
|
}
|
||||||
|
|
||||||
get hasChildren(): boolean {
|
get hasChildren(): boolean {
|
||||||
return this.actionRef && this.actionRef.children && this.actionRef.children.length > 0;
|
return this.actionRef && this.actionRef.children && this.actionRef.children.length > 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user