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()
|
||||
.createTaskQuery()
|
||||
.classificationIdIn(oldClassification.getId())
|
||||
// .classificationCategoryIn(oldClassification.getCategory())
|
||||
.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<>();
|
||||
taskSumamries.stream().forEach(ts -> taskIds.add(ts.getTaskId()));
|
||||
taskMapper.updateClassificationCategoryOnChange(taskIds, classificationImpl.getCategory());
|
||||
|
|
|
@ -9,7 +9,6 @@ import java.util.Set;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import pro.taskana.TaskSummary;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.TaskanaRole;
|
||||
import pro.taskana.Workbasket;
|
||||
|
@ -29,6 +28,7 @@ import pro.taskana.exceptions.WorkbasketNotFoundException;
|
|||
import pro.taskana.impl.util.IdGenerator;
|
||||
import pro.taskana.impl.util.LoggerUtils;
|
||||
import pro.taskana.mappings.DistributionTargetMapper;
|
||||
import pro.taskana.mappings.TaskMapper;
|
||||
import pro.taskana.mappings.WorkbasketAccessMapper;
|
||||
import pro.taskana.mappings.WorkbasketMapper;
|
||||
import pro.taskana.security.CurrentUserContext;
|
||||
|
@ -691,11 +691,13 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
|||
|
||||
// check if the workbasket does exist and is empty (Task)
|
||||
Workbasket wb = this.getWorkbasket(workbasketId);
|
||||
List<TaskSummary> taskUsages = taskanaEngine.getTaskService()
|
||||
.createTaskQuery()
|
||||
.workbasketIdIn(wb.getId())
|
||||
.list();
|
||||
if (taskUsages == null || taskUsages.size() > 0) {
|
||||
|
||||
long numTasksInWorkbasket = taskanaEngine.getSqlSession()
|
||||
.getMapper(TaskMapper.class)
|
||||
.countTasksInWorkbasket(workbasketId)
|
||||
.longValue();
|
||||
|
||||
if (numTasksInWorkbasket > 0) {
|
||||
throw new WorkbasketInUseException(
|
||||
"Workbasket is used on tasks and can´t be deleted. WorkbasketId=" + workbasketId);
|
||||
}
|
||||
|
|
|
@ -285,4 +285,10 @@ public interface TaskMapper {
|
|||
@Result(property = "taskId", column = "ID")})
|
||||
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.fail;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
@ -12,8 +14,11 @@ import org.junit.runner.RunWith;
|
|||
import acceptance.AbstractAccTest;
|
||||
import pro.taskana.Workbasket;
|
||||
import pro.taskana.WorkbasketService;
|
||||
import pro.taskana.WorkbasketType;
|
||||
import pro.taskana.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.exceptions.InvalidWorkbasketException;
|
||||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
||||
import pro.taskana.exceptions.WorkbasketInUseException;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.security.JAASRunner;
|
||||
|
@ -126,4 +131,28 @@ public class DeleteWorkbasketAccTest extends AbstractAccTest {
|
|||
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.List;
|
||||
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
@ -41,6 +42,7 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
|||
import pro.taskana.exceptions.WorkbasketInUseException;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.mappings.DistributionTargetMapper;
|
||||
import pro.taskana.mappings.TaskMapper;
|
||||
import pro.taskana.mappings.WorkbasketAccessMapper;
|
||||
import pro.taskana.mappings.WorkbasketMapper;
|
||||
|
||||
|
@ -59,6 +61,12 @@ public class WorkbasketServiceImplTest {
|
|||
@Mock
|
||||
private WorkbasketMapper workbasketMapperMock;
|
||||
|
||||
@Mock
|
||||
private TaskMapper taskMapperMock;
|
||||
|
||||
@Mock
|
||||
private SqlSession sqlSessionMock;
|
||||
|
||||
@Mock
|
||||
private DistributionTargetMapper distributionTargetMapperMock;
|
||||
|
||||
|
@ -501,10 +509,10 @@ public class WorkbasketServiceImplTest {
|
|||
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
||||
List<TaskSummary> usages = Arrays.asList(new TaskSummaryImpl(), new TaskSummaryImpl());
|
||||
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
||||
doReturn(taskServiceMock).when(taskanaEngineImplMock).getTaskService();
|
||||
doReturn(taskQueryMock).when(taskServiceMock).createTaskQuery();
|
||||
doReturn(taskQueryMock).when(taskQueryMock).workbasketIdIn(wb.getId());
|
||||
doReturn(usages).when(taskQueryMock).list();
|
||||
|
||||
doReturn(sqlSessionMock).when(taskanaEngineImplMock).getSqlSession();
|
||||
doReturn(taskMapperMock).when(sqlSessionMock).getMapper(TaskMapper.class);
|
||||
doReturn(new Long(1)).when(taskMapperMock).countTasksInWorkbasket(any());
|
||||
|
||||
try {
|
||||
cutSpy.deleteWorkbasket(wb.getId());
|
||||
|
@ -528,19 +536,18 @@ public class WorkbasketServiceImplTest {
|
|||
throws NotAuthorizedException, WorkbasketInUseException, InvalidArgumentException, WorkbasketNotFoundException {
|
||||
Workbasket wb = createTestWorkbasket("WBI:0", "wb-key");
|
||||
doReturn(wb).when(cutSpy).getWorkbasket(wb.getId());
|
||||
doReturn(taskServiceMock).when(taskanaEngineImplMock).getTaskService();
|
||||
doReturn(taskQueryMock).when(taskServiceMock).createTaskQuery();
|
||||
doReturn(taskQueryMock).when(taskQueryMock).workbasketIdIn(wb.getId());
|
||||
doReturn(new ArrayList<>()).when(taskQueryMock).list();
|
||||
doReturn(sqlSessionMock).when(taskanaEngineImplMock).getSqlSession();
|
||||
doReturn(taskMapperMock).when(sqlSessionMock).getMapper(TaskMapper.class);
|
||||
doReturn(new Long(0)).when(taskMapperMock).countTasksInWorkbasket(any());
|
||||
|
||||
cutSpy.deleteWorkbasket(wb.getId());
|
||||
|
||||
verify(taskanaEngineImplMock, times(1)).openConnection();
|
||||
verify(cutSpy, times(1)).getWorkbasket(wb.getId());
|
||||
verify(taskanaEngineImplMock, times(1)).getTaskService();
|
||||
verify(taskServiceMock, times(1)).createTaskQuery();
|
||||
verify(taskQueryMock, times(1)).workbasketIdIn(wb.getId());
|
||||
verify(taskQueryMock, times(1)).list();
|
||||
verify(taskanaEngineImplMock, times(1)).getSqlSession();
|
||||
verify(sqlSessionMock, times(1)).getMapper(TaskMapper.class);
|
||||
verify(taskMapperMock, times(1)).countTasksInWorkbasket(any());
|
||||
|
||||
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsBySourceId(wb.getId());
|
||||
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsByTargetId(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.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.impl.BulkOperationResults;
|
||||
|
@ -26,6 +27,7 @@ public class JobScheduler {
|
|||
private TaskanaEngine taskanaEngine;
|
||||
|
||||
@Scheduled(fixedRate = 60000)
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void triggerJobs() {
|
||||
JobRunner runner = new JobRunner(taskanaEngine);
|
||||
LOGGER.info("Running Jobs");
|
||||
|
|
Loading…
Reference in New Issue