From c9bed6ffc7a989d1e2661a190fdb55c8793cff92 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 29 Jan 2018 14:07:52 +0100 Subject: [PATCH] OO-3271 : start assessment mode within lead time if in manual mode --- .../assessment/manager/AssessmentModeDAO.java | 9 +- .../manager/AssessmentModeManagerTest.java | 182 ++++++++++++++++++ 2 files changed, 188 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeDAO.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeDAO.java index a4d75c41709..65dc42f3ce2 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeDAO.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeDAO.java @@ -163,7 +163,8 @@ public class AssessmentModeDAO { StringBuilder sb = new StringBuilder(); sb.append("select mode from courseassessmentmode mode where ") - .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now and mode.manualBeginEnd=false)") + .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now") + .append(" and (mode.manualBeginEnd=false or (mode.manualBeginEnd=true and mode.leadTime>0)))") .append(" or mode.statusString in ('").append(Status.leadtime.name()).append("','") .append(Status.assessment.name()).append("','").append(Status.followup.name()).append("')"); @@ -182,7 +183,8 @@ public class AssessmentModeDAO { StringBuilder sb = new StringBuilder(); sb.append("select count(mode) from courseassessmentmode mode where ") .append(" mode.repositoryEntry.key=:repoKey and (") - .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now and mode.manualBeginEnd=false)") + .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now ") + .append(" and (mode.manualBeginEnd=false or (mode.manualBeginEnd=true and mode.leadTime>0)))") .append(" or mode.statusString in ('").append(Status.leadtime.name()).append("','") .append(Status.assessment.name()).append("','").append(Status.followup.name()).append("'))"); @@ -203,7 +205,8 @@ public class AssessmentModeDAO { StringBuilder sb = new StringBuilder(); sb.append("select mode from courseassessmentmode mode where ") .append(" mode.repositoryEntry.key=:repoKey and (") - .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now and mode.manualBeginEnd=false)") + .append(" (mode.beginWithLeadTime<=:now and mode.endWithFollowupTime>=:now") + .append(" and (mode.manualBeginEnd=false or (mode.manualBeginEnd=true and mode.leadTime>0)))") .append(" or mode.statusString in ('").append(Status.leadtime.name()).append("','") .append(Status.assessment.name()).append("','").append(Status.followup.name()).append("'))"); 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 8edfd78ec94..c951bf63a46 100644 --- a/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java +++ b/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java @@ -270,6 +270,142 @@ public class AssessmentModeManagerTest extends OlatTestCase { Assert.assertTrue(currentModes.contains(mode)); } + /** + * Manual without lead time -> not in the current list + */ + @Test + public void loadCurrentAssessmentModes_manualNow() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + //manual now + AssessmentMode mode = assessmentModeMgr.createAssessmentMode(entry); + mode.setName("Assessment to load"); + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.HOUR_OF_DAY, -1); + mode.setBegin(cal.getTime()); + cal.add(Calendar.HOUR_OF_DAY, 2); + mode.setEnd(cal.getTime()); + mode.setTargetAudience(Target.course); + mode.setManualBeginEnd(true); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + + //check + Date now = new Date(); + List<AssessmentMode> currentModes = assessmentModeMgr.getAssessmentModes(now); + Assert.assertNotNull(currentModes); + Assert.assertFalse(currentModes.contains(mode)); + } + + /** + * Manual with lead time -> in the current list + */ + @Test + public void loadCurrentAssessmentModes_manualNowLeadingTime() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + //manual now + AssessmentMode mode = assessmentModeMgr.createAssessmentMode(entry); + mode.setName("Assessment to load"); + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.HOUR_OF_DAY, 1); + mode.setBegin(cal.getTime()); + cal.add(Calendar.HOUR_OF_DAY, 2); + mode.setEnd(cal.getTime()); + mode.setTargetAudience(Target.course); + mode.setManualBeginEnd(true); + mode.setLeadTime(120); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + + //check + Date now = new Date(); + List<AssessmentMode> currentModes = assessmentModeMgr.getAssessmentModes(now); + Assert.assertNotNull(currentModes); + Assert.assertTrue(currentModes.contains(mode)); + } + + @Test + public void getCurrentAssessmentMode() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + AssessmentMode mode = createMinimalAssessmentmode(entry); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(mode); + + //check + Date now = new Date(); + List<AssessmentMode> currentModes = assessmentModeMgr.getCurrentAssessmentMode(entry, now); + Assert.assertNotNull(currentModes); + Assert.assertEquals(1, currentModes.size()); + Assert.assertTrue(currentModes.contains(mode)); + } + + /** + * Manual without lead time -> not in the current list + */ + @Test + public void getCurrentAssessmentMode_manualNow() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + //manual now + AssessmentMode mode = assessmentModeMgr.createAssessmentMode(entry); + mode.setName("Assessment to load"); + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.HOUR_OF_DAY, -1); + mode.setBegin(cal.getTime()); + cal.add(Calendar.HOUR_OF_DAY, 2); + mode.setEnd(cal.getTime()); + mode.setTargetAudience(Target.course); + mode.setManualBeginEnd(true); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + + //check + Date now = new Date(); + List<AssessmentMode> currentModes = assessmentModeMgr.getCurrentAssessmentMode(entry, now); + Assert.assertNotNull(currentModes); + Assert.assertTrue(currentModes.isEmpty()); + } + + /** + * Manual with lead time -> in the current list + */ + @Test + public void getCurrentAssessmentMode_manualNowLeadingTime() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + //manual now + AssessmentMode mode = assessmentModeMgr.createAssessmentMode(entry); + mode.setName("Assessment to load"); + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.HOUR_OF_DAY, 1); + mode.setBegin(cal.getTime()); + cal.add(Calendar.HOUR_OF_DAY, 2); + mode.setEnd(cal.getTime()); + mode.setTargetAudience(Target.course); + mode.setManualBeginEnd(true); + mode.setLeadTime(120); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + + //check + Date now = new Date(); + List<AssessmentMode> currentModes = assessmentModeMgr.getCurrentAssessmentMode(entry, now); + Assert.assertNotNull(currentModes); + Assert.assertEquals(1, currentModes.size()); + Assert.assertTrue(currentModes.contains(mode)); + } + + @Test public void isInAssessmentMode() { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); @@ -297,6 +433,52 @@ public class AssessmentModeManagerTest extends OlatTestCase { Assert.assertFalse(entryReferencePast); } + /** + * Manual without leading time -> not in assessment mode + */ + @Test + public void isInAssessmentMode_manual() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + AssessmentMode mode = createMinimalAssessmentmode(entry); + mode.setManualBeginEnd(true); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(mode); + + //check + Date now = new Date(); + boolean entryNow = assessmentModeMgr.isInAssessmentMode(entry, now); + Assert.assertFalse(entryNow); + } + + /** + * Manual with leading time -> in assessment mode + */ + @Test + public void isInAssessmentMode_manualLeadingTime() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + AssessmentMode mode = assessmentModeMgr.createAssessmentMode(entry); + mode.setName("Assessment to load"); + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + cal.add(Calendar.HOUR_OF_DAY, 1); + mode.setBegin(cal.getTime()); + cal.add(Calendar.HOUR_OF_DAY, 2); + mode.setEnd(cal.getTime()); + mode.setTargetAudience(Target.course); + mode.setManualBeginEnd(true); + mode.setLeadTime(120); + mode = assessmentModeMgr.persist(mode); + dbInstance.commitAndCloseSession(); + + //check + Date now = new Date(); + boolean entryNow = assessmentModeMgr.isInAssessmentMode(entry, now); + Assert.assertTrue(entryNow); + } + + /** * Check an assessment linked to a group with one participant * -- GitLab