blob: 1690559f094d9e63cfd3d8a4d02e875589f43abe [file] [log] [blame]
/*
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/
import { ComponentFixture, TestBed, async, fakeAsync, tick } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { Router } from '@angular/router';
import { DaterangepickerConfig } from 'ng2-daterangepicker';
import { FormattedDatePipe } from '../../common-components/pipes/formatted-date.pipe';
import { FormattedTimestampPipe } from '../../common-components/pipes/formatted-timestamp.pipe';
import { StringToDatePipe } from '../../common-components/pipes/string-to-date.pipe';
import { BannerMessage } from '../../common/banner-message';
import { BannerMessageStatusEn } from '../../common/enums';
import { Lock } from '../../model/lock';
import { GridMeasureService } from '../../services/grid-measure.service';
import { ReminderService } from '../../services/reminder.service';
import { LockService } from '../../services/lock.service';
import { MessageServiceCustom } from '../../services/message.service';
import { UserSettingsService } from '../../services/user-settings.service';
import { GRIDMEASURE } from '../../test-data/grid-measures';
import { AbstractMockObservableService } from '../../testing/abstract-mock-observable.service';
import { MockComponent } from '../../testing/mock.component';
import { UniquePipe } from './../../common-components/pipes/unique.pipe';
import { SessionContext } from './../../common/session-context';
import { UserSettings } from './../../model/user-settings';
import { USERS } from './../../test-data/users';
import { GridMeasuresComponent } from './grid-measures.component';
import { RoleAccessHelperService } from '../../services/jobs/role-access-helper.service';
import { ModeValidator } from '../../custom_modules/helpers/mode-validator';
import { StatusMainFilter } from '../../model/status-main-filter';
import { ToasterMessageService } from '../../services/toaster-message.service';
import { MessageService } from 'primeng/api';
class FakeRouter {
navigate(commands: any[]) {
return commands[0];
}
}
describe('GridMeasuresComponent', () => {
let component: GridMeasuresComponent;
let fixture: ComponentFixture<GridMeasuresComponent>;
let routerStub: FakeRouter;
let router: Router;
let sessionContext: SessionContext;
routerStub = {
navigate: jasmine.createSpy('navigate').and.callThrough()
};
class MockService extends AbstractMockObservableService {
getGridMeasures() {
return this;
}
}
class MockReminderService extends AbstractMockObservableService {
getCurrentReminders() {
return this;
}
getExpiredReminders() {
return this;
}
}
class MockUserSettingService extends AbstractMockObservableService {
savedUserSettings: UserSettings;
getUserSettings(gridId: string) {
return this;
}
setUserSettings(userSettings: UserSettings) {
this.savedUserSettings = userSettings;
return this;
}
}
class MockLockService extends AbstractMockObservableService {
checkLock(key: number, info: string) {
const lock = new Lock();
lock.key = key;
lock.username = 'otto';
lock.info = info;
return lock;
}
storeLock(lock: Lock) {
return lock;
}
deleteLock(key: number, info: string) {
return key;
}
}
let mockGridMeasureService;
let mockReminderService;
let mockUserSettingService;
let mockLockService: MockLockService;
let roleAccessHelper: RoleAccessHelperService;
let toasterMessageService: ToasterMessageService;
let messageService: MessageService;
beforeEach(async(() => {
router = new FakeRouter() as any as Router;
sessionContext = new SessionContext();
messageService = new MessageService;
mockGridMeasureService = new MockService();
mockReminderService = new MockReminderService();
mockUserSettingService = new MockUserSettingService();
mockLockService = new MockLockService();
roleAccessHelper = new RoleAccessHelperService();
toasterMessageService = new ToasterMessageService(sessionContext, messageService);
TestBed.configureTestingModule({
imports: [
FormsModule
],
declarations: [
GridMeasuresComponent,
StringToDatePipe,
FormattedDatePipe,
FormattedTimestampPipe,
UniquePipe,
MockComponent({ selector: 'input', inputs: ['options'] }),
MockComponent({ selector: 'app-loading-spinner' }),
MockComponent({ selector: 'ag-grid-angular ', inputs: ['gridOptions', 'rowData'] })
],
providers: [
ModeValidator,
{ provide: SessionContext, useValue: sessionContext },
MessageServiceCustom,
{ provide: UserSettingsService, useValue: mockUserSettingService },
{ provide: Router, useValue: routerStub },
{ provide: GridMeasureService, useValue: mockGridMeasureService },
{ provide: ReminderService, useValue: mockReminderService },
{ provide: LockService, useValue: mockLockService },
{ provide: DaterangepickerConfig, useClass: DaterangepickerConfig },
{ provide: RoleAccessHelperService, useValue: roleAccessHelper },
{ provide: ToasterMessageService, useValue: toasterMessageService }
]
}).compileComponents();
}));
beforeEach(() => {
// sessionContext.setTabFilteringState(FILTERINGSEARCHTEXT);
const filter = new StatusMainFilter();
filter.item.isClosedStatusActive = false;
filter.item.isCanceledStatusActive = false;
filter.item.onlyUsersGMsDesired = false;
sessionContext.setStatusMainFilter(filter);
fixture = TestBed.createComponent(GridMeasuresComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should call init', async(() => {
spyOn((component as any), 'init').and.callThrough();
spyOn(component, 'initAgGrid').and.callThrough();
spyOn(component, 'retrieveData').and.callThrough();
sessionContext.setCurrUser(USERS[1]);
sessionContext.setUserAuthenticated(true);
mockGridMeasureService.content = JSON.parse(JSON.stringify(GRIDMEASURE));
mockReminderService.content = [];
mockUserSettingService.content = {};
const abstractComp: any = component; // used to access privates
component.user = USERS[1];
component.gridId = 'Gridd';
component.sortingState = {
column: 'shorty',
counter: 1,
defaultState: true,
isDesc: true
};
component.filteringSearchText = {
branchId: 'filty',
title: 'fix',
statusId: 'foxy'
};
mockUserSettingService.savedUserSettings = {};
abstractComp.saveSettings();
fixture.detectChanges();
component.ngOnInit();
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect((component as any).init).toHaveBeenCalled();
expect(component.initAgGrid).toHaveBeenCalled();
expect(component.retrieveData).toHaveBeenCalled();
});
}));
xit('should retrieveData (gridmeasures) on init', async(() => {
mockGridMeasureService.content = JSON.parse(JSON.stringify(GRIDMEASURE));
mockReminderService.content = [];
const abstractComp: any = component; // used to access privates
component.user = USERS[1];
component.gridId = 'Gridd';
component.sortingState = {
column: 'shorty',
counter: 1,
defaultState: true,
isDesc: true
};
component.filteringSearchText = {
branchId: 'filty',
title: 'fix',
statusId: 'foxy'
};
mockUserSettingService.savedUserSettings = {};
abstractComp.saveSettings();
component.retrieveData();
fixture.detectChanges();
fixture.whenRenderingDone().then(() => {
fixture.detectChanges();
expect(component.gridmeasures.length).toBe(4);
});
}));
xit('should retrieveData (gridmeasures) on init by user', async(() => {
mockGridMeasureService.content = JSON.parse(JSON.stringify(GRIDMEASURE));
mockReminderService.content = [];
const abstractComp: any = component; // used to access privates
component.user = USERS[1];
component.gridId = 'Gridd';
component.sortingState = {
column: 'shorty',
counter: 1,
defaultState: true,
isDesc: true
};
component.filteringSearchText = {
branchId: 'filty',
title: 'fix',
statusId: 'foxy'
};
component.statusMainFilter.item.onlyUsersGMsDesired = true;
mockUserSettingService.savedUserSettings = {};
abstractComp.saveSettings();
component.retrieveData();
fixture.detectChanges();
fixture.whenRenderingDone().then(() => {
fixture.detectChanges();
expect(component.gridmeasures.length).toBe(4);
expect(component.statusMainFilter.item.isCanceledStatusActive).toBeFalsy();
expect(component.statusMainFilter.item.isClosedStatusActive).toBeFalsy();
});
}));
it('should raise an message on error in retrieveData (gridmeasures)', fakeAsync(() => {
spyOn((component as any).toasterMessageService, 'showError');
sessionContext.setUserAuthenticated(true);
mockGridMeasureService.error = 'Error in GridmeasureService';
const abstractComp: any = component; // used to access privates
component.user = USERS[1];
component.gridId = 'Gridd';
component.sortingState = {
column: 'shorty',
counter: 1,
defaultState: true,
isDesc: true
};
component.filteringSearchText = {
branchId: 'filty',
title: 'fix',
statusId: 'foxy'
};
mockUserSettingService.savedUserSettings = {};
abstractComp.saveSettings();
component.retrieveData();
fixture.detectChanges();
tick();
expect((component as any).toasterMessageService.showError).toHaveBeenCalled();
}));
it('should raise an message on error in retrieveData (reminders)', fakeAsync(() => {
spyOn((component as any).toasterMessageService, 'showError');
sessionContext.setUserAuthenticated(true);
mockGridMeasureService.content = JSON.parse(JSON.stringify(GRIDMEASURE));
mockReminderService.error = 'Error in ReminderService';
const abstractComp: any = component; // used to access privates
component.user = USERS[1];
component.gridId = 'Gridd';
component.sortingState = {
column: 'shorty',
counter: 1,
defaultState: true,
isDesc: true
};
component.filteringSearchText = {
branchId: 'filty',
title: 'fix',
statusId: 'foxy'
};
mockUserSettingService.savedUserSettings = {};
abstractComp.saveSettings();
component.retrieveData();
fixture.detectChanges();
tick();
expect((component as any).toasterMessageService.showError).toHaveBeenCalled();
}));
it('should call changeAllSelection and set selected false', async(() => {
component.selectAll = false;
component.gridmeasures = JSON.parse(JSON.stringify(GRIDMEASURE));
fixture.detectChanges();
spyOn(component, 'changeAllSelection').and.callThrough();
fixture.detectChanges();
component.changeAllSelection();
expect(component.changeAllSelection).toHaveBeenCalled();
expect(component.gridmeasures[0].selected).toBeFalsy();
}));
it('should call changeAllSelection and set selected true', async(() => {
component.selectAll = true;
component.gridmeasures = JSON.parse(JSON.stringify(GRIDMEASURE));
fixture.detectChanges();
spyOn(component, 'changeAllSelection').and.callThrough();
fixture.detectChanges();
component.changeAllSelection();
expect(component.changeAllSelection).toHaveBeenCalled();
expect(component.gridmeasures[0].selected).toBeTruthy();
}));
it('should react on filter click and set filter save to dirty', async(() => {
spyOn(component, 'setDirty').and.callThrough();
component.setDirty();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.setDirty).toHaveBeenCalledWith();
expect(component.settingsIsDirty).toBeTruthy();
});
}));
});