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 d5ec967011298193ffed8b3c51387ca877a72599..5ab9c6ba2bb220e9dc0b46ea9e91585b15a46b9a 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 @@ -737,24 +737,30 @@ public class GTAManagerImpl implements GTAManager, DeletableGroupData { .createQuery(deleteTasks) .setParameter("groupKey", group.getKey()) .executeUpdate(); - return true; - + return true; } @Override public int deleteTaskList(RepositoryEntryRef entry, GTACourseNode cNode) { TaskList taskList = getTaskList(entry, cNode); - int numOfDeletedObjects; + int numOfDeletedObjects = 0; if(taskList != null) { + StringBuilder sb = new StringBuilder(128); + sb.append("delete from gtataskrevisiondate as taskrev where taskrev.task.key in (") + .append(" select task.key from gtatask as task where task.taskList.key=:taskListKey)"); + numOfDeletedObjects += dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("taskListKey", taskList.getKey()) + .executeUpdate(); + + String deleteTasks = "delete from gtatask as task where task.taskList.key=:taskListKey"; - int numOfTasks = dbInstance.getCurrentEntityManager().createQuery(deleteTasks) + numOfDeletedObjects += dbInstance.getCurrentEntityManager().createQuery(deleteTasks) .setParameter("taskListKey", taskList.getKey()) .executeUpdate(); dbInstance.getCurrentEntityManager().remove(taskList); - numOfDeletedObjects = numOfTasks + 1; - } else { - numOfDeletedObjects = 0; + numOfDeletedObjects += 1; } return numOfDeletedObjects; } 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 899b5a35b578395071a8cf75a4f0858a8f1fad34..d79e8ead914e0e7526f8fdf0866ff2d5d5939946 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 @@ -441,6 +441,46 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertEquals(0, deletedAssignedTasks.size()); } + @Test + public void deleteTaskList_withRevisionDates() { + Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-9"); + Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-10"); + BusinessGroup businessGroup = businessGroupDao.createAndPersist(coach, "gdao", "gdao-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); + 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.createAndPersistTaskRevisionDate(assignedTasks.get(0), 2, TaskProcess.correction); + 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.assertEquals(0, deletedAssignedTasks.size()); + } + /** * 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. @@ -485,13 +525,20 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertNotNull(assignedTasks1); Assert.assertEquals(1, assignedTasks1.size()); + // create a revision date + gtaManager.createAndPersistTaskRevisionDate(assignedTasks1.get(0), 2, TaskProcess.correction); + List<Task> assignedTasks2 = gtaManager.getTasks(participant, re, node2); Assert.assertNotNull(assignedTasks2); Assert.assertEquals(1, assignedTasks2.size()); + // create a revision date + gtaManager.createAndPersistTaskRevisionDate(assignedTasks2.get(0), 2, TaskProcess.correction); + dbInstance.commitAndCloseSession(); + //delete int numOfDeletedObjects = gtaManager.deleteTaskList(re, node1); - Assert.assertEquals(2, numOfDeletedObjects); + Assert.assertEquals(3, numOfDeletedObjects); dbInstance.commitAndCloseSession(); //check that there isn't any tasks in node 1 @@ -499,12 +546,22 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertNotNull(deletedAssignedTasks); Assert.assertEquals(0, deletedAssignedTasks.size()); + List<TaskRevisionDate> revisionsTask1 = gtaManager.getTaskRevisions(assignedTasks1.get(0)); + Assert.assertNotNull(revisionsTask1); + Assert.assertEquals(0, revisionsTask1.size()); + //but always in node 2 List<Task> notDeletedAssignedTasks2 = gtaManager.getTasks(participant, re, node2); Assert.assertNotNull(notDeletedAssignedTasks2); Assert.assertEquals(1, notDeletedAssignedTasks2.size()); + + List<TaskRevisionDate> revisionsTask2 = gtaManager.getTaskRevisions(notDeletedAssignedTasks2.get(0)); + Assert.assertNotNull(revisionsTask2); + Assert.assertEquals(1, revisionsTask2.size()); } + + @Test public void deleteAllTaskLists() { Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-9");