/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.nodes.en;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Test;
import org.olat.basesecurity.GroupRoles;
import org.olat.core.commons.persistence.DB;
import org.olat.core.id.Identity;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService;
import org.olat.group.area.BGArea;
import org.olat.group.area.BGAreaManager;
import org.olat.group.manager.BusinessGroupRelationDAO;
import org.olat.repository.RepositoryEntry;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 31.03.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class EnrollmentManagerSerialTest extends OlatTestCase {
@Autowired
private DB dbInstance;
@Autowired
private BGAreaManager areaManager;
@Autowired
private EnrollmentManager enrollmentManager;
@Autowired
private BusinessGroupService businessGroupService;
@Autowired
private BusinessGroupRelationDAO businessGroupRelationDao;
@Test
public void getEnrollmentRows_withWaitingList() {
Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("en-coach-1");
Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-1");
Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-2");
Identity waiter1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-wait-3");
Identity out = JunitTestHelper.createAndPersistIdentityAsRndUser("en-out-4");
RepositoryEntry resource = JunitTestHelper.createAndPersistRepositoryEntry();
BusinessGroup group = businessGroupService.createBusinessGroup(coach, "en-1", "en-1", 0, 10, true, false, resource);
businessGroupRelationDao.addRole(participant1, group, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant2, group, GroupRoles.participant.name());
businessGroupRelationDao.addRole(waiter1, group, GroupRoles.waiting.name());
Assert.assertNotNull(group);
dbInstance.commitAndCloseSession();
List<Long> groupKeys = new ArrayList<>();
groupKeys.add(group.getKey());
//check participant 1
List<EnrollmentRow> enrollments = enrollmentManager.getEnrollments(participant1, groupKeys, null, 128);
Assert.assertNotNull(enrollments);
Assert.assertEquals(1, enrollments.size());
EnrollmentRow enrollment = enrollments.get(0);
Assert.assertEquals(group.getKey(), enrollment.getKey());
Assert.assertEquals(group.getName(), enrollment.getName());
Assert.assertEquals(2, enrollment.getNumOfParticipants());
Assert.assertEquals(1, enrollment.getNumInWaitingList());
Assert.assertTrue(enrollment.isParticipant());
Assert.assertFalse(enrollment.isWaiting());
//check waiter
List<EnrollmentRow> waitingEnrollments = enrollmentManager.getEnrollments(waiter1, groupKeys, null, 128);
Assert.assertNotNull(waitingEnrollments);
Assert.assertEquals(1, waitingEnrollments.size());
EnrollmentRow waitingEnrollment = waitingEnrollments.get(0);
Assert.assertEquals(group.getKey(), waitingEnrollment.getKey());
Assert.assertEquals(group.getName(), waitingEnrollment.getName());
Assert.assertEquals(2, waitingEnrollment.getNumOfParticipants());
Assert.assertEquals(1, waitingEnrollment.getNumInWaitingList());
Assert.assertEquals(1, waitingEnrollment.getPositionInWaitingList());
Assert.assertFalse(waitingEnrollment.isParticipant());
Assert.assertTrue(waitingEnrollment.isWaiting());
//check out
List<EnrollmentRow> outEnrollments = enrollmentManager.getEnrollments(out, groupKeys, null, 128);
Assert.assertNotNull(outEnrollments);
Assert.assertEquals(1, outEnrollments.size());
EnrollmentRow outEnrollment = outEnrollments.get(0);
Assert.assertEquals(group.getKey(), outEnrollment.getKey());
Assert.assertEquals(group.getName(), outEnrollment.getName());
Assert.assertEquals(2, outEnrollment.getNumOfParticipants());
Assert.assertEquals(1, outEnrollment.getNumInWaitingList());
Assert.assertFalse(outEnrollment.isParticipant());
Assert.assertFalse(outEnrollment.isWaiting());
}
@Test
public void getEnrollmentRows_withoutWaitingList() {
Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("en-coach-1");
Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-1");
Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-2");
Identity waiter1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-wait-3");
Identity out = JunitTestHelper.createAndPersistIdentityAsRndUser("en-out-4");
RepositoryEntry resource = JunitTestHelper.createAndPersistRepositoryEntry();
BusinessGroup group = businessGroupService.createBusinessGroup(coach, "en-1", "en-1", 0, 10, false, false, resource);
businessGroupRelationDao.addRole(participant1, group, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant2, group, GroupRoles.participant.name());
businessGroupRelationDao.addRole(waiter1, group, GroupRoles.waiting.name());
Assert.assertNotNull(group);
dbInstance.commitAndCloseSession();
List<Long> groupKeys = new ArrayList<>();
groupKeys.add(group.getKey());
//check participant 1
List<EnrollmentRow> enrollments = enrollmentManager.getEnrollments(participant1, groupKeys, null, 128);
Assert.assertNotNull(enrollments);
Assert.assertEquals(1, enrollments.size());
EnrollmentRow enrollment = enrollments.get(0);
Assert.assertEquals(group.getKey(), enrollment.getKey());
Assert.assertEquals(group.getName(), enrollment.getName());
Assert.assertEquals(2, enrollment.getNumOfParticipants());
Assert.assertEquals(0, enrollment.getNumInWaitingList());
Assert.assertTrue(enrollment.isParticipant());
Assert.assertFalse(enrollment.isWaiting());
//check waiter (which not exists in enroll because the flag waiting list is set to false)
List<EnrollmentRow> waitingEnrollments = enrollmentManager.getEnrollments(waiter1, groupKeys, null, 128);
Assert.assertNotNull(waitingEnrollments);
Assert.assertEquals(1, waitingEnrollments.size());
EnrollmentRow waitingEnrollment = waitingEnrollments.get(0);
Assert.assertEquals(group.getKey(), waitingEnrollment.getKey());
Assert.assertEquals(group.getName(), waitingEnrollment.getName());
Assert.assertEquals(2, waitingEnrollment.getNumOfParticipants());
Assert.assertEquals(0, waitingEnrollment.getNumInWaitingList());
Assert.assertEquals(-1, waitingEnrollment.getPositionInWaitingList());
Assert.assertFalse(waitingEnrollment.isParticipant());
Assert.assertFalse(waitingEnrollment.isWaiting());
//check out
List<EnrollmentRow> outEnrollments = enrollmentManager.getEnrollments(out, groupKeys, null, 128);
Assert.assertNotNull(outEnrollments);
Assert.assertEquals(1, outEnrollments.size());
EnrollmentRow outEnrollment = outEnrollments.get(0);
Assert.assertEquals(group.getKey(), outEnrollment.getKey());
Assert.assertEquals(group.getName(), outEnrollment.getName());
Assert.assertEquals(2, outEnrollment.getNumOfParticipants());
Assert.assertEquals(0, outEnrollment.getNumInWaitingList());
Assert.assertFalse(outEnrollment.isParticipant());
Assert.assertFalse(outEnrollment.isWaiting());
}
@Test
public void getEnrollmentRows_withAreas() {
Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("en-area-1");
Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-1");
Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-2");
Identity participant3 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-3");
Identity participant4 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-4");
Identity participant5 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-part-5");
Identity waiter1 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-wait-3");
Identity waiter2 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-wait-4");
Identity waiter3 = JunitTestHelper.createAndPersistIdentityAsRndUser("en-wait-5");
//create a resource, an area, a group
RepositoryEntry resource = JunitTestHelper.createAndPersistRepositoryEntry();
String areaName = UUID.randomUUID().toString();
BGArea area = areaManager.createAndPersistBGArea("en-area-" + areaName, "description:" + areaName, resource.getOlatResource());
BusinessGroup group1 = businessGroupService.createBusinessGroup(null, "en-area-group", "area-group-desc", 0, 10, false, false, resource);
BusinessGroup group2 = businessGroupService.createBusinessGroup(null, "en-group-2", "area-group-desc", 0, 10, true, false, resource);
BusinessGroup group3 = businessGroupService.createBusinessGroup(null, "en-group-3", "area-group-desc", 0, 10, true, false, resource);
businessGroupRelationDao.addRole(participant1, group1, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant2, group2, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant3, group2, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant4, group2, GroupRoles.participant.name());
businessGroupRelationDao.addRole(participant5, group2, GroupRoles.participant.name());
businessGroupRelationDao.addRole(waiter1, group2, GroupRoles.waiting.name());
businessGroupRelationDao.addRole(waiter2, group2, GroupRoles.waiting.name());
businessGroupRelationDao.addRole(waiter3, group2, GroupRoles.waiting.name());
areaManager.addBGToBGArea(group1, area);
areaManager.addBGToBGArea(group2, area);
dbInstance.commitAndCloseSession();
List<Long> groupKeys = new ArrayList<>();
groupKeys.add(group2.getKey());
groupKeys.add(group3.getKey());
List<Long> areaKeys = new ArrayList<>();
areaKeys.add(area.getKey());
//check id enrollments
List<EnrollmentRow> idEnrollments = enrollmentManager.getEnrollments(id, groupKeys, areaKeys, 128);
Assert.assertNotNull(idEnrollments);
Assert.assertEquals(3, idEnrollments.size());
//check enrollment group 1
EnrollmentRow enrollment1 = getEnrollmentRowFor(group1, idEnrollments);
Assert.assertEquals(group1.getKey(), enrollment1.getKey());
Assert.assertEquals(group1.getName(), enrollment1.getName());
Assert.assertEquals(1, enrollment1.getNumOfParticipants());
Assert.assertEquals(0, enrollment1.getNumInWaitingList());
Assert.assertFalse(enrollment1.isParticipant());
Assert.assertFalse(enrollment1.isWaiting());
//check enrollment group 2
EnrollmentRow enrollment2 = getEnrollmentRowFor(group2, idEnrollments);
Assert.assertEquals(group2.getKey(), enrollment2.getKey());
Assert.assertEquals(group2.getName(), enrollment2.getName());
Assert.assertEquals(4, enrollment2.getNumOfParticipants());
Assert.assertEquals(3, enrollment2.getNumInWaitingList());
Assert.assertFalse(enrollment2.isParticipant());
Assert.assertFalse(enrollment2.isWaiting());
//check enrollment group 3
EnrollmentRow enrollment3 = getEnrollmentRowFor(group3, idEnrollments);
Assert.assertEquals(group3.getKey(), enrollment3.getKey());
Assert.assertEquals(group3.getName(), enrollment3.getName());
Assert.assertEquals(0, enrollment3.getNumOfParticipants());
Assert.assertEquals(0, enrollment3.getNumInWaitingList());
Assert.assertFalse(enrollment3.isParticipant());
Assert.assertFalse(enrollment3.isWaiting());
//check enrollments of participant5
List<EnrollmentRow> part5Enrollments = enrollmentManager.getEnrollments(participant5, groupKeys, areaKeys, 128);
Assert.assertNotNull(part5Enrollments);
Assert.assertEquals(3, part5Enrollments.size());
EnrollmentRow enrollment2_w5 = getEnrollmentRowFor(group2, part5Enrollments);
Assert.assertEquals(group2.getKey(), enrollment2_w5.getKey());
Assert.assertEquals(group2.getName(), enrollment2_w5.getName());
Assert.assertEquals(4, enrollment2_w5.getNumOfParticipants());
Assert.assertEquals(3, enrollment2_w5.getNumInWaitingList());
Assert.assertTrue(enrollment2_w5.isParticipant());
Assert.assertFalse(enrollment2_w5.isWaiting());
//check enrollments of waiter 3
List<EnrollmentRow> wait3Enrollments = enrollmentManager.getEnrollments(waiter3, groupKeys, areaKeys, 128);
Assert.assertNotNull(wait3Enrollments);
Assert.assertEquals(3, wait3Enrollments.size());
EnrollmentRow enrollment2_p3 = getEnrollmentRowFor(group2, wait3Enrollments);
Assert.assertEquals(group2.getKey(), enrollment2_p3.getKey());
Assert.assertEquals(group2.getName(), enrollment2_p3.getName());
Assert.assertEquals(4, enrollment2_p3.getNumOfParticipants());
Assert.assertEquals(3, enrollment2_p3.getNumInWaitingList());
Assert.assertFalse(enrollment2_p3.isParticipant());
Assert.assertTrue(enrollment2_p3.isWaiting());
}
private EnrollmentRow getEnrollmentRowFor(BusinessGroup group, List<EnrollmentRow> enrollments) {
if(enrollments == null || enrollments.isEmpty()) return null;
EnrollmentRow row = null;
for(EnrollmentRow enrollment:enrollments) {
if(enrollment.getKey().equals(group.getKey())) {
row = enrollment;
}
}
return row;
}
/**
* Test the bevahior with no data. It's important because some of the value returned
* by the database can be null, and this is database dependant.
*/
@Test
public void getEnrollmentRows_null() {
Identity dummy = JunitTestHelper.createAndPersistIdentityAsRndUser("en-dummy-1");
dbInstance.commitAndCloseSession();
//null
List<EnrollmentRow> nullEnrollments = enrollmentManager.getEnrollments(dummy, null, null, 128);
Assert.assertNotNull(nullEnrollments);
Assert.assertEquals(0, nullEnrollments.size());
//wrong keys
List<Long> groupKeys = new ArrayList<>();
groupKeys.add(27l);
List<Long> areaKeys = new ArrayList<>();
areaKeys.add(27l);
List<EnrollmentRow> groupEnrollments = enrollmentManager.getEnrollments(dummy, groupKeys, null, 128);
Assert.assertNotNull(groupEnrollments);
Assert.assertEquals(0, groupEnrollments.size());
List<EnrollmentRow> areaEnrollments = enrollmentManager.getEnrollments(dummy, null, areaKeys, 128);
Assert.assertNotNull(areaEnrollments);
Assert.assertEquals(0, areaEnrollments.size());
List<EnrollmentRow> groupAndAreaEnrollments = enrollmentManager.getEnrollments(dummy, groupKeys, areaKeys, 128);
Assert.assertNotNull(groupAndAreaEnrollments);
Assert.assertEquals(0, groupAndAreaEnrollments.size());
}
}