[ADF-5165][Form] Save button is not displayed for Involved task (#6005)

This commit is contained in:
dhrn
2020-08-14 21:20:02 +05:30
committed by GitHub
parent 466b309cd8
commit f5378a61ff
4 changed files with 177 additions and 4 deletions

View File

@@ -845,3 +845,131 @@ export let noDataMock = [
}
})
];
export const involvedUserTaskForm = {
id: '20259',
name: 'Shared task',
description: '',
category: null,
assignee: {
id: 347,
firstName: 'Fake',
lastName: 'assignee',
email: 'fake-assignee@test.com'
},
created: '2020-08-14T11:02:44.992+0000',
dueDate: null,
endDate: null,
duration: null,
priority: 50,
parentTaskId: null,
parentTaskName: null,
processInstanceId: null,
processInstanceName: null,
processDefinitionId: null,
processDefinitionName: null,
processDefinitionDescription: null,
processDefinitionKey: null,
processDefinitionCategory: null,
processDefinitionVersion: 0,
processDefinitionDeploymentId: null,
formKey: '3896',
processInstanceStartUserId: null,
initiatorCanCompleteTask: false,
adhocTaskCanBeReassigned: true,
taskDefinitionKey: null,
executionId: null,
involvedPeople: [
{
id: 1001,
email: 'fake-email@gmail.com',
firstName: 'fake',
lastName: 'user'
}
],
involvedGroups: [],
memberOfCandidateGroup: false,
memberOfCandidateUsers: false,
managerOfCandidateGroup: false
};
export const involvedGroupTaskForm = {
id: '20259',
name: 'Shared task',
description: '',
category: null,
assignee: {
id: 347,
firstName: 'Fake',
lastName: 'assignee',
email: 'fake-assignee@test.com'
},
created: '2020-08-14T11:02:44.992+0000',
dueDate: null,
endDate: null,
duration: null,
priority: 50,
parentTaskId: null,
parentTaskName: null,
processInstanceId: null,
processInstanceName: null,
processDefinitionId: null,
processDefinitionName: null,
processDefinitionDescription: null,
processDefinitionKey: null,
processDefinitionCategory: null,
processDefinitionVersion: 0,
processDefinitionDeploymentId: null,
formKey: '3896',
processInstanceStartUserId: null,
initiatorCanCompleteTask: false,
adhocTaskCanBeReassigned: true,
taskDefinitionKey: null,
executionId: null,
involvedPeople: [],
involvedGroups: [
{
id: 637,
name: 'one-group'
}
],
memberOfCandidateGroup: false,
memberOfCandidateUsers: false,
managerOfCandidateGroup: false
};
export const fakeUser = {
id: 1001,
email: 'fake-email@gmail.com',
firstName: 'fake',
lastName: 'user',
externalId: null,
company: null,
pictureId: null,
fullname: 'One Alfrsco',
password: null,
type: 'enterprise',
status: 'active',
created: '2020-08-14T09:21:52.306Z',
lastUpdate: '2020-08-14T09:22:48.147Z',
tenantId: 310,
groups: [
{
id: 637,
name: 'one-group',
externalId: null,
status: 'active',
parentGroupId: null,
tenantId: 310,
type: 1,
userCount: null,
users: null,
capabilities: null,
groups: null
}
],
capabilities: null,
apps: [],
tenantPictureId: null,
tenantName: 'abc'
};

View File

@@ -6,6 +6,7 @@
[showRefreshButton]="showFormRefreshButton"
[showCompleteButton]="showFormCompleteButton"
[showSaveButton]="isSaveButtonVisible()"
[disableCompleteButton]="!isCompleteButtonEnabled()"
[readOnly]="isReadOnlyForm()"
[fieldValidators]="fieldValidators"
(formSaved)='onFormSaved($event)'

View File

@@ -41,7 +41,10 @@ import {
taskDetailsWithOutCandidateGroup,
claimedTaskDetailsMock,
claimedByGroupMemberMock,
initiatorWithCandidatesTaskDetailsMock
initiatorWithCandidatesTaskDetailsMock,
involvedUserTaskForm,
fakeUser,
involvedGroupTaskForm
} from '../../../mock/task/task-details.mock';
import { TaskDetailsModel } from '../../models/task-details.model';
import { ProcessTestingModule } from '../../../testing/process.testing.module';
@@ -81,7 +84,7 @@ describe('TaskFormComponent', () => {
taskDetailsMock.processDefinitionId = null;
spyOn(formService, 'getTask').and.returnValue(of(taskDetailsMock));
authService = TestBed.inject(AuthenticationService);
getBpmLoggedUserSpy = spyOn(authService, 'getBpmLoggedUser').and.returnValue(of({ id: 1001, email: 'fake-email@gmail.com' }));
getBpmLoggedUserSpy = spyOn(authService, 'getBpmLoggedUser').and.returnValue(of(fakeUser));
});
afterEach(async() => {
@@ -734,4 +737,35 @@ describe('TaskFormComponent', () => {
unclaimBtn.nativeElement.click();
});
});
describe('Involved user task', () => {
beforeEach(() => {
component.taskId = '20259';
});
it('Should be able to save a form for a involved user', async() => {
getTaskDetailsSpy.and.returnValue(of(involvedUserTaskForm));
fixture.detectChanges();
await fixture.whenStable();
const activitFormSelector = element.querySelector('adf-form');
const saveButton = fixture.debugElement.nativeElement.querySelector('[id="adf-form-save"]');
const completeButton = fixture.debugElement.nativeElement.querySelector('[id="adf-form-complete"]');
expect(activitFormSelector).toBeDefined();
expect(saveButton.disabled).toEqual(false);
expect(completeButton.disabled).toEqual(true);
});
it('Should be able to save a form for a involved group user', async() => {
getTaskDetailsSpy.and.returnValue(of(involvedGroupTaskForm));
fixture.detectChanges();
await fixture.whenStable();
const activitFormSelector = element.querySelector('adf-form');
const saveButton = fixture.debugElement.nativeElement.querySelector('[id="adf-form-save"]');
const completeButton = fixture.debugElement.nativeElement.querySelector('[id="adf-form-complete"]');
expect(activitFormSelector).toBeDefined();
expect(saveButton.disabled).toEqual(false);
expect(completeButton.disabled).toEqual(true);
});
});
});

View File

@@ -28,7 +28,7 @@ import {
} from '@alfresco/adf-core';
import { TaskDetailsModel } from '../../models/task-details.model';
import { TaskListService } from '../../services/tasklist.service';
import { UserRepresentation, LightUserRepresentation } from '@alfresco/js-api';
import { UserRepresentation, LightGroupRepresentation, LightUserRepresentation } from '@alfresco/js-api';
import { Observable } from 'rxjs';
import { ProcessFormRenderingService } from '../../../form/process-form-rendering.service';
@@ -297,6 +297,16 @@ export class TaskFormComponent implements OnInit {
);
isInvolved = !!userInvolved;
}
if (this.taskDetails.involvedGroups?.length && this.currentLoggedUser.groups?.length && !isInvolved) {
const userGroup = this.taskDetails.involvedGroups.find(
(involvedGroup: LightGroupRepresentation) =>
this.currentLoggedUser.groups.find(
group => group.name === involvedGroup.name.toLocaleLowerCase() || group.id === involvedGroup.id
)
);
isInvolved = !!userGroup;
}
return isInvolved;
}
@@ -309,7 +319,7 @@ export class TaskFormComponent implements OnInit {
}
isSaveButtonVisible(): boolean {
return this.showFormSaveButton && (!this.canInitiatorComplete() || this.isAssignedToMe());
return this.showFormSaveButton && (!this.canInitiatorComplete() || this.isAssignedToMe() || this.isCurrentUserInvolved());
}
canCompleteNoFormTask(): boolean {