Skip to content
Snippets Groups Projects
Commit 4aab033b authored by srosse's avatar srosse
Browse files

OO-1774: use a delete statement for reservations instead of remove to prevent...

OO-1774: use a delete statement for reservations instead of remove to prevent exception if the reservation was already deleted
parent f1544454
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,6 @@ package org.olat.resource.accesscontrol.manager;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TemporalType;
import org.olat.core.commons.persistence.DB;
......@@ -130,10 +129,11 @@ public class ACReservationDAO {
return count.intValue();
}
public void deleteReservation(ResourceReservation reservation) {
EntityManager em = dbInstance.getCurrentEntityManager();
ResourceReservation reloaded = em.getReference(ResourceReservationImpl.class, reservation.getKey());
em.remove(reloaded);
public int deleteReservation(ResourceReservation reservation) {
String sb = "delete from resourcereservation as reservation where reservation.key=:reservationKey";
return dbInstance.getCurrentEntityManager().createQuery(sb)
.setParameter("reservationKey", reservation.getKey())
.executeUpdate();
}
public void deleteReservations(OLATResource resource) {
......
......@@ -209,11 +209,74 @@ public class ACReservationDAOTest extends OlatTestCase {
ResourceReservation deletedReservation = acReservationDao.loadReservation(reservation.getKey());
Assert.assertNull(deletedReservation);
}
@Test
public void testDeleteReservation_entityNotFound() {
//create 3 identities and 3 reservations
Identity id = JunitTestHelper.createAndPersistIdentityAsUser("reserv-5-" + UUID.randomUUID().toString());
OLATResource resource = JunitTestHelper.createRandomResource();
ResourceReservation reservation = acReservationDao.createReservation(id, "test", null, resource);
dbInstance.commitAndCloseSession();
//count reservations
int count = acReservationDao.countReservations(resource);
Assert.assertEquals(1, count);
//delete reservation
int rowDeleted = acReservationDao.deleteReservation(reservation);
dbInstance.commitAndCloseSession();
Assert.assertEquals(1, rowDeleted);
//try a second delete
int rowDeleted2 = acReservationDao.deleteReservation(reservation);
Assert.assertEquals(0, rowDeleted2);
int count2 = acReservationDao.countReservations(resource);
dbInstance.commitAndCloseSession();
Assert.assertEquals(0, count2);
}
/**
* check that one and only one reservation is deleted.
*/
@Test
public void testDeleteReservation_paranoiaCheck() {
//create 3 identities and 3 reservations
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("reserv-6-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("reserv-8-" + UUID.randomUUID().toString());
OLATResource resource1 = JunitTestHelper.createRandomResource();
OLATResource resource2 = JunitTestHelper.createRandomResource();
ResourceReservation reservation1_1 = acReservationDao.createReservation(id1, "test", null, resource1);
ResourceReservation reservation1_2 = acReservationDao.createReservation(id1, "test", null, resource2);
ResourceReservation reservation2_1 = acReservationDao.createReservation(id2, "test", null, resource1);
ResourceReservation reservation2_2 = acReservationDao.createReservation(id2, "test", null, resource2);
dbInstance.commitAndCloseSession();
Assert.assertNotNull(reservation1_1);
Assert.assertNotNull(reservation1_2);
Assert.assertNotNull(reservation2_1);
Assert.assertNotNull(reservation2_2);
//count reservations
int count1 = acReservationDao.countReservations(resource1);
Assert.assertEquals(2, count1);
int count2 = acReservationDao.countReservations(resource2);
Assert.assertEquals(2, count2);
//delete reservation identity 1 on resource 2
int rowDeleted = acReservationDao.deleteReservation(reservation1_2);
dbInstance.commitAndCloseSession();
Assert.assertEquals(1, rowDeleted);
int checkCount1 = acReservationDao.countReservations(resource1);
Assert.assertEquals(2, checkCount1);
int checkCount2 = acReservationDao.countReservations(resource2);
Assert.assertEquals(1, checkCount2);
}
@Test
public void testDeleteReservations() {
//create 3 identities and 3 reservations
Identity id = JunitTestHelper.createAndPersistIdentityAsUser("reserv-4-" + UUID.randomUUID().toString());
Identity id = JunitTestHelper.createAndPersistIdentityAsUser("reserv-7-" + UUID.randomUUID().toString());
OLATResource resource1 = JunitTestHelper.createRandomResource();
OLATResource resource2 = JunitTestHelper.createRandomResource();
ResourceReservation reservation1_1 = acReservationDao.createReservation(id, "test delete 1", null, resource1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment