Skip to content

Commit 0cd9e3b

Browse files
WelschChristophertijsrademakers
authored andcommitted
added a deleted() check if an IdentityLink is already deleted or not. (#4043)
1 parent 882c323 commit 0cd9e3b

File tree

3 files changed

+75
-5
lines changed

3 files changed

+75
-5
lines changed

modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/task/CmmnTaskServiceTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.flowable.task.api.Task;
5252
import org.flowable.task.api.TaskQuery;
5353
import org.flowable.task.api.history.HistoricTaskInstance;
54+
import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
5455
import org.junit.Test;
5556

5657
/**
@@ -376,6 +377,39 @@ public void testTaskCompletionBuilder() {
376377

377378
}
378379

380+
@Test
381+
public void testTaskIdentityLinkCountWithDeletionOfSameLink() {
382+
Task task = cmmnTaskService.createTaskBuilder().
383+
name("testName").
384+
identityLinks(getDefaultIdentityLinks()).
385+
create();
386+
387+
TaskEntityImpl updatedParentTask = (TaskEntityImpl) cmmnTaskService.createTaskQuery().taskId(task.getId()).singleResult();
388+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(2);
389+
390+
cmmnEngineConfiguration.getCommandExecutor().execute(
391+
commandContext -> {
392+
cmmnTaskService.deleteUserIdentityLink(task.getId(), "testUserFromBuilder", IdentityLinkType.CANDIDATE);
393+
cmmnTaskService.deleteUserIdentityLink(task.getId(), "testUserFromBuilder", IdentityLinkType.CANDIDATE);
394+
return null;
395+
}
396+
);
397+
updatedParentTask = (TaskEntityImpl) cmmnTaskService.createTaskQuery().taskId(task.getId()).singleResult();
398+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(1);
399+
400+
cmmnEngineConfiguration.getCommandExecutor().execute(
401+
commandContext -> {
402+
cmmnTaskService.deleteGroupIdentityLink(task.getId(), "testGroupFromBuilder", IdentityLinkType.CANDIDATE);
403+
cmmnTaskService.deleteGroupIdentityLink(task.getId(), "testGroupFromBuilder", IdentityLinkType.CANDIDATE);
404+
return null;
405+
}
406+
);
407+
updatedParentTask = (TaskEntityImpl) cmmnTaskService.createTaskQuery().taskId(task.getId()).singleResult();
408+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(0);
409+
410+
cmmnTaskService.deleteTask(task.getId(),true);
411+
412+
}
379413
private static Set<IdentityLinkEntityImpl> getDefaultIdentityLinks() {
380414
IdentityLinkEntityImpl identityLinkEntityCandidateUser = new IdentityLinkEntityImpl();
381415
identityLinkEntityCandidateUser.setUserId("testUserFromBuilder");

modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskServiceTest.java

+33
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.flowable.task.service.TaskPostProcessor;
7373
import org.flowable.task.service.TaskServiceConfiguration;
7474
import org.flowable.task.service.impl.persistence.CountingTaskEntity;
75+
import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
7576
import org.flowable.variable.api.history.HistoricVariableInstance;
7677
import org.flowable.variable.api.persistence.entity.VariableInstance;
7778
import org.junit.jupiter.api.AfterEach;
@@ -152,6 +153,38 @@ public void testBuilderCreateTaskWithParent() {
152153
}
153154
}
154155

156+
@Test
157+
public void testTaskIdentityLinkCountWithDeletionOfSameLink() {
158+
task = taskService.createTaskBuilder().
159+
name("testName").
160+
identityLinks(getDefaultIdentityLinks()).
161+
create();
162+
163+
TaskEntityImpl updatedParentTask = (TaskEntityImpl) taskService.createTaskQuery().taskId(task.getId()).singleResult();
164+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(2);
165+
166+
processEngineConfiguration.getCommandExecutor().execute(
167+
commandContext -> {
168+
taskService.deleteUserIdentityLink(task.getId(), "testUserBuilder", IdentityLinkType.CANDIDATE);
169+
taskService.deleteUserIdentityLink(task.getId(), "testUserBuilder", IdentityLinkType.CANDIDATE);
170+
return null;
171+
}
172+
);
173+
updatedParentTask = (TaskEntityImpl) taskService.createTaskQuery().taskId(task.getId()).singleResult();
174+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(1);
175+
176+
processEngineConfiguration.getCommandExecutor().execute(
177+
commandContext -> {
178+
taskService.deleteGroupIdentityLink(task.getId(), "testGroupBuilder", IdentityLinkType.CANDIDATE);
179+
taskService.deleteGroupIdentityLink(task.getId(), "testGroupBuilder", IdentityLinkType.CANDIDATE);
180+
return null;
181+
}
182+
);
183+
updatedParentTask = (TaskEntityImpl) taskService.createTaskQuery().taskId(task.getId()).singleResult();
184+
assertThat(updatedParentTask.getIdentityLinkCount()).isEqualTo(0);
185+
186+
}
187+
155188
@Test
156189
public void testCreateTaskWithOwnerAssigneeAndIdentityLinks() {
157190
task = taskService.createTaskBuilder().

modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/impl/persistence/entity/IdentityLinkEntityManagerImpl.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,10 @@ public List<IdentityLinkEntity> deleteTaskIdentityLink(String taskId, List<Ident
250250

251251
List<IdentityLinkEntity> removedIdentityLinkEntities = new ArrayList<>();
252252
for (IdentityLinkEntity identityLink : identityLinks) {
253-
delete(identityLink);
254-
removedIdentityLinkEntities.add(identityLink);
253+
if (!identityLink.isDeleted()) {
254+
delete(identityLink);
255+
removedIdentityLinkEntities.add(identityLink);
256+
}
255257
}
256258

257259
if (currentIdentityLinks != null) { // The currentIdentityLinks might contain identity links that are in the cache, but not yet in the db
@@ -261,9 +263,10 @@ public List<IdentityLinkEntity> deleteTaskIdentityLink(String taskId, List<Ident
261263
if ((userId != null && userId.equals(identityLinkEntity.getUserId()))
262264
|| (groupId != null && groupId.equals(identityLinkEntity.getGroupId()))) {
263265

264-
delete(identityLinkEntity);
265-
removedIdentityLinkEntities.add(identityLinkEntity);
266-
266+
if (!identityLinkEntity.isDeleted()) {
267+
delete(identityLinkEntity);
268+
removedIdentityLinkEntities.add(identityLinkEntity);
269+
}
267270
}
268271
}
269272
}

0 commit comments

Comments
 (0)