diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index 7846ebec04d761bff05a185b31e0e5f9abc8d6d4..6029e654e4828f0efbd8c6f772f1e25f85687b2e 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -798,6 +798,14 @@ public class GTAManagerImpl implements GTAManager { .setParameter("taskListKey", taskList.getKey()) .executeUpdate(); + StringBuilder taskSb = new StringBuilder(128); + taskSb.append("delete from gtataskrevision as taskrev where taskrev.task.key in (") + .append(" select task.key from gtatask as task where task.taskList.key=:taskListKey)"); + numOfDeletedObjects += dbInstance.getCurrentEntityManager() + .createQuery(taskSb.toString()) + .setParameter("taskListKey", taskList.getKey()) + .executeUpdate(); + String deleteTasks = "delete from gtatask as task where task.taskList.key=:taskListKey"; numOfDeletedObjects += dbInstance.getCurrentEntityManager().createQuery(deleteTasks) .setParameter("taskListKey", taskList.getKey()) diff --git a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java index 87da8190b411dc5419709c721e845abf06a68940..1b23e0fa3d71471ba43b62e3abb9475552a3647f 100644 --- a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java +++ b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java @@ -519,6 +519,48 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertEquals(0, deletedAssignedTasks.size()); } + + @Test + public void deleteTaskList_withRevisions() { + Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-29"); + Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-30"); + BusinessGroup businessGroup = businessGroupDao.createAndPersist(coach, "gdao", "gdao-rev-delete-desc", -1, -1, false, false, false, false, false); + businessGroupRelationDao.addRole(participant, businessGroup, GroupRole.participant.name()); + dbInstance.commit(); + RepositoryEntry re = deployGTACourse(); + GTACourseNode node = getGTACourseNode(re); + node.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.group.name()); + TaskList tasks = gtaManager.createIfNotExists(re, node); + File taskFile = new File("bg.txt"); + Assert.assertNotNull(tasks); + dbInstance.commit(); + + //select + AssignmentResponse response = gtaManager.selectTask(businessGroup, tasks, node, taskFile, participant); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(response); + + //check that there is tasks + List<Task> assignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(assignedTasks); + Assert.assertEquals(1, assignedTasks.size()); + + // create a revision date + gtaManager.updateTaskRevisionComment(assignedTasks.get(0), TaskProcess.revision, 1, "Hello", coach); + dbInstance.commitAndCloseSession(); + + //delete + int numOfDeletedObjects = gtaManager.deleteTaskList(re, node); + Assert.assertEquals(3, numOfDeletedObjects); + dbInstance.commitAndCloseSession(); + + //check that there isn't any tasks + List<Task> deletedAssignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(deletedAssignedTasks); + Assert.assertTrue(deletedAssignedTasks.isEmpty()); + } + + /** * Create 2 pseudo nodes in a course, and delete the task of the first node * and check that the task of second are always there.