unit test performance (#3194)

* DataTable (-4 sec)

* PaginationComponent (-1 sec)

* DocumentList

* custom testbed setup, test upgrades

* test fixes

* more test fixes

* remove fdescribe

* test fixes

* test fixes

* more test fixes

* test fixes

* upgrade tests

* update tests

* upgrade tests

* upgrade tests

* upgrade tests

* upgrade tests

* update tests

* translate loader fixes

* auth and cookie fixes

* upgrade tests

* upgrade tests

* test fixes

* almost there

* diable broken tests

* process tests (part 1)

* fix lint issues

* another test upgrade

* almost there

* cleanup

* insights testing upgrade

* improve tests

* tests cleanup

* tests cleanup

* cleanup tests

* test cleanup

* favorite nodes tests

* rebase fix syntax

* fix core test

* give up test focus

* flush tabs

* fix search test

* Update document-list.component.spec.ts

* fix document list lock

* increase tick time

* remove duplicate test
This commit is contained in:
Denys Vuika
2018-04-23 09:55:22 +01:00
committed by Eugenio Romano
parent 9fbfcfa96e
commit 382ea3c1b3
204 changed files with 3093 additions and 4389 deletions

View File

@@ -18,9 +18,9 @@
import { SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TaskDetailsModel } from '../models/task-details.model';
import { TaskListService } from '../services/tasklist.service';
import { ChecklistComponent } from './checklist.component';
import { TranslateModule } from '@ngx-translate/core';
import { setupTestBed } from '@alfresco/adf-core';
import { ProcessTestingModule } from '../../testing/process.testing.module';
declare let jasmine: any;
@@ -36,24 +36,16 @@ describe('ChecklistComponent', () => {
let element: HTMLElement;
let showChecklistDialog;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
TranslateModule
],
declarations: [
ChecklistComponent
],
providers: [
TaskListService
]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(ChecklistComponent);
checklistComponent = fixture.componentInstance;
element = fixture.nativeElement;
setupTestBed({
imports: [ProcessTestingModule]
});
fixture.detectChanges();
});
beforeEach(async(() => {
fixture = TestBed.createComponent(ChecklistComponent);
checklistComponent = fixture.componentInstance;
element = fixture.nativeElement;
fixture.detectChanges();
}));
it('should show checklist component title', () => {

View File

@@ -16,14 +16,14 @@
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslationService, TranslationMock } from '@alfresco/adf-core';
import { PeopleSelectorComponent, PeopleSearchFieldComponent, PeopleListComponent } from '../../people';
import { setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { startTaskMock } from '../../mock';
import { StartTaskModel } from '../models/start-task.model';
import { TaskListService } from '../services/tasklist.service';
import { } from './../assets/start-task.mock';
import { StartTaskComponent } from './start-task.component';
import { ProcessTestingModule } from '../../testing/process.testing.module';
describe('StartTaskComponent', () => {
@@ -44,29 +44,37 @@ describe('StartTaskComponent', () => {
}
];
let testUser = {id: 1001, firstName: 'fakeName', email: 'fake@app.activiti.com'};
setupTestBed({
imports: [ProcessTestingModule]
});
// beforeEach(async(() => {
// TestBed.configureTestingModule({
// declarations: [
// StartTaskComponent,
// PeopleSearchFieldComponent,
// PeopleListComponent,
// PeopleSelectorComponent
// ],
// providers: [
// TaskListService,
// { provide: TranslationService, useClass: TranslationMock }
// ]
// }).compileComponents().then(() => {
// });
// }));
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
StartTaskComponent,
PeopleSearchFieldComponent,
PeopleListComponent,
PeopleSelectorComponent
],
providers: [
TaskListService,
{ provide: TranslationService, useClass: TranslationMock }
]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(StartTaskComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
fixture = TestBed.createComponent(StartTaskComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
service = TestBed.get(TaskListService);
getFormlistSpy = spyOn(service, 'getFormList').and.returnValue(Observable.of(fakeForms));
service = fixture.debugElement.injector.get(TaskListService);
getFormlistSpy = spyOn(service, 'getFormList').and.returnValue(Observable.of(fakeForms));
fixture.detectChanges();
});
fixture.detectChanges();
}));
it('should create instance of StartTaskComponent', () => {

View File

@@ -24,12 +24,38 @@ import {
} from '@angular/core/testing';
import { Observable } from 'rxjs/Observable';
import { TaskListService } from './../services/tasklist.service';
import { setupTestBed, CoreModule } from '@alfresco/adf-core';
import { TaskAuditDirective } from './task-audit.directive';
declare let jasmine: any;
describe('TaskAuditDirective', () => {
@Component({
selector: 'adf-basic-button',
template: `
<button id="auditButton"
adf-task-audit
[task-id]="currentTaskId"
[download]="download"
[fileName]="fileName"
[format]="format"
(clicked)="onAuditClick($event)">My button
</button>`
})
class BasicButtonComponent {
download: boolean = false;
fileName: string;
format: string;
constructor() {
}
onAuditClick(event: any) {
}
}
let fixture: ComponentFixture<BasicButtonComponent>;
let component: BasicButtonComponent;
let service: TaskListService;
@@ -52,14 +78,13 @@ describe('TaskAuditDirective', () => {
return new Blob([pdfData], {type: 'application/pdf'});
}
setupTestBed({
imports: [CoreModule.forRoot()],
declarations: [BasicButtonComponent, TaskAuditDirective],
providers: [TaskListService]
});
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [BasicButtonComponent, TaskAuditDirective],
providers: [TaskListService]
});
TestBed.compileComponents();
fixture = TestBed.createComponent(BasicButtonComponent);
component = fixture.componentInstance;
service = TestBed.get(TaskListService);
@@ -133,28 +158,3 @@ describe('TaskAuditDirective', () => {
}));
});
@Component({
selector: 'adf-basic-button',
template: `
<button id="auditButton"
adf-task-audit
[task-id]="currentTaskId"
[download]="download"
[fileName]="fileName"
[format]="format"
(clicked)="onAuditClick($event)">My button
</button>`
})
class BasicButtonComponent {
download: boolean = false;
fileName: string;
format: string;
constructor() {
}
onAuditClick(event: any) {
}
}

View File

@@ -17,20 +17,18 @@
import { NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatButtonModule, MatInputModule } from '@angular/material';
import { By } from '@angular/platform-browser';
import { Observable } from 'rxjs/Observable';
import { FormModule, FormModel, FormOutcomeEvent, FormOutcomeModel, FormService } from '@alfresco/adf-core';
import { FormModel, FormOutcomeEvent, FormOutcomeModel, FormService, setupTestBed, BpmUserService } from '@alfresco/adf-core';
import { CommentProcessService, LogService } from '@alfresco/adf-core';
import { PeopleProcessService, UserProcessModel, AuthenticationService } from '@alfresco/adf-core';
import { UserProcessModel } from '@alfresco/adf-core';
import { TaskDetailsModel } from '../models/task-details.model';
import { noDataMock, taskDetailsMock, taskFormMock, tasksMock, taskDetailsWithOutAssigneeMock } from '../../mock';
import { TaskListService } from './../services/tasklist.service';
import { PeopleSearchComponent } from '../../people';
import { TaskDetailsComponent } from './task-details.component';
import { DatePipe } from '@angular/common';
import { ProcessTestingModule } from '../../testing/process.testing.module';
declare let jasmine: any;
@@ -54,37 +52,23 @@ describe('TaskDetailsComponent', () => {
let logService: LogService;
let commentProcessService: CommentProcessService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
FormModule,
MatButtonModule,
MatInputModule
],
declarations: [
TaskDetailsComponent,
PeopleSearchComponent
],
providers: [
TaskListService,
PeopleProcessService,
CommentProcessService,
AuthenticationService,
DatePipe
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
logService = TestBed.get(LogService);
}));
setupTestBed({
imports: [
ProcessTestingModule
],
schemas: [NO_ERRORS_SCHEMA]
});
beforeEach(() => {
logService = TestBed.get(LogService);
fixture = TestBed.createComponent(TaskDetailsComponent);
component = fixture.componentInstance;
service = fixture.debugElement.injector.get(TaskListService);
formService = fixture.debugElement.injector.get(FormService);
const userService: BpmUserService = TestBed.get(BpmUserService);
spyOn(userService, 'getCurrentUserInfo').and.returnValue(Observable.of({}));
service = TestBed.get(TaskListService);
spyOn(service, 'getTaskChecklist').and.returnValue(Observable.of(noDataMock));
formService = TestBed.get(FormService);
getTaskDetailsSpy = spyOn(service, 'getTaskDetails').and.returnValue(Observable.of(taskDetailsMock));
spyOn(formService, 'getTaskForm').and.returnValue(Observable.of(taskFormMock));
@@ -94,14 +78,21 @@ describe('TaskDetailsComponent', () => {
getTasksSpy = spyOn(service, 'getTasks').and.returnValue(Observable.of(tasksMock));
assignTaskSpy = spyOn(service, 'assignTask').and.returnValue(Observable.of(fakeUser));
completeTaskSpy = spyOn(service, 'completeTask').and.returnValue(Observable.of({}));
spyOn(service, 'getTaskChecklist').and.returnValue(Observable.of(noDataMock));
commentProcessService = fixture.debugElement.injector.get(CommentProcessService);
commentProcessService = TestBed.get(CommentProcessService);
spyOn(commentProcessService, 'getTaskComments').and.returnValue(Observable.of([
{message: 'Test1', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}},
{message: 'Test2', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}},
{message: 'Test3', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}}
]));
fixture = TestBed.createComponent(TaskDetailsComponent);
component = fixture.componentInstance;
});
afterEach(() => {
getTaskDetailsSpy.calls.reset();
fixture.destroy();
});
it('should load task details when taskId specified', () => {
@@ -191,8 +182,13 @@ describe('TaskDetailsComponent', () => {
describe('change detection', () => {
let change = new SimpleChange('123', '456', true);
let nullChange = new SimpleChange('123', null, true);
let change;
let nullChange;
beforeEach(() => {
change = new SimpleChange('123', '456', true);
nullChange = new SimpleChange('123', null, true);
});
beforeEach(async(() => {
component.taskId = '123';
@@ -207,15 +203,21 @@ describe('TaskDetailsComponent', () => {
expect(getTaskDetailsSpy).toHaveBeenCalledWith('456');
});
it('should NOT fetch new task details when empty changeset made', () => {
component.ngOnChanges({});
expect(getTaskDetailsSpy).not.toHaveBeenCalled();
});
it('should NOT fetch new task details when empty changeset made', async(() => {
fixture.detectChanges();
fixture.whenStable().then(() => {
component.ngOnChanges({});
expect(getTaskDetailsSpy).not.toHaveBeenCalled();
});
}));
it('should NOT fetch new task details when taskId changed to null', () => {
component.ngOnChanges({'taskId': nullChange});
expect(getTaskDetailsSpy).not.toHaveBeenCalled();
});
it('should NOT fetch new task details when taskId changed to null', async(() => {
fixture.detectChanges();
fixture.whenStable().then(() => {
component.ngOnChanges({'taskId': nullChange});
expect(getTaskDetailsSpy).not.toHaveBeenCalled();
});
}));
it('should set a placeholder message when taskId changed to null', () => {
component.ngOnChanges({'taskId': nullChange});

View File

@@ -17,12 +17,13 @@
import { SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService, AppsProcessService } from '@alfresco/adf-core';
import { AppConfigService, AppsProcessService, setupTestBed } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { FilterParamsModel, FilterRepresentationModel } from '../models/filter.model';
import { TaskListService } from '../services/tasklist.service';
import { TaskFilterService } from '../services/task-filter.service';
import { TaskFiltersComponent } from './task-filters.component';
import { ProcessTestingModule } from '../../testing/process.testing.module';
describe('TaskFiltersComponent', () => {
@@ -62,18 +63,11 @@ describe('TaskFiltersComponent', () => {
let component: TaskFiltersComponent;
let fixture: ComponentFixture<TaskFiltersComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TaskFiltersComponent
],
providers: [
TaskListService,
TaskFilterService
]
}).compileComponents();
}));
setupTestBed({
imports: [
ProcessTestingModule
]
});
beforeEach(() => {
let appConfig: AppConfigService = TestBed.get(AppConfigService);

View File

@@ -17,7 +17,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { CardViewUpdateService, AppConfigService } from '@alfresco/adf-core';
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
import { BpmUserService } from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import {
@@ -32,6 +32,7 @@ import {
import { TaskDetailsModel } from '../models/task-details.model';
import { TaskListService } from './../services/tasklist.service';
import { TaskHeaderComponent } from './task-header.component';
import { ProcessTestingModule } from '../../testing/process.testing.module';
describe('TaskHeaderComponent', () => {
@@ -55,19 +56,11 @@ describe('TaskHeaderComponent', () => {
groups: []
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TaskHeaderComponent
],
providers: [
TaskListService,
BpmUserService,
CardViewUpdateService,
AppConfigService
]
}).compileComponents();
}));
setupTestBed({
imports: [
ProcessTestingModule
]
});
beforeEach(() => {
fixture = TestBed.createComponent(TaskHeaderComponent);

View File

@@ -16,11 +16,12 @@
*/
import { Component, SimpleChange, ViewChild } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService } from '@alfresco/adf-core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppConfigService, setupTestBed, CoreModule } from '@alfresco/adf-core';
import { DataRowEvent, ObjectDataRow, ObjectDataTableAdapter } from '@alfresco/adf-core';
import { TaskListService } from '../services/tasklist.service';
import { TaskListComponent } from './task-list.component';
import { ProcessTestingModule } from '../../testing/process.testing.module';
declare let jasmine: any;
@@ -121,17 +122,11 @@ describe('TaskListComponent', () => {
let fixture: ComponentFixture<TaskListComponent>;
let appConfig: AppConfigService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TaskListComponent
],
providers: [
TaskListService
]
}).compileComponents();
}));
setupTestBed({
imports: [
ProcessTestingModule
]
});
beforeEach(() => {
appConfig = TestBed.get(AppConfigService);
@@ -625,17 +620,11 @@ describe('CustomTaskListComponent', () => {
let fixture: ComponentFixture<CustomTaskListComponent>;
let component: CustomTaskListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TaskListComponent,
CustomTaskListComponent
],
providers: [
TaskListService
]
}).compileComponents();
}));
setupTestBed({
imports: [CoreModule.forRoot()],
declarations: [TaskListComponent, CustomTaskListComponent],
providers: [TaskListService]
});
beforeEach(() => {
fixture = TestBed.createComponent(CustomTaskListComponent);

View File

@@ -17,31 +17,25 @@
import { TaskStandaloneComponent } from './task-standalone.component';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import {
MatButtonModule,
MatCardModule
} from '@angular/material';
import { setupTestBed } from '@alfresco/adf-core';
import { ProcessTestingModule } from '../../testing/process.testing.module';
describe('TaskStandaloneComponent', () => {
let component: TaskStandaloneComponent;
let fixture: ComponentFixture<TaskStandaloneComponent>;
let element: HTMLElement;
setupTestBed({
imports: [
ProcessTestingModule
]
});
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
TaskStandaloneComponent
],
imports: [
MatButtonModule,
MatCardModule
]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(TaskStandaloneComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
fixture.detectChanges();
});
fixture = TestBed.createComponent(TaskStandaloneComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
fixture.detectChanges();
}));
it('should show Completed message if isCompleted is true', async(() => {

View File

@@ -189,7 +189,7 @@ export class TaskListService {
* @param formId ID of the form to add
*/
attachFormToATask(taskId: string, formId: number): Observable<any> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.attachForm(taskId, {'formId': formId})).catch(err => this.handleError(err));
return Observable.fromPromise(this.apiService.taskApi.attachForm(taskId, {'formId': formId})).catch(err => this.handleError(err));
}
/**
@@ -218,7 +218,7 @@ export class TaskListService {
* @param taskId ID of the target task
*/
completeTask(taskId: string) {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.completeTask(taskId))
return Observable.fromPromise(this.apiService.taskApi.completeTask(taskId))
.map(res => res)
.catch(err => this.handleError(err));
}
@@ -280,7 +280,7 @@ export class TaskListService {
* @param taskId ID of the task to claim
*/
claimTask(taskId: string): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.claimTask(taskId))
return Observable.fromPromise(this.apiService.taskApi.claimTask(taskId))
.catch(err => this.handleError(err));
}
@@ -289,7 +289,7 @@ export class TaskListService {
* @param taskId ID of the task to unclaim
*/
unclaimTask(taskId: string): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.unclaimTask(taskId))
return Observable.fromPromise(this.apiService.taskApi.unclaimTask(taskId))
.catch(err => this.handleError(err));
}
@@ -299,7 +299,7 @@ export class TaskListService {
* @param updated Data to update the task (as a `TaskUpdateRepresentation` instance).
*/
updateTask(taskId: any, updated): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.updateTask(taskId, updated))
return Observable.fromPromise(this.apiService.taskApi.updateTask(taskId, updated))
.catch(err => this.handleError(err));
}
@@ -308,7 +308,7 @@ export class TaskListService {
* @param taskId ID of the target task
*/
fetchTaskAuditPdfById(taskId: string): Observable<Blob> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.getTaskAuditPdf(taskId))
return Observable.fromPromise(this.apiService.taskApi.getTaskAuditPdf(taskId))
.catch(err => this.handleError(err));
}
@@ -317,36 +317,36 @@ export class TaskListService {
* @param taskId ID of the target task
*/
fetchTaskAuditJsonById(taskId: string): Observable<any> {
return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.getTaskAuditJson(taskId))
return Observable.fromPromise(this.apiService.taskApi.getTaskAuditJson(taskId))
.catch(err => this.handleError(err));
}
private callApiTasksFiltered(requestNode: TaskQueryRequestRepresentationModel) {
return this.apiService.getInstance().activiti.taskApi.listTasks(requestNode);
return this.apiService.taskApi.listTasks(requestNode);
}
private callApiTaskDetails(taskId: string) {
return this.apiService.getInstance().activiti.taskApi.getTask(taskId);
return this.apiService.taskApi.getTask(taskId);
}
private callApiAddTask(task: TaskDetailsModel) {
return this.apiService.getInstance().activiti.taskApi.addSubtask(task.parentTaskId, task);
return this.apiService.taskApi.addSubtask(task.parentTaskId, task);
}
private callApiDeleteTask(taskId: string) {
return this.apiService.getInstance().activiti.taskApi.deleteTask(taskId);
return this.apiService.taskApi.deleteTask(taskId);
}
private callApiTaskChecklist(taskId: string) {
return this.apiService.getInstance().activiti.taskApi.getChecklist(taskId);
return this.apiService.taskApi.getChecklist(taskId);
}
private callApiCreateTask(task: TaskDetailsModel) {
return this.apiService.getInstance().activiti.taskApi.createNewTask(task);
return this.apiService.taskApi.createNewTask(task);
}
private callApiAssignTask(taskId: string, requestNode: any) {
return this.apiService.getInstance().activiti.taskApi.assignTask(taskId, requestNode);
return this.apiService.taskApi.assignTask(taskId, requestNode);
}
private handleError(error: any) {