diff --git a/lib/process-services-cloud/src/lib/process/mock/process-cloud.service.mock.ts b/lib/process-services-cloud/src/lib/process/mock/process-cloud.service.mock.ts new file mode 100644 index 0000000000..a8baccc2b3 --- /dev/null +++ b/lib/process-services-cloud/src/lib/process/mock/process-cloud.service.mock.ts @@ -0,0 +1,79 @@ +/*! + * @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. + */ + +import { LogService } from '@alfresco/adf-core'; +import { Injectable } from '@angular/core'; +import { Observable, of, Subject, throwError } from 'rxjs'; +import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model'; +import { ProcessDefinitionCloud } from '../../models/process-definition-cloud.model'; +import { ApplicationVersionModel } from '../../models/application-version.model'; +import { processInstancePlaceholdersCloudMock, processInstanceDetailsCloudMock } from './process-instance-details-cloud.mock'; +import { fakeProcessDefinitions } from '../start-process/mock/start-process.component.mock'; +import { mockAppVersions } from '../process-filters/mock/process-filters-cloud.mock'; +import { ProcessCloudInterface } from '../services/process-cloud.interface'; + +@Injectable({ + providedIn: 'root' +}) +export class ProcessCloudServiceMock implements ProcessCloudInterface { + + dataChangesDetected = new Subject(); + + constructor(private logService: LogService) { } + + getProcessInstanceById(appName: string, processInstanceId: string): Observable { + if (appName === 'app-placeholders' && processInstanceId) { + return of(processInstancePlaceholdersCloudMock); + } + + if (appName && processInstanceId) { + return of(processInstanceDetailsCloudMock); + + } else { + this.logService.error('AppName and ProcessInstanceId are mandatory for querying a process'); + return throwError('AppName/ProcessInstanceId not configured'); + } + } + + getProcessDefinitions(appName: string): Observable { + if (appName || appName === '') { + return of(fakeProcessDefinitions); + + } else { + this.logService.error('AppName is mandatory for querying task'); + return throwError('AppName not configured'); + } + } + + getApplicationVersions(appName: string): Observable { + if (appName) { + return of(mockAppVersions); + } else { + this.logService.error('AppName is mandatory for querying the versions of an application'); + return throwError('AppName not configured'); + } + } + + cancelProcess(appName: string, processInstanceId: string): Observable { + if (appName && processInstanceId) { + return of(); + } else { + this.logService.error('App name and Process id are mandatory for deleting a process'); + return throwError('App name and process id not configured'); + } + } +} diff --git a/lib/process-services-cloud/src/lib/process/mock/process-instance-details-cloud.mock.ts b/lib/process-services-cloud/src/lib/process/mock/process-instance-details-cloud.mock.ts new file mode 100644 index 0000000000..c2fe6fa7ad --- /dev/null +++ b/lib/process-services-cloud/src/lib/process/mock/process-instance-details-cloud.mock.ts @@ -0,0 +1,42 @@ +/*! + * @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. + */ + +import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model'; + +export const processInstanceDetailsCloudMock: ProcessInstanceCloud = { + appName: 'app-form-mau', + businessKey: 'MyBusinessKey', + id: '00fcc4ab-4290-11e9-b133-0a586460016a', + initiator: 'devopsuser', + lastModified: new Date(1552152187081), + name: 'new name', + parentId: '00fcc4ab-4290-11e9-b133-0a586460016b', + startDate: new Date(1552152187080), + status: 'RUNNING' +}; + +export const processInstancePlaceholdersCloudMock: ProcessInstanceCloud = { + appName: 'app-placeholders', + businessKey: '', + id: '00fcc4ab-4290-11e9-b133-0a586460016a', + initiator: 'devopsuser', + lastModified: new Date(1552152187081), + name: '', + parentId: '', + startDate: new Date(1552152187080), + status: 'RUNNING' +}; diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts index e5fa48d65e..aee31a13c6 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts @@ -37,9 +37,9 @@ import { LocalPreferenceCloudService } from '../../../services/local-preference- import { TranslateModule } from '@ngx-translate/core'; import { ProcessCloudService } from '../../services/process-cloud.service'; import { DateCloudFilterType } from '../../../models/date-cloud-filter.model'; -import { ApplicationVersionModel } from '../../../models/application-version.model'; import { MatIconTestingModule } from '@angular/material/icon/testing'; import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model'; +import { mockAppVersions } from '../mock/process-filters-cloud.mock'; describe('EditProcessFilterCloudComponent', () => { let component: EditProcessFilterCloudComponent; @@ -603,23 +603,8 @@ describe('EditProcessFilterCloudComponent', () => { }); it('should fetch appVersionMultiple options when appVersionMultiple filter property is set', async () => { - const mockAppVersion1: ApplicationVersionModel = { - entry: { - id: 'mock-version-1-id', - name: 'mock-version-1-name', - version: '1' - } - }; - const mockAppVersion2: ApplicationVersionModel = { - entry: { - id: 'mock-version-2-id', - name: 'mock-version-2-name', - version: '2' - } - }; - - const applicationVersionsSpy = spyOn(processService, 'getApplicationVersions').and.returnValue(of([mockAppVersion1, mockAppVersion2])); + const applicationVersionsSpy = spyOn(processService, 'getApplicationVersions').and.returnValue(of(mockAppVersions)); fixture.detectChanges(); component.filterProperties = ['appVersionMultiple']; diff --git a/lib/process-services-cloud/src/lib/process/process-filters/mock/process-filters-cloud.mock.ts b/lib/process-services-cloud/src/lib/process/process-filters/mock/process-filters-cloud.mock.ts index 7511ad518f..0b27eb50c6 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/mock/process-filters-cloud.mock.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/mock/process-filters-cloud.mock.ts @@ -17,6 +17,7 @@ import { ProcessFilterCloudModel } from '../models/process-filter-cloud.model'; import { DateCloudFilterType } from '../../../../..'; +import { ApplicationVersionModel } from '../../../models/application-version.model'; export const fakeProcessCloudFilters = [ { @@ -167,3 +168,21 @@ export const fakeProcessCloudFilterWithDifferentEntries = { } } }; + +const mockAppVersion1: ApplicationVersionModel = { + entry: { + id: 'mock-version-1-id', + name: 'mock-version-1-name', + version: '1' + } +}; + +const mockAppVersion2: ApplicationVersionModel = { + entry: { + id: 'mock-version-2-id', + name: 'mock-version-2-name', + version: '2' + } +}; + +export const mockAppVersions = [mockAppVersion1, mockAppVersion2]; diff --git a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts index e4582aba1e..901268ac67 100644 --- a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts @@ -24,19 +24,7 @@ import { ProcessHeaderCloudComponent } from './process-header-cloud.component'; import { ProcessHeaderCloudModule } from '../process-header-cloud.module'; import { ProcessCloudService } from '../../services/process-cloud.service'; import { TranslateModule } from '@ngx-translate/core'; -import { ProcessInstanceCloud } from '../../start-process/models/process-instance-cloud.model'; - -const processInstanceDetailsCloudMock: ProcessInstanceCloud = { - appName: 'app-form-mau', - businessKey: 'MyBusinessKey', - id: '00fcc4ab-4290-11e9-b133-0a586460016a', - initiator: 'devopsuser', - lastModified: new Date(1552152187081), - name: 'new name', - parentId: '00fcc4ab-4290-11e9-b133-0a586460016b', - startDate: new Date(1552152187080), - status: 'RUNNING' -}; +import { processInstanceDetailsCloudMock } from '../../mock/process-instance-details-cloud.mock'; describe('ProcessHeaderCloudComponent', () => { let component: ProcessHeaderCloudComponent; diff --git a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.stories.ts b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.stories.ts new file mode 100644 index 0000000000..8ea24288e5 --- /dev/null +++ b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.stories.ts @@ -0,0 +1,66 @@ +/*! + * @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. + */ + +import { Meta, moduleMetadata, Story } from '@storybook/angular'; +import { ProcessHeaderCloudModule } from '../process-header-cloud.module'; +import { ProcessServicesCloudStoryModule } from '../../../testing/process-services-cloud-story.module'; +import { ProcessHeaderCloudComponent } from './process-header-cloud.component'; +import { ProcessCloudServiceMock } from '../../mock/process-cloud.service.mock'; +import { ProcessCloudService } from '../../services/process-cloud.service'; + +export default { + component: ProcessHeaderCloudComponent, + title: 'Process Services Cloud/Components/Process Header', + decorators: [ + moduleMetadata({ + imports: [ProcessServicesCloudStoryModule, ProcessHeaderCloudModule], + providers: [{ provide: ProcessCloudService, useClass: ProcessCloudServiceMock }] + }) + ], + argTypes: { + appName: { table: { disable: true } }, + processInstanceId: { table: { disable: true } } + } +} as Meta; + +const template: Story = (args: ProcessHeaderCloudComponent) => ({ + props: args +}); + +export const primary = template.bind({}); +primary.args = { + appName: 'app', + processInstanceId: 'mock-process-id' +}; + +export const noParentAndBusinessAndName = template.bind({}); +noParentAndBusinessAndName.args = { + appName: 'app-placeholders', + processInstanceId: 'mock-process-id' +}; + +export const invalidOrMissingAppName = template.bind({}); +invalidOrMissingAppName.args = { + appName: undefined, + processInstanceId: 'mock-process-id' +}; + +export const invalidOrMissingProcessInstanceID = template.bind({}); +invalidOrMissingProcessInstanceID.args = { + appName: 'app', + processInstanceId: undefined +}; diff --git a/lib/process-services-cloud/src/lib/process/services/process-cloud.interface.ts b/lib/process-services-cloud/src/lib/process/services/process-cloud.interface.ts new file mode 100644 index 0000000000..7318f2658e --- /dev/null +++ b/lib/process-services-cloud/src/lib/process/services/process-cloud.interface.ts @@ -0,0 +1,31 @@ +/*! + * @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. + */ + +import { Observable, Subject } from 'rxjs'; +import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model'; +import { ProcessDefinitionCloud } from '../../models/process-definition-cloud.model'; +import { ApplicationVersionModel } from '../../models/application-version.model'; + +export interface ProcessCloudInterface { + + dataChangesDetected: Subject; + + getProcessInstanceById(appName: string, processInstanceId: string): Observable; + getProcessDefinitions(appName: string): Observable; + getApplicationVersions(appName: string): Observable; + cancelProcess(appName: string, processInstanceId: string): Observable; +} diff --git a/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts b/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts index 9686058262..f4451327f5 100644 --- a/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts @@ -23,11 +23,12 @@ import { ProcessInstanceCloud } from '../start-process/models/process-instance-c import { BaseCloudService } from '../../services/base-cloud.service'; import { ProcessDefinitionCloud } from '../../models/process-definition-cloud.model'; import { ApplicationVersionModel, ApplicationVersionResponseModel } from '../../models/application-version.model'; +import { ProcessCloudInterface } from './process-cloud.interface'; @Injectable({ providedIn: 'root' }) -export class ProcessCloudService extends BaseCloudService { +export class ProcessCloudService extends BaseCloudService implements ProcessCloudInterface { dataChangesDetected = new Subject();