From 431cbdaaa756d72611ac37583636e19fe5131e15 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 17 Nov 2020 08:41:45 +0100
Subject: [PATCH] OO-5082: force reload of curriculum before delete or flagging
 as deleted

---
 .../manager/CurriculumServiceImpl.java        |  2 +-
 .../manager/CurriculumServiceTest.java        | 80 +++++++++++++++++++
 2 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
index 1c559a5ba04..d22dc12c577 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
@@ -168,7 +168,7 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat
 		for(CurriculumElement rootElement:curriculum.getRootElements()) {
 			deleted &= deleteCurriculumElement(rootElement);
 		}
-		dbInstance.commit();
+		dbInstance.commitAndCloseSession();
 		curriculum = (CurriculumImpl)getCurriculum(curriculumRef);
 		if(deleted) {
 			curriculumDao.delete(curriculum);
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
index e2f62c87730..0fe74b36def 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
@@ -24,8 +24,10 @@ import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.OrganisationService;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Organisation;
 import org.olat.core.id.Roles;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
@@ -37,7 +39,10 @@ import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRef;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
+import org.olat.modules.curriculum.CurriculumStatus;
 import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews;
+import org.olat.modules.quality.QualityDataCollection;
+import org.olat.modules.quality.QualityService;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryStatusEnum;
 import org.olat.repository.RepositoryManager;
@@ -56,9 +61,13 @@ public class CurriculumServiceTest extends OlatTestCase {
 	@Autowired
 	private DB dbInstance;
 	@Autowired
+	private QualityService qualityService;
+	@Autowired
 	private CurriculumService curriculumService;
 	@Autowired
 	private RepositoryManager repositoryManager;
+	@Autowired
+	private OrganisationService organisationService;
 	
 	@Test
 	public void addCurriculumManagers() {
@@ -115,4 +124,75 @@ public class CurriculumServiceTest extends OlatTestCase {
 		Assert.assertFalse(membership.isRepositoryEntryOwner());
 		Assert.assertFalse(membership.isCurriculumElementOwner());
 	}
+	
+	@Test
+	public void deleteCurriculum() {
+		Curriculum curriculum = curriculumService.createCurriculum("CUR-3", "Curriculum 3", "Curriculum", null);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled,
+				CurriculumLectures.disabled, CurriculumLearningProgress.disabled, curriculum);
+		CurriculumElement element2 = curriculumService.createCurriculumElement("Element-for-del", "Element for relation",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled,
+				CurriculumLectures.disabled, CurriculumLearningProgress.disabled, curriculum);
+		
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
+		dbInstance.commit();
+
+		// add the course and a participant to the curriculum
+		curriculumService.addRepositoryEntry(element2, entry, false);
+		Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-part");
+		curriculumService.addMember(element1, participant, CurriculumRoles.participant);
+		dbInstance.commitAndCloseSession();
+
+		List<CurriculumRef> curriculumList = Collections.singletonList(curriculum);
+		List<CurriculumElementRepositoryEntryViews> myElements = curriculumService.getCurriculumElements(participant, Roles.userRoles(), curriculumList);
+		Assert.assertNotNull(myElements);
+		Assert.assertEquals(2, myElements.size());
+		
+		curriculumService.deleteCurriculum(curriculum);
+		dbInstance.commitAndCloseSession();
+		
+		// check
+		Curriculum deletedCurriculum = curriculumService.getCurriculum(curriculum);
+		Assert.assertNull(deletedCurriculum);
+	}
+	
+	@Test
+	public void deleteCurriculumInQuality() {
+		Curriculum curriculum = curriculumService.createCurriculum("CUR-3", "Curriculum 3", "Curriculum", null);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled,
+				CurriculumLectures.disabled, CurriculumLearningProgress.disabled, curriculum);
+		CurriculumElement element2 = curriculumService.createCurriculumElement("Element-for-del", "Element for relation",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled,
+				CurriculumLectures.disabled, CurriculumLearningProgress.disabled, curriculum);
+
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
+		Organisation organisation = organisationService.getDefaultOrganisation();
+		QualityDataCollection dataCollection = qualityService.createDataCollection(Collections.singletonList(organisation), entry);
+		dataCollection.setTopicCurriculumElement(element1);
+		qualityService.updateDataCollection(dataCollection);
+		dbInstance.commit();
+
+		// add the course and a participant to the curriculum
+		curriculumService.addRepositoryEntry(element2, entry, false);
+		Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-part");
+		curriculumService.addMember(element1, participant, CurriculumRoles.participant);
+		dbInstance.commitAndCloseSession();
+
+		List<CurriculumRef> curriculumList = Collections.singletonList(curriculum);
+		List<CurriculumElementRepositoryEntryViews> myElements = curriculumService.getCurriculumElements(participant, Roles.userRoles(), curriculumList);
+		Assert.assertNotNull(myElements);
+		Assert.assertEquals(2, myElements.size());
+		
+		curriculumService.deleteCurriculum(curriculum);
+		dbInstance.commitAndCloseSession();
+		
+		// check
+		Curriculum deletedCurriculum = curriculumService.getCurriculum(curriculum);
+		Assert.assertNotNull(deletedCurriculum);
+		Assert.assertEquals(CurriculumStatus.deleted.name(), deletedCurriculum.getStatus());
+	}
 }
-- 
GitLab