diff --git a/lib/process-services/mock/process/process-comments.mock.ts b/lib/process-services/mock/process/process-comments.mock.ts new file mode 100644 index 0000000000..aaa4c00279 --- /dev/null +++ b/lib/process-services/mock/process/process-comments.mock.ts @@ -0,0 +1,22 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export let mockProcessInstanceComments = [ + { 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'} } +]; diff --git a/lib/process-services/mock/process/process.model.mock.ts b/lib/process-services/mock/process/process.model.mock.ts index a338919174..0a35f34be2 100644 --- a/lib/process-services/mock/process/process.model.mock.ts +++ b/lib/process-services/mock/process/process.model.mock.ts @@ -65,6 +65,19 @@ export let processEnded = new ProcessInstance({ ended: '2016-11-11T03:37:30.010+0000' }); +export let mockRunningProcess = new ProcessInstance({ + id: '123', + name: 'Process 123', + started: '2016-11-10T03:37:30.010+0000', + startedBy: { + id: 1001, + firstName: 'Bob', + lastName: 'Jones', + email: 'bob@app.activiti.com' + }, + ended: null +}); + export let exampleProcessNoName = new ProcessInstance({ id: '123', name: null, diff --git a/lib/process-services/mock/public-api.ts b/lib/process-services/mock/public-api.ts index d4ad7c9dad..12a4e19c8f 100644 --- a/lib/process-services/mock/public-api.ts +++ b/lib/process-services/mock/public-api.ts @@ -19,6 +19,7 @@ export * from './process/process-instances-list.mock'; export * from './process/process.service.mock'; export * from './process/start-process.component.mock'; export * from './process/process.model.mock'; +export * from './process/process-comments.mock'; export * from './task/start-task.mock'; export * from './task/task-details.mock'; diff --git a/lib/process-services/process-comments/process-comments.component.spec.ts b/lib/process-services/process-comments/process-comments.component.spec.ts index 92950fc0e6..419559eb69 100644 --- a/lib/process-services/process-comments/process-comments.component.spec.ts +++ b/lib/process-services/process-comments/process-comments.component.spec.ts @@ -23,6 +23,7 @@ import { CommentProcessService, setupTestBed } from '@alfresco/adf-core'; import { ProcessCommentsComponent } from './process-comments.component'; import { ProcessTestingModule } from '../testing/process.testing.module'; +import { mockProcessInstanceComments } from '../mock/process/process-comments.mock'; describe('ProcessCommentsComponent', () => { @@ -41,11 +42,7 @@ describe('ProcessCommentsComponent', () => { component = fixture.componentInstance; commentProcessService = TestBed.get(CommentProcessService); - getCommentsSpy = spyOn(commentProcessService, 'getProcessInstanceComments').and.returnValue(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'} } - ])); + getCommentsSpy = spyOn(commentProcessService, 'getProcessInstanceComments').and.returnValue(of(mockProcessInstanceComments)); }); it('should load comments when processInstanceId specified', () => { diff --git a/lib/process-services/process-list/components/process-instance-details.component.spec.ts b/lib/process-services/process-list/components/process-instance-details.component.spec.ts index 329e2d12da..662677cadc 100644 --- a/lib/process-services/process-list/components/process-instance-details.component.spec.ts +++ b/lib/process-services/process-list/components/process-instance-details.component.spec.ts @@ -20,11 +20,11 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { of } from 'rxjs'; -import { setupTestBed } from '@alfresco/adf-core'; +import { setupTestBed, CommentProcessService } from '@alfresco/adf-core'; import { TaskListModule } from '../../task-list/task-list.module'; -import { ProcessInstance } from '../models/process-instance.model'; -import { exampleProcess, exampleProcessNoName } from './../../mock'; +import { exampleProcess, exampleProcessNoName, mockRunningProcess, processEnded } from './../../mock'; +import { mockProcessInstanceComments } from './../../mock/process/process-comments.mock'; import { ProcessService } from './../services/process.service'; import { ProcessInstanceDetailsComponent } from './process-instance-details.component'; import { ProcessTestingModule } from '../../testing/process.testing.module'; @@ -54,8 +54,15 @@ describe('ProcessInstanceDetailsComponent', () => { fixture = TestBed.createComponent(ProcessInstanceDetailsComponent); component = fixture.componentInstance; service = fixture.debugElement.injector.get(ProcessService); + const commentService = fixture.debugElement.injector.get(CommentProcessService); getProcessSpy = spyOn(service, 'getProcess').and.returnValue(of(exampleProcess)); + spyOn(commentService, 'getProcessInstanceComments').and.returnValue(of(mockProcessInstanceComments)); + }); + + afterEach(() => { + getProcessSpy.calls.reset(); + fixture.destroy(); }); it('should not load task details when no processInstanceId is specified', () => { @@ -80,7 +87,8 @@ describe('ProcessInstanceDetailsComponent', () => { })); it('should display default details when the process instance has no name', async(() => { - getProcessSpy = getProcessSpy.and.returnValue(of(exampleProcessNoName)); + fixture.detectChanges(); + getProcessSpy.and.returnValue(of(exampleProcessNoName)); fixture.detectChanges(); component.ngOnChanges({ 'processInstanceId': new SimpleChange(null, '123', true) }); fixture.whenStable().then(() => { @@ -91,83 +99,83 @@ describe('ProcessInstanceDetailsComponent', () => { }); })); + it('should enable diagram button if the process is running', async(() => { + fixture.detectChanges(); + getProcessSpy.and.returnValue(of(mockRunningProcess)); + fixture.detectChanges(); + component.ngOnChanges({ 'processInstanceId': new SimpleChange(null, '123', true) }); + fixture.whenStable().then(() => { + fixture.detectChanges(); + const diagramButton = fixture.debugElement.query(By.css('#show-diagram-button')); + expect(diagramButton).not.toBeNull(); + expect(diagramButton.nativeElement.disabled).toBe(false); + }); + })); + + it('should disable diagram button if the process is running', async(() => { + fixture.detectChanges(); + getProcessSpy.and.returnValue(of(processEnded)); + fixture.detectChanges(); + component.ngOnChanges({ 'processInstanceId': new SimpleChange(null, '123', true) }); + fixture.whenStable().then(() => { + fixture.detectChanges(); + const diagramButton = fixture.debugElement.query(By.css('#show-diagram-button')); + expect(diagramButton).not.toBeNull(); + expect(diagramButton.nativeElement.disabled).toBe(true); + }); + })); + describe('change detection', () => { const change = new SimpleChange('123', '456', true); const nullChange = new SimpleChange('123', null, true); - beforeEach(async(() => { + beforeEach(() => { component.processInstanceId = '123'; - fixture.detectChanges(); component.tasksList = jasmine.createSpyObj('tasksList', ['load']); + fixture.detectChanges(); + }); + + it('should fetch new process details when processInstanceId changed', async(() => { + fixture.detectChanges(); + component.ngOnChanges({ 'processInstanceId': change }); fixture.whenStable().then(() => { - getProcessSpy.calls.reset(); + fixture.detectChanges(); + expect(getProcessSpy).toHaveBeenCalledWith('456'); }); })); - // tslint:disable-next-line: ban - xit('should fetch new process details when processInstanceId changed', () => { - component.ngOnChanges({ 'processInstanceId': change }); - expect(getProcessSpy).toHaveBeenCalledWith('456'); - }); - - it('should NOT fetch new process details when empty changeset made', () => { + it('should NOT fetch new process details when empty changeset made', async(() => { + fixture.detectChanges(); component.ngOnChanges({}); - expect(getProcessSpy).not.toHaveBeenCalled(); - }); - - // tslint:disable-next-line: ban - xit('should NOT fetch new process details when processInstanceId changed to null', () => { - component.ngOnChanges({ 'processInstanceId': nullChange }); - expect(getProcessSpy).not.toHaveBeenCalled(); - }); - - // tslint:disable-next-line: ban - xit('should set a placeholder message when processInstanceId changed to null', () => { - component.ngOnChanges({ 'processInstanceId': nullChange }); - fixture.detectChanges(); - expect(fixture.nativeElement.innerText).toBe('ADF_PROCESS_LIST.DETAILS.MESSAGES.NONE'); - }); - - // tslint:disable-next-line: ban - xit('should display cancel button if process is running', () => { - component.processInstanceDetails = new ProcessInstance({ - ended: null + fixture.whenStable().then(() => { + expect(getProcessSpy).not.toHaveBeenCalled(); }); + })); + + it('should NOT fetch new process details when processInstanceId changed to null', async(() => { fixture.detectChanges(); - const buttonEl = fixture.debugElement.query(By.css('[data-automation-id="header-status"] button')); - expect(buttonEl).not.toBeNull(); - }); + component.ngOnChanges({ 'processInstanceId': nullChange }); + fixture.whenStable().then(() => { + expect(getProcessSpy).not.toHaveBeenCalled(); + }); + })); - describe('Diagram', () => { - - // tslint:disable-next-line: ban - xit('should enable diagram button if the process is running', async(() => { - component.processInstanceDetails = new ProcessInstance({ - ended: null - }); + it('should set a placeholder message when processInstanceId changed to null', async(() => { + component.ngOnChanges({ 'processInstanceId': nullChange }); + fixture.whenStable().then(() => { fixture.detectChanges(); + expect(fixture.nativeElement.innerText).toBe('ADF_PROCESS_LIST.DETAILS.MESSAGES.NONE'); + }); + })); - fixture.whenStable().then(() => { - const diagramButton = fixture.debugElement.query(By.css('#show-diagram-button')); - expect(diagramButton).not.toBeNull(); - expect(diagramButton.nativeElement.disabled).toBe(false); - }); - })); - - it('should disable diagram button if the process is running', async(() => { - component.processInstanceDetails = new ProcessInstance({ - ended: new Date() - }); - + it('should display cancel button if process is running', async(() => { + component.ngOnChanges({ 'processInstanceId': change }); + fixture.whenStable().then(() => { fixture.detectChanges(); - - fixture.whenStable().then(() => { - const diagramButton = fixture.debugElement.query(By.css('#show-diagram-button')); - expect(diagramButton).not.toBeNull(); - expect(diagramButton.nativeElement.disabled).toBe(true); - }); - })); - }); + const buttonEl = fixture.debugElement.query(By.css('[data-automation-id="header-status"] button')); + expect(buttonEl).not.toBeNull(); + }); + })); }); });