From 9766a08e8bb03f5f25abf48468b7319f6daf5dbd Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 20 Apr 2015 15:50:13 +0200 Subject: [PATCH] OO-1511: remove relation to assessment mode if a business group is removed from a course, add unit tests --- .../assessment/AssessmentModeManager.java | 7 + .../manager/AssessmentModeManagerImpl.java | 13 +- .../manager/BusinessGroupRelationDAO.java | 4 + .../manager/AssessmentModeManagerTest.java | 139 ++++++++++++++++++ 4 files changed, 161 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java index b7dcc657f38..d9df8ceb9c8 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java +++ b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java @@ -80,6 +80,13 @@ public interface AssessmentModeManager { * @param entry */ public void delete(RepositoryEntryRef entry); + + /** + * Delete the relations between assessment mode and group for the specified business group and course. + * @param businessGroup + * @param entry + */ + public void delete(BusinessGroupRef businessGroup, RepositoryEntryRef entry); public AssessmentMode getAssessmentModeById(Long key); diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java index 5bb36c9be9c..1e5b7ba890e 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java @@ -410,10 +410,19 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager { } @Override - public void deleteAssessmentModesToGroup(BusinessGroupRef group) { + public void deleteAssessmentModesToGroup(BusinessGroupRef businessGroup) { String q = "delete from courseassessmentmodetogroup as modegrrel where modegrrel.businessGroup.key=:groupKey"; dbInstance.getCurrentEntityManager().createQuery(q) - .setParameter("groupKey", group.getKey()) + .setParameter("groupKey", businessGroup.getKey()) + .executeUpdate(); + } + + @Override + public void delete(BusinessGroupRef businessGroup, RepositoryEntryRef entry) { + String q = "delete from courseassessmentmodetogroup as modegrrel where modegrrel.businessGroup.key=:groupKey and modegrrel.assessmentMode.key in (select amode.key from courseassessmentmode amode where amode.repositoryEntry.key=:repoKey)"; + dbInstance.getCurrentEntityManager().createQuery(q) + .setParameter("groupKey", businessGroup.getKey()) + .setParameter("repoKey", entry.getKey()) .executeUpdate(); } diff --git a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java index 3bc0fd28055..00df8335e39 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java @@ -39,6 +39,7 @@ import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.id.Identity; import org.olat.core.util.StringHelper; +import org.olat.course.assessment.AssessmentModeManager; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupImpl; import org.olat.group.BusinessGroupRef; @@ -64,6 +65,8 @@ public class BusinessGroupRelationDAO { @Autowired private GroupDAO groupDao; @Autowired + private AssessmentModeManager assessmentModeMgr; + @Autowired private RepositoryEntryRelationDAO repositoryEntryRelationDao; public void addRelationToResource(BusinessGroup group, RepositoryEntry re) { @@ -267,6 +270,7 @@ public class BusinessGroupRelationDAO { } public void deleteRelation(BusinessGroup group, RepositoryEntryRef entry) { + assessmentModeMgr.delete(group, entry); repositoryEntryRelationDao.removeRelation(group.getBaseGroup(), entry); } diff --git a/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java b/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java index b25e62cae21..2b7b7e69ff9 100644 --- a/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java +++ b/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java @@ -696,6 +696,145 @@ public class AssessmentModeManagerTest extends OlatTestCase { boolean notAllowed4 = assessmentModeMgr.isIpAllowed(ipList, "212.203.203.64"); Assert.assertFalse(notAllowed4); } + + @Test + public void removeBusinessGroupFromRepositoryEntry() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-4"); + Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-5"); + Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-6"); + BusinessGroup businessGroup1 = businessGroupService.createBusinessGroup(author, "as-mode-7", "", null, null, null, null, false, false, entry); + BusinessGroup businessGroup2 = businessGroupService.createBusinessGroup(author, "as-mode-8", "", null, null, null, null, false, false, entry); + businessGroupRelationDao.addRole(participant1, businessGroup1, GroupRoles.participant.name()); + businessGroupRelationDao.addRole(participant2, businessGroup2, GroupRoles.participant.name()); + + AssessmentMode mode = createMinimalAssessmentmode(entry); + mode.setTargetAudience(AssessmentMode.Target.groups); + mode.setApplySettingsForCoach(false); + mode = assessmentModeMgr.persist(mode); + + AssessmentModeToGroup modeToGroup1 = assessmentModeMgr.createAssessmentModeToGroup(mode, businessGroup1); + AssessmentModeToGroup modeToGroup2 = assessmentModeMgr.createAssessmentModeToGroup(mode, businessGroup2); + mode.getGroups().add(modeToGroup1); + mode.getGroups().add(modeToGroup2); + mode = assessmentModeMgr.merge(mode, true); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(mode); + + //check participant 1 + List<AssessmentMode> currentModes1 = assessmentModeMgr.getAssessmentModeFor(participant1); + Assert.assertNotNull(currentModes1); + Assert.assertEquals(1, currentModes1.size()); + Assert.assertTrue(currentModes1.contains(mode)); + //check participant 2 + List<AssessmentMode> currentModes2 = assessmentModeMgr.getAssessmentModeFor(participant2); + Assert.assertNotNull(currentModes2); + Assert.assertEquals(1, currentModes2.size()); + Assert.assertTrue(currentModes2.contains(mode)); + + //remove business group 1 + businessGroupRelationDao.deleteRelation(businessGroup1, entry); + dbInstance.commitAndCloseSession(); + + //check participant 1 + List<AssessmentMode> afterDeleteModes1 = assessmentModeMgr.getAssessmentModeFor(participant1); + Assert.assertNotNull(afterDeleteModes1); + Assert.assertEquals(0, afterDeleteModes1.size()); + //check participant 2 + List<AssessmentMode> afterDeleteModes2 = assessmentModeMgr.getAssessmentModeFor(participant2); + Assert.assertNotNull(afterDeleteModes2); + Assert.assertEquals(1, afterDeleteModes2.size()); + Assert.assertTrue(afterDeleteModes2.contains(mode)); + } + + @Test + public void deleteBusinessGroupFromRepositoryEntry() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-9"); + Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-10"); + Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-11"); + BusinessGroup businessGroup1 = businessGroupService.createBusinessGroup(author, "as-mode-12", "", null, null, null, null, false, false, entry); + BusinessGroup businessGroup2 = businessGroupService.createBusinessGroup(author, "as-mode-13", "", null, null, null, null, false, false, entry); + businessGroupRelationDao.addRole(participant1, businessGroup1, GroupRoles.participant.name()); + businessGroupRelationDao.addRole(participant2, businessGroup2, GroupRoles.participant.name()); + + AssessmentMode mode = createMinimalAssessmentmode(entry); + mode.setTargetAudience(AssessmentMode.Target.groups); + mode.setApplySettingsForCoach(false); + mode = assessmentModeMgr.persist(mode); + + AssessmentModeToGroup modeToGroup1 = assessmentModeMgr.createAssessmentModeToGroup(mode, businessGroup1); + AssessmentModeToGroup modeToGroup2 = assessmentModeMgr.createAssessmentModeToGroup(mode, businessGroup2); + mode.getGroups().add(modeToGroup1); + mode.getGroups().add(modeToGroup2); + mode = assessmentModeMgr.merge(mode, true); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(mode); + + //check participant 1 + List<AssessmentMode> currentModes1 = assessmentModeMgr.getAssessmentModeFor(participant1); + Assert.assertNotNull(currentModes1); + Assert.assertEquals(1, currentModes1.size()); + Assert.assertTrue(currentModes1.contains(mode)); + //check participant 2 + List<AssessmentMode> currentModes2 = assessmentModeMgr.getAssessmentModeFor(participant2); + Assert.assertNotNull(currentModes2); + Assert.assertEquals(1, currentModes2.size()); + Assert.assertTrue(currentModes2.contains(mode)); + + //remove business group 1 + businessGroupService.deleteBusinessGroup(businessGroup2); + dbInstance.commitAndCloseSession(); + + //check participant 1 + List<AssessmentMode> afterDeleteModes1 = assessmentModeMgr.getAssessmentModeFor(participant1); + Assert.assertNotNull(afterDeleteModes1); + Assert.assertEquals(1, afterDeleteModes1.size()); + Assert.assertTrue(afterDeleteModes1.contains(mode)); + //check participant 2 + List<AssessmentMode> afterDeleteModes2 = assessmentModeMgr.getAssessmentModeFor(participant2); + Assert.assertNotNull(afterDeleteModes2); + Assert.assertEquals(0, afterDeleteModes2.size()); + } + + @Test + public void deleteAreaFromRepositoryEntry() { + //prepare the setup + Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-14"); + Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-15"); + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + AssessmentMode mode = createMinimalAssessmentmode(entry); + mode.setTargetAudience(AssessmentMode.Target.groups); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(mode); + + BusinessGroup businessGroupForArea = businessGroupService.createBusinessGroup(author, "as_mode_1", "", null, null, null, null, false, false, null); + businessGroupRelationDao.addRole(participant, businessGroupForArea, GroupRoles.participant.name()); + BGArea area = areaMgr.createAndPersistBGArea("little area", "My little secret area", entry.getOlatResource()); + areaMgr.addBGToBGArea(businessGroupForArea, area); + dbInstance.commitAndCloseSession(); + AssessmentModeToArea modeToArea = assessmentModeMgr.createAssessmentModeToArea(mode, area); + mode.getAreas().add(modeToArea); + mode = assessmentModeMgr.merge(mode, true); + dbInstance.commitAndCloseSession(); + + //check the participant modes + List<AssessmentMode> currentModes = assessmentModeMgr.getAssessmentModeFor(participant); + Assert.assertNotNull(currentModes); + Assert.assertEquals(1, currentModes.size()); + Assert.assertTrue(currentModes.contains(mode)); + + //delete + areaMgr.deleteBGArea(area); + dbInstance.commitAndCloseSession(); + + //check the participant modes after deleting the area + List<AssessmentMode> afterDeleteModes = assessmentModeMgr.getAssessmentModeFor(participant); + Assert.assertNotNull(afterDeleteModes); + Assert.assertEquals(0, afterDeleteModes.size()); + } /** * Create a minimal assessment mode which start one hour before now -- GitLab