From 681ebaac4e54f6c02d02211e9fd9851f78fcf877 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 2 Sep 2019 08:46:07 +0200
Subject: [PATCH] OO-4150: absence category are not mandatory

---
 .../lecture/manager/AbsenceNoticeDAO.java     |  2 +-
 .../lecture/manager/AbsenceNoticeDAOTest.java | 48 +++++++++++++++++--
 2 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/modules/lecture/manager/AbsenceNoticeDAO.java b/src/main/java/org/olat/modules/lecture/manager/AbsenceNoticeDAO.java
index 7ef01982dea..14fb26c8632 100644
--- a/src/main/java/org/olat/modules/lecture/manager/AbsenceNoticeDAO.java
+++ b/src/main/java/org/olat/modules/lecture/manager/AbsenceNoticeDAO.java
@@ -208,7 +208,7 @@ public class AbsenceNoticeDAO {
 	public List<AbsenceNoticeInfos> search(AbsenceNoticeSearchParameters searchParams, boolean absenceDefaultAuthorized) {
 		QueryBuilder sb = new QueryBuilder(512);
 		sb.append("select notice from absencenotice as notice")
-		  .append(" inner join fetch notice.absenceCategory as category")
+		  .append(" left join fetch notice.absenceCategory as category")
 		  .append(" inner join fetch notice.identity as aIdent")
 		  .append(" inner join fetch aIdent.user as aUser");
 		if(!searchParams.getTypes().isEmpty()) {
diff --git a/src/test/java/org/olat/modules/lecture/manager/AbsenceNoticeDAOTest.java b/src/test/java/org/olat/modules/lecture/manager/AbsenceNoticeDAOTest.java
index 02bc9b8c2cc..9c085c4c6c7 100644
--- a/src/test/java/org/olat/modules/lecture/manager/AbsenceNoticeDAOTest.java
+++ b/src/test/java/org/olat/modules/lecture/manager/AbsenceNoticeDAOTest.java
@@ -211,17 +211,59 @@ public class AbsenceNoticeDAOTest extends OlatTestCase {
 		Assert.assertTrue(collisions.isEmpty());
 	}
 	
+	/**
+	 * Search absences
+	 */
 	@Test
 	public void searchAbsenceNotice() {
+		Date now = new Date();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("absent-3");
-		
-		Date start = CalendarUtils.startOfDay(new Date());
-		Date end = CalendarUtils.endOfDay(new Date());
+		Date start = CalendarUtils.startOfDay(now);
+		Date end = CalendarUtils.endOfDay(now);
 		AbsenceNotice notice = absenceNoticeDao.createAbsenceNotice(identity, AbsenceNoticeType.absence, AbsenceNoticeTarget.allentries,
 				start, end, null, null, null, null, null);
 		dbInstance.commitAndCloseSession();
+
+		AbsenceNoticeSearchParameters searchParams = new AbsenceNoticeSearchParameters();
+		List<AbsenceNoticeInfos> foundNotices = absenceNoticeDao.search(searchParams, true);
+		Assert.assertNotNull(foundNotices);
+		Assert.assertFalse(foundNotices.isEmpty());
 		
+		long count = foundNotices.stream()
+				.filter(n -> notice.equals(n.getAbsenceNotice())).count(); 
+		Assert.assertEquals(1, count);
+	}
+	
+	/**
+	 * Search the absence of a participant
+	 */
+	@Test
+	public void searchAbsenceNotice_allentries() {
+		Date now = new Date();
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(now);
+		cal.set(Calendar.HOUR_OF_DAY, 10);
+		Date startLecture = cal.getTime();
+		cal.set(Calendar.HOUR_OF_DAY, 14);
+		Date endLecture = cal.getTime();
+		
+		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("absent-3");
+		RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
+		LectureBlock lectureBlock = createMinimalLectureBlock(entry, startLecture, endLecture);
+		// create the participant's relation (lecture block use repo entry group, participant is participant in this group)
+		repositoryEntryRelationDao.addRole(identity, entry, GroupRoles.participant.name());
+		Group defGroup = repositoryEntryRelationDao.getDefaultGroup(lectureBlock.getEntry());
+		lectureBlockDao.addGroupToLectureBlock(lectureBlock, defGroup);
+		dbInstance.commit();
+		
+		Date start = CalendarUtils.startOfDay(now);
+		Date end = CalendarUtils.endOfDay(now);
+		AbsenceNotice notice = absenceNoticeDao.createAbsenceNotice(identity, AbsenceNoticeType.absence, AbsenceNoticeTarget.allentries,
+				start, end, null, null, null, null, null);
+		dbInstance.commitAndCloseSession();
+
 		AbsenceNoticeSearchParameters searchParams = new AbsenceNoticeSearchParameters();
+		searchParams.setParticipant(identity);
 		List<AbsenceNoticeInfos> foundNotices = absenceNoticeDao.search(searchParams, true);
 		Assert.assertNotNull(foundNotices);
 		Assert.assertFalse(foundNotices.isEmpty());
-- 
GitLab