TSK-401 After creating a workbasket, the user is not able to delete it.
This commit is contained in:
parent
02fc6b3cd3
commit
32449a4d52
|
|
@ -143,9 +143,12 @@ public class ClassificationServiceImpl implements ClassificationService {
|
||||||
List<TaskSummary> taskSumamries = taskanaEngine.getTaskService()
|
List<TaskSummary> taskSumamries = taskanaEngine.getTaskService()
|
||||||
.createTaskQuery()
|
.createTaskQuery()
|
||||||
.classificationIdIn(oldClassification.getId())
|
.classificationIdIn(oldClassification.getId())
|
||||||
// .classificationCategoryIn(oldClassification.getCategory())
|
|
||||||
.list();
|
.list();
|
||||||
if (!taskSumamries.isEmpty()) {
|
|
||||||
|
boolean categoryChanged = !(oldClassification.getCategory() == null
|
||||||
|
? classification.getCategory() == null
|
||||||
|
: oldClassification.getCategory().equals(classification.getCategory()));
|
||||||
|
if (!taskSumamries.isEmpty() && categoryChanged) {
|
||||||
List<String> taskIds = new ArrayList<>();
|
List<String> taskIds = new ArrayList<>();
|
||||||
taskSumamries.stream().forEach(ts -> taskIds.add(ts.getTaskId()));
|
taskSumamries.stream().forEach(ts -> taskIds.add(ts.getTaskId()));
|
||||||
taskMapper.updateClassificationCategoryOnChange(taskIds, classificationImpl.getCategory());
|
taskMapper.updateClassificationCategoryOnChange(taskIds, classificationImpl.getCategory());
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import java.util.Set;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import pro.taskana.TaskSummary;
|
|
||||||
import pro.taskana.TaskanaEngine;
|
import pro.taskana.TaskanaEngine;
|
||||||
import pro.taskana.TaskanaRole;
|
import pro.taskana.TaskanaRole;
|
||||||
import pro.taskana.Workbasket;
|
import pro.taskana.Workbasket;
|
||||||
|
|
@ -29,6 +28,7 @@ import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||||
import pro.taskana.impl.util.IdGenerator;
|
import pro.taskana.impl.util.IdGenerator;
|
||||||
import pro.taskana.impl.util.LoggerUtils;
|
import pro.taskana.impl.util.LoggerUtils;
|
||||||
import pro.taskana.mappings.DistributionTargetMapper;
|
import pro.taskana.mappings.DistributionTargetMapper;
|
||||||
|
import pro.taskana.mappings.TaskMapper;
|
||||||
import pro.taskana.mappings.WorkbasketAccessMapper;
|
import pro.taskana.mappings.WorkbasketAccessMapper;
|
||||||
import pro.taskana.mappings.WorkbasketMapper;
|
import pro.taskana.mappings.WorkbasketMapper;
|
||||||
import pro.taskana.security.CurrentUserContext;
|
import pro.taskana.security.CurrentUserContext;
|
||||||
|
|
@ -691,11 +691,13 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
|
|
||||||
// check if the workbasket does exist and is empty (Task)
|
// check if the workbasket does exist and is empty (Task)
|
||||||
Workbasket wb = this.getWorkbasket(workbasketId);
|
Workbasket wb = this.getWorkbasket(workbasketId);
|
||||||
List<TaskSummary> taskUsages = taskanaEngine.getTaskService()
|
|
||||||
.createTaskQuery()
|
long numTasksInWorkbasket = taskanaEngine.getSqlSession()
|
||||||
.workbasketIdIn(wb.getId())
|
.getMapper(TaskMapper.class)
|
||||||
.list();
|
.countTasksInWorkbasket(workbasketId)
|
||||||
if (taskUsages == null || taskUsages.size() > 0) {
|
.longValue();
|
||||||
|
|
||||||
|
if (numTasksInWorkbasket > 0) {
|
||||||
throw new WorkbasketInUseException(
|
throw new WorkbasketInUseException(
|
||||||
"Workbasket is used on tasks and can´t be deleted. WorkbasketId=" + workbasketId);
|
"Workbasket is used on tasks and can´t be deleted. WorkbasketId=" + workbasketId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -285,4 +285,10 @@ public interface TaskMapper {
|
||||||
@Result(property = "taskId", column = "ID")})
|
@Result(property = "taskId", column = "ID")})
|
||||||
List<String> filterTaskIdsForNotCompleted(@Param("taskIds") List<String> taskIds);
|
List<String> filterTaskIdsForNotCompleted(@Param("taskIds") List<String> taskIds);
|
||||||
|
|
||||||
|
@Select("<script>SELECT COUNT(ID) FROM TASK WHERE "
|
||||||
|
+ "WORKBASKET_ID = #{workbasketId} "
|
||||||
|
+ "<if test=\"_databaseId == 'db2'\">with UR </if> "
|
||||||
|
+ "</script>")
|
||||||
|
Long countTasksInWorkbasket(@Param("workbasketId") String workbasketId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
@ -12,8 +14,11 @@ import org.junit.runner.RunWith;
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
import pro.taskana.Workbasket;
|
import pro.taskana.Workbasket;
|
||||||
import pro.taskana.WorkbasketService;
|
import pro.taskana.WorkbasketService;
|
||||||
|
import pro.taskana.WorkbasketType;
|
||||||
import pro.taskana.exceptions.InvalidArgumentException;
|
import pro.taskana.exceptions.InvalidArgumentException;
|
||||||
|
import pro.taskana.exceptions.InvalidWorkbasketException;
|
||||||
import pro.taskana.exceptions.NotAuthorizedException;
|
import pro.taskana.exceptions.NotAuthorizedException;
|
||||||
|
import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
||||||
import pro.taskana.exceptions.WorkbasketInUseException;
|
import pro.taskana.exceptions.WorkbasketInUseException;
|
||||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||||
import pro.taskana.security.JAASRunner;
|
import pro.taskana.security.JAASRunner;
|
||||||
|
|
@ -126,4 +131,28 @@ public class DeleteWorkbasketAccTest extends AbstractAccTest {
|
||||||
workbasketService.deleteWorkbasket(wb.getId());
|
workbasketService.deleteWorkbasket(wb.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@WithAccessId(
|
||||||
|
userName = "user_1_2",
|
||||||
|
groupNames = {"businessadmin"})
|
||||||
|
@Test
|
||||||
|
public void testCreateAndDeleteWorkbasket()
|
||||||
|
throws SQLException, NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException,
|
||||||
|
InvalidWorkbasketException, WorkbasketAlreadyExistException {
|
||||||
|
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
int before = workbasketService.createWorkbasketQuery().domainIn("DOMAIN_A").list().size();
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketService.newWorkbasket("NT1234", "DOMAIN_A");
|
||||||
|
workbasket.setName("TheUltimate");
|
||||||
|
workbasket.setType(WorkbasketType.GROUP);
|
||||||
|
workbasket.setOrgLevel1("company");
|
||||||
|
workbasket = workbasketService.createWorkbasket(workbasket);
|
||||||
|
|
||||||
|
try {
|
||||||
|
workbasketService.deleteWorkbasket(workbasket.getId());
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
@ -41,6 +42,7 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
||||||
import pro.taskana.exceptions.WorkbasketInUseException;
|
import pro.taskana.exceptions.WorkbasketInUseException;
|
||||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||||
import pro.taskana.mappings.DistributionTargetMapper;
|
import pro.taskana.mappings.DistributionTargetMapper;
|
||||||
|
import pro.taskana.mappings.TaskMapper;
|
||||||
import pro.taskana.mappings.WorkbasketAccessMapper;
|
import pro.taskana.mappings.WorkbasketAccessMapper;
|
||||||
import pro.taskana.mappings.WorkbasketMapper;
|
import pro.taskana.mappings.WorkbasketMapper;
|
||||||
|
|
||||||
|
|
@ -59,6 +61,12 @@ public class WorkbasketServiceImplTest {
|
||||||
@Mock
|
@Mock
|
||||||
private WorkbasketMapper workbasketMapperMock;
|
private WorkbasketMapper workbasketMapperMock;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private TaskMapper taskMapperMock;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private SqlSession sqlSessionMock;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private DistributionTargetMapper distributionTargetMapperMock;
|
private DistributionTargetMapper distributionTargetMapperMock;
|
||||||
|
|
||||||
|
|
@ -501,10 +509,10 @@ public class WorkbasketServiceImplTest {
|
||||||
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
||||||
List<TaskSummary> usages = Arrays.asList(new TaskSummaryImpl(), new TaskSummaryImpl());
|
List<TaskSummary> usages = Arrays.asList(new TaskSummaryImpl(), new TaskSummaryImpl());
|
||||||
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
||||||
doReturn(taskServiceMock).when(taskanaEngineImplMock).getTaskService();
|
|
||||||
doReturn(taskQueryMock).when(taskServiceMock).createTaskQuery();
|
doReturn(sqlSessionMock).when(taskanaEngineImplMock).getSqlSession();
|
||||||
doReturn(taskQueryMock).when(taskQueryMock).workbasketIdIn(wb.getId());
|
doReturn(taskMapperMock).when(sqlSessionMock).getMapper(TaskMapper.class);
|
||||||
doReturn(usages).when(taskQueryMock).list();
|
doReturn(new Long(1)).when(taskMapperMock).countTasksInWorkbasket(any());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
cutSpy.deleteWorkbasket(wb.getId());
|
cutSpy.deleteWorkbasket(wb.getId());
|
||||||
|
|
@ -528,19 +536,18 @@ public class WorkbasketServiceImplTest {
|
||||||
throws NotAuthorizedException, WorkbasketInUseException, InvalidArgumentException, WorkbasketNotFoundException {
|
throws NotAuthorizedException, WorkbasketInUseException, InvalidArgumentException, WorkbasketNotFoundException {
|
||||||
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
||||||
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
||||||
doReturn(taskServiceMock).when(taskanaEngineImplMock).getTaskService();
|
doReturn(sqlSessionMock).when(taskanaEngineImplMock).getSqlSession();
|
||||||
doReturn(taskQueryMock).when(taskServiceMock).createTaskQuery();
|
doReturn(taskMapperMock).when(sqlSessionMock).getMapper(TaskMapper.class);
|
||||||
doReturn(taskQueryMock).when(taskQueryMock).workbasketIdIn(wb.getId());
|
doReturn(new Long(0)).when(taskMapperMock).countTasksInWorkbasket(any());
|
||||||
doReturn(new ArrayList<>()).when(taskQueryMock).list();
|
|
||||||
|
|
||||||
cutSpy.deleteWorkbasket(wb.getId());
|
cutSpy.deleteWorkbasket(wb.getId());
|
||||||
|
|
||||||
verify(taskanaEngineImplMock, times(1)).openConnection();
|
verify(taskanaEngineImplMock, times(1)).openConnection();
|
||||||
verify(cutSpy, times(1)).getWorkbasket(wb.getId());
|
verify(cutSpy, times(1)).getWorkbasket(wb.getId());
|
||||||
verify(taskanaEngineImplMock, times(1)).getTaskService();
|
verify(taskanaEngineImplMock, times(1)).getSqlSession();
|
||||||
verify(taskServiceMock, times(1)).createTaskQuery();
|
verify(sqlSessionMock, times(1)).getMapper(TaskMapper.class);
|
||||||
verify(taskQueryMock, times(1)).workbasketIdIn(wb.getId());
|
verify(taskMapperMock, times(1)).countTasksInWorkbasket(any());
|
||||||
verify(taskQueryMock, times(1)).list();
|
|
||||||
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsBySourceId(wb.getId());
|
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsBySourceId(wb.getId());
|
||||||
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsByTargetId(wb.getId());
|
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsByTargetId(wb.getId());
|
||||||
verify(workbasketAccessMapperMock, times(1)).deleteAllAccessItemsForWorkbasketId(wb.getId());
|
verify(workbasketAccessMapperMock, times(1)).deleteAllAccessItemsForWorkbasketId(wb.getId());
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngine;
|
import pro.taskana.TaskanaEngine;
|
||||||
import pro.taskana.impl.BulkOperationResults;
|
import pro.taskana.impl.BulkOperationResults;
|
||||||
|
|
@ -26,6 +27,7 @@ public class JobScheduler {
|
||||||
private TaskanaEngine taskanaEngine;
|
private TaskanaEngine taskanaEngine;
|
||||||
|
|
||||||
@Scheduled(fixedRate = 60000)
|
@Scheduled(fixedRate = 60000)
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void triggerJobs() {
|
public void triggerJobs() {
|
||||||
JobRunner runner = new JobRunner(taskanaEngine);
|
JobRunner runner = new JobRunner(taskanaEngine);
|
||||||
LOGGER.info("Running Jobs");
|
LOGGER.info("Running Jobs");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue