blob: 545181025f8feb9315674aee421430991e43c42e [file]
/*
******************************************************************************
* 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 { async, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing';
import { AbstractMockObservableService } from '../../../testing/abstract-mock-observable.service';
import { AbstractListComponent } from './abstract-list.component';
import { FormsModule } from '@angular/forms';
import { StringToDatePipe } from '../../../common-components/pipes/string-to-date.pipe';
import { FormattedDatePipe } from '../../../common-components/pipes/formatted-date.pipe';
import { FormattedTimestampPipe } from '../../../common-components/pipes/formatted-timestamp.pipe';
import { SessionContext } from '../../../common/session-context';
import { DaterangepickerConfig } from 'ng2-daterangepicker';
import { MockComponent } from '../../../testing/mock.component';
import { GridMeasureService } from '../../../services/grid-measure.service';
import { ReminderService } from '../../../services/reminder.service';
import { LockService } from '../../../services/lock.service';
import { Router } from '@angular/router';
import { UserSettingsService } from '../../../services/user-settings.service';
import { UserSettings } from '../../../model/user-settings';
import { USERS } from '../../../test-data/users';
import { RoleAccessHelperService } from '../../../services/jobs/role-access-helper.service';
import { ModeValidator } from '../../../custom_modules/helpers/mode-validator';
import { OnInit, Component } from '../../../../../node_modules/@angular/core';
import { Globals } from './../../../common/globals';
import { GridOptions } from 'ag-grid/dist/lib/entities/gridOptions';
import { ToasterMessageService } from '../../../services/toaster-message.service';
import { MessageService } from 'primeng/api';
import { MessageServiceCustom } from '../../../services/message.service';
export class AbstractListMocker {
public static getComponentMocks() {
return [
MockComponent({
selector: 'app-abstract-list',
inputs: ['withCheckboxes', 'withEditButtons', 'isCollapsible', 'stayCollapsedGridMeasures', 'gridId', 'enforceShowReadOnly']
})
];
}
}
class MockUserSettingService extends AbstractMockObservableService {
savedUserSettings: UserSettings;
getUserSettings(gridId: string) {
return this;
}
setUserSettings(userSettings: UserSettings) {
this.savedUserSettings = userSettings;
return this;
}
}
@Component({
selector: 'app-abstract-list',
templateUrl: './abstract-list.component.html',
styleUrls: ['./abstract-list.component.css']
})
class MockConcreteListComponent extends AbstractListComponent implements OnInit {
Globals = Globals;
listItems: any;
currentDate = new Date();
initAgGrid() {
const localGridOptions = <GridOptions>{
columnDefs: [
{
headerName: 'Test1',
field: 'test1',
colId: 'test1',
width: 58
},
{
headerName: 'Test2',
field: 'test1',
colId: 'test1',
width: 58
}]
};
this.gridOptions = Object.assign(this.globalGridOptions, localGridOptions);
}
retrieveData() { }
changeAllSelection() { }
}
describe('AbstractListComponent', () => {
let component: MockConcreteListComponent;
let fixture: ComponentFixture<MockConcreteListComponent>;
class MockService extends AbstractMockObservableService {
getGridMeasures() {
return this;
}
}
class MockReminderService extends AbstractMockObservableService {
getCurrentReminders() {
return this;
}
}
let sessionContext;
let mockService;
let mockReminderService;
let mockUserSettingService;
let roleAccessHelper: RoleAccessHelperService;
let toasterMessageService: ToasterMessageService;
let messageService: MessageService;
beforeEach(async(() => {
sessionContext = new SessionContext();
mockService = new MockService();
mockReminderService = new MockReminderService();
mockUserSettingService = new MockUserSettingService();
roleAccessHelper = new RoleAccessHelperService();
messageService = new MessageService;
toasterMessageService = new ToasterMessageService(sessionContext, messageService);
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [
// AbstractListComponent,
MockConcreteListComponent,
StringToDatePipe,
FormattedDatePipe,
FormattedTimestampPipe,
MockComponent({ selector: 'input', inputs: ['options', 'gridId'] })
],
providers: [
ModeValidator,
{ provide: UserSettingsService, userValue: mockService },
{ provide: GridMeasureService, useValue: mockService },
{ provide: ReminderService, useValue: mockReminderService },
{ provide: LockService, useValue: mockService },
{ provide: SessionContext, useClass: SessionContext },
{ provide: DaterangepickerConfig, useClass: DaterangepickerConfig },
{ provide: UserSettingsService, useValue: mockUserSettingService },
{ provide: Router },
{ provide: RoleAccessHelperService, useValue: roleAccessHelper },
{ provide: ToasterMessageService, useValue: toasterMessageService },
MessageServiceCustom
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MockConcreteListComponent);
component = fixture.componentInstance;
});
it('should return a new ListHelperTool', () => {
expect(component.getListHelperTool()).toBeTruthy();
});
it('should init correctly error in user settings service', () => {
spyOn(console, 'log').and.callThrough();
spyOn(component, 'retrieveData').and.callThrough();
mockUserSettingService.content = {};
mockUserSettingService.error = 'Error in UserSettingsService';
component.ngOnInit();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(console.log).toHaveBeenCalled();
expect(component.retrieveData).toHaveBeenCalled();
});
});
it('should init correctly with empty user settings', () => {
mockUserSettingService.content = {};
component.ngOnInit();
});
it('should init correctly with non empty user settings', async(() => {
mockUserSettingService.content = { userName: '', settingType: '', value: { sorting: 'abc', filter: 'xyz' } };
component.ngOnInit();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.userSettings.value.sorting).toBe('abc');
expect(component.userSettings.value.filter).toBe('xyz');
});
}));
it('should store new user settings correctly', fakeAsync(() => {
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();
tick();
expect(mockUserSettingService.savedUserSettings).toBeTruthy();
expect(mockUserSettingService.savedUserSettings.username).toBe(USERS[1].username);
mockUserSettingService.savedUserSettings.username = 'Brodtkamp';
abstractComp.settingsIsDirty = true;
abstractComp.saveSettings();
tick();
fixture.detectChanges();
tick();
expect(mockUserSettingService.savedUserSettings.username).toBe('Brodtkamp');
}));
it('should store new user settings correctly', async(() => {
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.whenStable().then(() => {
expect(mockUserSettingService.savedUserSettings).toBeTruthy();
expect(mockUserSettingService.savedUserSettings.username).toBe(USERS[1].username);
mockUserSettingService.savedUserSettings.username = 'Brodtkamp';
abstractComp.settingsIsDirty = true;
abstractComp.saveSettings();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(mockUserSettingService.savedUserSettings.username).toBe('Brodtkamp');
});
});
}));
xit('should work with onGridReadyCorrectly -> empty', () => {
const abstractComp: any = component; // used to access privates
const param = {
api: {},
columnApi: {
getAllColumns: () => [],
autoSizeColumns: (allColIds) => { }
}
};
const mockState = new ParamsMockState();
abstractComp.onGridReady(getParamsMock(mockState));
expect(mockState.setColumnStateCalled).toBeFalsy();
expect(mockState.setFilterCalled).toBeFalsy();
expect(mockState.onFilterChangedCalled).toBeFalsy();
expect(mockState.setSortModelCalled).toBeFalsy();
expect(mockState.getAllColumnsCalled).toBeTruthy();
expect(mockState.autoSizeColumnsCalled).toBeTruthy();
});
xit('should work with onGridReadyCorrectly -> complete', () => {
const abstractComp: any = component; // used to access privates
abstractComp.columnState = {};
abstractComp.filteringSearchText = 'holla';
abstractComp.sortingState = {};
const mockState = new ParamsMockState();
abstractComp.onGridReady(getParamsMock(mockState));
expect(mockState.setColumnStateCalled).toBeTruthy();
expect(mockState.setFilterCalled).toBeTruthy();
expect(mockState.onFilterChangedCalled).toBeTruthy();
expect(mockState.setSortModelCalled).toBeTruthy();
expect(mockState.getAllColumnsCalled).toBeTruthy();
expect(mockState.autoSizeColumnsCalled).toBeTruthy();
});
class ParamsMockState {
setFilterCalled = false;
onFilterChangedCalled = false;
setSortModelCalled = false;
setColumnStateCalled = false;
getAllColumnsCalled = false;
autoSizeColumnsCalled = false;
}
function getParamsMock(mockState: ParamsMockState) {
const param = {
api: {
setFilterModel: (filertext) => { mockState.setFilterCalled = true; },
onFilterChanged: () => { mockState.onFilterChangedCalled = true; },
setSortModel: () => { mockState.setSortModelCalled = true; }
},
columnApi: {
setColumnState: (state) => { mockState.setColumnStateCalled = true; },
getAllColumns: () => { mockState.getAllColumnsCalled = true; return []; },
autoSizeColumns: (allColIds) => { mockState.autoSizeColumnsCalled = true; },
}
};
return param;
}
});