Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ACA-3706] implement startedBy process filter property #6077

Merged
merged 10 commits into from
Oct 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
fxFlex
class="app-cloud-layout-overflow"
[appName]="editedFilter.appName"
[initiator]="editedFilter.initiator"
[initiator]="getInitiatorValue()"
[processDefinitionId]="editedFilter.processDefinitionId"
[processDefinitionName]="editedFilter.processDefinitionName"
[processDefinitionKey]="editedFilter.processDefinitionKey"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy {
}
}

getInitiatorValue(): string {
return this.editedFilter.initiator?.map(initiator => initiator.username).join(',');
}

onChangePageSize(event: Pagination) {
this.userPreference.paginationSize = event.maxItems;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export class ProcessListCloudConfiguration {
{
'key': 'entry.initiator',
'type': 'text',
'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.INITIATOR',
'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.STARTED_BY',
'sortable': true
},
{
Expand Down
8 changes: 4 additions & 4 deletions e2e/process-services-cloud/process-custom-filters.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,15 +145,15 @@ describe('Process list cloud', () => {
await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true);
});

it('[C305054] Should display processes ordered by initiator when Initiator is selected from sort dropdown', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ status: 'ALL', sort: 'Initiator', order: 'ASC' });
it('[C305054] Should display processes ordered by started by when Started By is selected from sort dropdown', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ status: 'ALL', sort: 'Started by', order: 'ASC' });
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();

await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true);
await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Started by')).toBe(true);

await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ order: 'DESC'});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true);
await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Started by')).toBe(true);
});

it('[C305054] Should display processes ordered by processdefinitionid date when ProcessDefinitionId is selected from sort dropdown', async () => {
Expand Down
6 changes: 3 additions & 3 deletions e2e/process-services-cloud/process-filter-results.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ describe('Process filters cloud', () => {
it('[C306887] Should be able to filter by appName', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp);
await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username);
await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`);

await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name);
Expand All @@ -160,14 +160,14 @@ describe('Process filters cloud', () => {
it('[C306889] Should be able to see "No process found" when using an app with no processes in the appName field', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp');
await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username);
await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`);

await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found');
});

it('[C306890] Should be able to filter by initiator', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username);
await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`);

await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name);
Expand Down
2 changes: 1 addition & 1 deletion e2e/process-services-cloud/process-header-cloud.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ describe('Process Header cloud component', () => {
await processCloudDemoPage.processFilterCloudComponent.clickCompletedProcessesFilter();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe(PROCESSES.COMPLETED);

await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ initiator: testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ initiator: `${testUser.firstName} ${testUser.lastName}` });
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name);

Expand Down
13 changes: 7 additions & 6 deletions e2e/process-services-cloud/process-list-selection-cloud.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ describe('Process list cloud', () => {
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username);
await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`);
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected();
});
Expand All @@ -108,7 +109,7 @@ describe('Process list cloud', () => {
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);

await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]);
Expand All @@ -124,7 +125,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]);
Expand All @@ -141,7 +142,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]);
Expand All @@ -158,7 +159,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.enableMultiSelection();
await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await browser.sleep(1000);
Expand All @@ -182,7 +183,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username });
await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]);
Expand Down
3 changes: 2 additions & 1 deletion lib/core/services/oauth2.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import { Injectable } from '@angular/core';
import { AlfrescoApiService } from './alfresco-api.service';
import { Observable, from } from 'rxjs';
import { Oauth2Auth } from '@alfresco/js-api';

export const JSON_TYPE = ['application/json'];

Expand All @@ -33,7 +34,7 @@ export interface OAuth2RequestParams {
export class OAuth2Service {
constructor(private alfrescoApiService: AlfrescoApiService) {}

get apiClient() {
get apiClient(): Oauth2Auth {
return this.alfrescoApiService.getInstance().oauth2Auth;
}

Expand Down
2 changes: 2 additions & 0 deletions lib/process-services-cloud/src/lib/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"COMPLETED_BY": "Completed By",
"ID": "Id",
"INITIATOR": "Initiator",
"STARTED_BY": "Started by",
"APP_NAME": "Application Name",
"BUSINESS_KEY": "Business Key",
"DESCRIPTION": "Description",
Expand Down Expand Up @@ -207,6 +208,7 @@
"PROCESS_NAME": "Process Name",
"APP_VERSION": "AppReleaseVersion",
"STARTED_DATE": "Started Date",
"STARTED_BY": "Started by",
"COMPLETED_DATE": "Completed Date",
"DATE_RANGE": {
"NO_DATE": "No Date",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@
[options]="processFilterProperty.dateFilterOptions"
(dateTypeChange)="onDateTypeChange($event, processFilterProperty)"
(dateChanged)="onDateRangeFilterChanged($event, processFilterProperty)"></adf-cloud-date-range-filter>

<div fxFlex="23%" *ngIf="isUserSelectType(processFilterProperty)">
<adf-cloud-people
[preSelectUsers]="processFilterProperty.value"
[title]="processFilterProperty.label"
[validate]="true"
[appName]="appName"
[mode]="processFilterProperty.selectionMode"
(changedUsers)="onChangedUser($event, processFilterProperty)"></adf-cloud-people>
</div>
</ng-container>
</div>
</form>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SimpleChange } from '@angular/core';
import { By } from '@angular/platform-browser';

import { setupTestBed } from '@alfresco/adf-core';
import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core';
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
Expand Down Expand Up @@ -48,6 +48,7 @@ describe('EditProcessFilterCloudComponent', () => {
let processService: ProcessCloudService;
let getRunningApplicationsSpy: jasmine.Spy;
let getProcessFilterByIdSpy: jasmine.Spy;
let alfrescoApiService: AlfrescoApiService;

const fakeFilter = new ProcessFilterCloudModel({
name: 'FakeRunningProcess',
Expand All @@ -61,6 +62,12 @@ describe('EditProcessFilterCloudComponent', () => {
sort: 'id'
});

const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
}
};

setupTestBed({
imports: [
TranslateModule.forRoot(),
Expand All @@ -79,6 +86,7 @@ describe('EditProcessFilterCloudComponent', () => {
service = TestBed.inject(ProcessFilterCloudService);
appsService = TestBed.inject(AppsProcessCloudService);
processService = TestBed.inject(ProcessCloudService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
dialog = TestBed.inject(MatDialog);
spyOn(dialog, 'open').and.returnValue({
afterClosed() {
Expand All @@ -91,6 +99,7 @@ describe('EditProcessFilterCloudComponent', () => {
});
getProcessFilterByIdSpy = spyOn(service, 'getFilterById').and.returnValue(of(fakeFilter));
getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
fixture.detectChanges();
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@ import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/opera
import { Subject, Observable } from 'rxjs';
import moment from 'moment-es6';
import { Moment } from 'moment';

import { AppsProcessCloudService } from '../../../app/services/apps-process-cloud.service';
import { ProcessFilterCloudModel, ProcessFilterProperties, ProcessFilterAction, ProcessFilterOptions, ProcessSortFilterProperties } from '../models/process-filter-cloud.model';
import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
import { IdentityUserModel, TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
import { ProcessFilterCloudService } from '../services/process-filter-cloud.service';
import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component';
import { ApplicationInstanceModel } from '../../../app/models/application-instance.model';
Expand Down Expand Up @@ -333,6 +332,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
);
}

onChangedUser(users: IdentityUserModel[], processProperty: ProcessFilterProperties) {
this.getPropertyController(processProperty).setValue(users);
}

hasError(property: ProcessFilterProperties): boolean {
return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid;
}
Expand Down Expand Up @@ -492,6 +495,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
return property.type === 'number';
}

isUserSelectType(property: ProcessFilterProperties): boolean {
return property.type === 'people';
}

isDisabledAction(action: ProcessFilterAction): boolean {
return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action);
}
Expand Down Expand Up @@ -589,7 +596,7 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
value: 'status'
},
{
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR',
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STARTED_BY',
key: 'initiator',
value: 'initiator'
},
Expand Down Expand Up @@ -670,12 +677,6 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
value: currentProcessFilter.processDefinitionName || '',
options: this.processDefinitionNames
}),
new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR',
type: 'text',
key: 'initiator',
value: currentProcessFilter.initiator || ''
}),
new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STATUS',
type: 'select',
Expand Down Expand Up @@ -714,6 +715,13 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
type: 'date',
key: 'completedDate',
value: currentProcessFilter.completedDate || false
}),
new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STARTED_BY',
type: 'people',
key: 'initiator',
value: currentProcessFilter.initiator,
selectionMode: 'multiple'
}),
new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.COMPLETED_DATE',
Expand Down