blob: a1770036c3fdb470822543f471bc8e07c9b38e4a [file] [log] [blame]
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialogModule } from '@angular/material/dialog';
import { MatMenuModule } from '@angular/material/menu';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Router } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { NgxGraphModule } from '@swimlane/ngx-graph';
import { graphServiceMock } from '../../../mocks/CurrentGraphService.mock';
import { ConnectionViewRouterService } from '../../../services/connection-view-router.service';
import { CurrentGraphService } from '../../../services/current-graph.service';
import { HarnessLoader } from '@angular/cdk/testing';
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { GraphComponent } from './graph.component';
import { MatButtonHarness } from '@angular/material/button/testing';
import { MatMenuHarness, MatMenuItemHarness } from '@angular/material/menu/testing';
import { MatFormFieldModule } from '@angular/material/form-field';
import { FormsModule } from '@angular/forms';
import { MatSelectModule } from '@angular/material/select';
import { MatInputModule } from '@angular/material/input';
import { CommonModule } from '@angular/common';
import { ConfirmRemovalDialogComponent } from '../../dialogs/confirm-removal-dialog/confirm-removal-dialog.component';
import { CreateConnectionDialogComponent } from '../../dialogs/create-connection-dialog/create-connection-dialog.component';
import { CreateNewNodeDialogComponent } from '../../dialogs/create-new-node-dialog/create-new-node-dialog.component';
import { EditConnectionDialogComponent } from '../../dialogs/edit-connection-dialog/edit-connection-dialog.component';
import { EditNodeDialogComponent } from '../../dialogs/edit-node-dialog/edit-node-dialog.component';
describe('GraphComponent', () => {
let component: GraphComponent;
let fixture: ComponentFixture<GraphComponent>;
let loader: HarnessLoader;
let router: any;
let routerService: ConnectionViewRouterService;
beforeEach(async () => {
router = jasmine.createSpyObj('Router', ['navigate', 'createUrlTree', 'serializeUrl'],{'url':new String()});
await TestBed.configureTestingModule({
imports:[MatDialogModule,NgxGraphModule,NoopAnimationsModule,RouterTestingModule,MatMenuModule,MatFormFieldModule,FormsModule,MatSelectModule,MatInputModule,CommonModule],
providers:
[
{ provide: Router, useValue: router },
{ provide: CurrentGraphService, useValue: graphServiceMock },
],
declarations: [ GraphComponent,ConfirmRemovalDialogComponent,CreateConnectionDialogComponent,CreateNewNodeDialogComponent,EditConnectionDialogComponent,EditNodeDialogComponent ]
})
.compileComponents();
routerService=TestBed.inject(ConnectionViewRouterService)
});
beforeEach(() => {
fixture = TestBed.createComponent(GraphComponent);
component = fixture.componentInstance;
fixture.detectChanges();
loader = TestbedHarnessEnvironment.loader(fixture);
});
beforeEach(function () {
let window1 = spyOn(window, 'open').and.callFake((url,target,replace) => {
return null;
})
});
beforeEach(() => {
component.linkMenuTrigger.closeMenu();
component.nodeMenuTrigger.closeMenu();
})
it('should create', () => {
expect(component).toBeTruthy();
});
describe('Core Functionality', () => {
describe('View Functionality', () => {
it('should navigate to messages page', () => {
routerService.branchType = 'product line';
routerService.branchId = '8';
component.navigateToMessages("hello");
expect(router.navigate).toHaveBeenCalledWith(['', 'product line', '8', 'hello', 'messages'])
});
})
describe('Editing Menus', () => {
beforeEach(() => {
component.editMode = true;
})
describe('Link Menu', () => {
let menu: MatMenuHarness;
let items: MatMenuItemHarness[];
beforeEach(() => {
component.linkMenuTrigger.closeMenu();
component.openLinkDialog(new MouseEvent("contextmenu", { clientX: 100, clientY: 100 }), { id: '1', source: '10', target: '15', data: { name: '1' } }, [{ id: '10', label: '10' }, { id: '15', label: '15' }]);
expect(component.linkMenuTrigger.menuOpen).toBeTruthy();
})
describe('Editing Link Menu', () => {
beforeEach(async () => {
menu = await loader.getHarness(MatMenuHarness);
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(4);
})
describe('Editing Functionality', () => {
it('should open edit connection dialog', async () => {
let spy = spyOn(component, 'openConnectionEditDialog').and.callThrough();
let item = (await menu?.getItems())[2] || items[2];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Edit 1');
await item.click();
expect(spy).toHaveBeenCalled();
})
it('should open remove connection dialog', async () => {
let spy = spyOn(component, 'openRemoveConnectionDialog').and.callThrough();
let item = (await menu?.getItems())[3] || items[3];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Remove connection 1');
await item.click();
expect(spy).toHaveBeenCalled();
})
})
describe('Navigation', () => {
it('should navigate to messages page', async () => {
let spy = spyOn(component, 'navigateToMessages').and.callThrough();
let item = (await menu?.getItems())[0] || items[0];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Go to 1');
await item.click();
expect(spy).toHaveBeenCalled();
})
it('should navigate to messages page in new tab', async () => {
let spy = spyOn(component, 'navigateToMessagesInNewTab').and.callThrough();
let item = (await menu?.getItems())[1] || items[1];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Go to 1 in new tab');
await item.click();
expect(spy).toHaveBeenCalled();
})
})
})
});
describe('Node Menu', () => {
let menu: MatMenuHarness;
let items: MatMenuItemHarness[];
beforeEach(() => {
component.nodeMenuTrigger.closeMenu();
component.linkMenuTrigger.closeMenu();
component.openNodeDialog(new MouseEvent("contextmenu", { clientX: 200, clientY: 200 }), {id:'1',data:{name:'first'}},[{id:'a3',source:'1',target:'2',data:{name:'a'}},{id:'a4',source:'2',target:'1',data:{name:'b'}}]);
expect(component.nodeMenuTrigger.menuOpen).toBeTruthy();
})
describe('Editing Node Menu', () => {
beforeEach(async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(3);
}
})
//menu = await loader.getHarness(MatMenuHarness);
})
describe('Editing Functionality', () => {
it('should open edit node dialog', async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(3);
let spy = spyOn(component, 'openEditNodeDialog').and.callThrough();
let item = (await menu?.getItems())[0] || items[0];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Edit first');
await item.click();
expect(spy).toHaveBeenCalled();
}
})
})
it('should open remove node dialog', async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(3);
let spy = spyOn(component, 'removeNodeAndConnection').and.callThrough();
let item = (await menu?.getItems())[1] || items[1];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Remove first & Connection');
await item.click();
expect(spy).toHaveBeenCalled();
}
})
})
it('should open create node dialog', async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(3);
let spy = spyOn(component, 'createConnectionToNode').and.callThrough();
let item = (await menu?.getItems())[2] || items[2];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Create Connection To first');
await item.click();
expect(spy).toHaveBeenCalled();
}
})
})
})
})
})
describe('Graph Menu', () => {
let menu: MatMenuHarness;
let items: MatMenuItemHarness[];
beforeEach(() => {
component.graphMenuTrigger.closeMenu();
let event = new MouseEvent("contextmenu", { clientX: 300, clientY: 300, },);
let el = document.createElement('button');
el.classList.add('panning-rect')
Object.defineProperty(event, 'target', {value: el, enumerable: true});
component.openGraphDialog(event);
expect(component.graphMenuTrigger.menuOpen).toBeTruthy();
})
describe('Editing Graph Menu', () => {
beforeEach(async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(1);
}
})
})
it('should open the create node dialog', async () => {
(await loader.getAllHarnesses(MatMenuHarness)).forEach(async(tempMenu) => {
if ((await tempMenu.getItems()).length > 0) {
menu = tempMenu;
expect(menu).toBeDefined();
items = (await menu.getItems());
expect(items).toBeDefined();
expect(items.length).toEqual(1);
let spy = spyOn(component, 'createNewNode').and.callThrough();
let item = (await menu?.getItems())[0] || items[0];
expect(item).toBeDefined();
expect(await item.getText()).toEqual('Create New Node');
await item.click();
expect(spy).toHaveBeenCalled();
}
})
})
})
})
})
})
});