/**
* <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.group.test;
import java.util.Collection;
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.manager.BusinessGroupDAO;
import org.olat.group.manager.BusinessGroupRelationDAO;
import org.olat.group.manager.ContactDAO;
import org.olat.group.model.ContactViewExtended;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class ContactDAOTest extends OlatTestCase {
@Autowired
private ContactDAO contactDao;
@Autowired
private BusinessGroupDAO businessGroupDao;
@Autowired
private BusinessGroupRelationDAO businessGroupRelationDao;
@Autowired
private DB dbInstance;
@Test
public void testContacts() {
//5 identities
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("cdao-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("cdao-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("cdao-3-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("cdao-4-" + UUID.randomUUID().toString());
Identity id5 = JunitTestHelper.createAndPersistIdentityAsUser("cdao-5-" + UUID.randomUUID().toString());
//create 3 groups
BusinessGroup group1 = businessGroupDao.createAndPersist(null, "gdlo", "gdlo-desc", 0, 5, true, false, true, true, false);
BusinessGroup group2 = businessGroupDao.createAndPersist(null, "gdmo", "gdmo-desc", 0, 5, true, false, false, true, false);
BusinessGroup group3 = businessGroupDao.createAndPersist(null, "gdno", "gdno-desc", 0, 5, true, false, false, false, false);
dbInstance.commitAndCloseSession();
//id1 -> group 1 and 2
businessGroupRelationDao.addRole(id1, group1, GroupRoles.coach.name());
businessGroupRelationDao.addRole(id1, group2, GroupRoles.participant.name());
//id2 -> group 1 and 2
businessGroupRelationDao.addRole(id2, group1, GroupRoles.participant.name());
businessGroupRelationDao.addRole(id2, group2, GroupRoles.coach.name());
//id3 -> group 1 and 3
businessGroupRelationDao.addRole(id3, group1, GroupRoles.participant.name());
businessGroupRelationDao.addRole(id3, group3, GroupRoles.participant.name());
//id4 -> group 2
businessGroupRelationDao.addRole(id4, group2, GroupRoles.coach.name());
//id5 -> group 3
businessGroupRelationDao.addRole(id5, group3, GroupRoles.coach.name());
dbInstance.commitAndCloseSession();
//check identity1 : contact to id2 and id3
int numOfContact1 = contactDao.countContacts(id1);
Assert.assertEquals(2, numOfContact1);
List<Identity> contactList1 = contactDao.findContacts(id1, 0, -1);
Assert.assertEquals(2, contactList1.size());
Assert.assertTrue(contactList1.contains(id2));
Assert.assertTrue(contactList1.contains(id3));
//check identity2 : contact to id1 and id3
int numOfContact2 = contactDao.countContacts(id2);
Assert.assertEquals(2, numOfContact2);
List<Identity> contactList2 = contactDao.findContacts(id2, 0, -1);
Assert.assertEquals(2, contactList2.size());
Assert.assertTrue(contactList2.contains(id1));
Assert.assertTrue(contactList2.contains(id3));
//check identity3 : contact to id1 and id2
int numOfContact3 = contactDao.countContacts(id3);
Assert.assertEquals(2, numOfContact3);
List<Identity> contactList3 = contactDao.findContacts(id3, 0, -1);
Assert.assertEquals(2, contactList3.size());
Assert.assertTrue(contactList3.contains(id1));
Assert.assertTrue(contactList3.contains(id2));
//check identity4 : contact to id1
int numOfContact4 = contactDao.countContacts(id4);
Assert.assertEquals(1, numOfContact4);
List<Identity> contactList4 = contactDao.findContacts(id4, 0, -1);
Assert.assertEquals(1, contactList4.size());
Assert.assertTrue(contactList4.contains(id1));
//check identity5 : contact to id2
int numOfContact5 = contactDao.countContacts(id5);
Assert.assertEquals(0, numOfContact5);
List<Identity> contactList5 = contactDao.findContacts(id5, 0, -1);
Assert.assertEquals(0, contactList5.size());
}
@Test
public void testContactsWithMoreExclusions() {
//5 identities
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("ddao-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("ddao-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("ddao-3-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("ddao-4-" + UUID.randomUUID().toString());
Identity id5 = JunitTestHelper.createAndPersistIdentityAsUser("ddao-5-" + UUID.randomUUID().toString());
//create 3 groups
BusinessGroup group1 = businessGroupDao.createAndPersist(null, "gdoo", "gdoo-desc", 0, 5, true, false, true, false, false);
BusinessGroup group2 = businessGroupDao.createAndPersist(null, "gdpo", "gdpo-desc", 0, 5, true, false, false, true, false);
BusinessGroup group3 = businessGroupDao.createAndPersist(null, "gdqo", "gdqo-desc", 0, 5, true, false, false, false, false);
dbInstance.commitAndCloseSession();
//id1 -> group 1 and 2
businessGroupRelationDao.addRole(id1, group1, GroupRoles.coach.name()); //visible
businessGroupRelationDao.addRole(id1, group2, GroupRoles.participant.name()); //visible
//id2 -> group 1 and 2
businessGroupRelationDao.addRole(id2, group1, GroupRoles.participant.name()); //not
businessGroupRelationDao.addRole(id2, group2, GroupRoles.coach.name()); //not
//id3 -> group 1 and 3
businessGroupRelationDao.addRole(id3, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id3, group3, GroupRoles.participant.name()); //not
//id4 -> group 2
businessGroupRelationDao.addRole(id4, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id4, group3, GroupRoles.coach.name()); //not
//id5 -> group 3
businessGroupRelationDao.addRole(id5, group3, GroupRoles.coach.name()); //not
dbInstance.commitAndCloseSession();
//check identity1 : contact to id2 and id3
int numOfContact1 = contactDao.countContacts(id1);
Assert.assertEquals(0, numOfContact1);
List<Identity> contactList1 = contactDao.findContacts(id1, 0, -1);
Assert.assertEquals(0, contactList1.size());
//check identity2 : contact to id1 and id3
int numOfContact2 = contactDao.countContacts(id2);
Assert.assertEquals(1, numOfContact2);
List<Identity> contactList2 = contactDao.findContacts(id2, 0, -1);
Assert.assertEquals(1, contactList2.size());
Assert.assertTrue(contactList2.contains(id1));
//check identity3 : contact to id1 and id2
int numOfContact3 = contactDao.countContacts(id3);
Assert.assertEquals(1, numOfContact3);
List<Identity> contactList3 = contactDao.findContacts(id3, 0, -1);
Assert.assertEquals(1, contactList3.size());
Assert.assertTrue(contactList3.contains(id1));
//check identity4 : contact to id1
int numOfContact4 = contactDao.countContacts(id4);
Assert.assertEquals(1, numOfContact4);//!!! ne marche pas
List<Identity> contactList4 = contactDao.findContacts(id4, 0, -1);
Assert.assertEquals(1, contactList4.size());
Assert.assertTrue(contactList4.contains(id1));
//check identity5 : contact to id2
int numOfContact5 = contactDao.countContacts(id5);
Assert.assertEquals(0, numOfContact5);
List<Identity> contactList5 = contactDao.findContacts(id5, 0, -1);
Assert.assertEquals(0, contactList5.size());
}
@Test
public void testDistinctGroupOwnersParticipants() {
//5 identities
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("edao-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("edao-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("edao-3-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("edao-4-" + UUID.randomUUID().toString());
Identity id5 = JunitTestHelper.createAndPersistIdentityAsUser("edao-5-" + UUID.randomUUID().toString());
//create 3 groups
BusinessGroup group1 = businessGroupDao.createAndPersist(null, "geoo", "gdoo-desc", 0, 5, true, false, true, false, false);
BusinessGroup group2 = businessGroupDao.createAndPersist(null, "gepo", "gdpo-desc", 0, 5, true, false, false, true, false);
BusinessGroup group3 = businessGroupDao.createAndPersist(null, "geqo", "gdqo-desc", 0, 5, true, false, false, false, false);
dbInstance.commitAndCloseSession();
//id1 -> group 1 and 2
businessGroupRelationDao.addRole(id1, group1, GroupRoles.coach.name()); //visible
businessGroupRelationDao.addRole(id1, group2, GroupRoles.participant.name()); //visible
//id2 -> group 1 and 2
businessGroupRelationDao.addRole(id2, group1, GroupRoles.participant.name()); //not
businessGroupRelationDao.addRole(id2, group2, GroupRoles.coach.name()); //not
//id3 -> group 1 and 3
businessGroupRelationDao.addRole(id3, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id3, group3, GroupRoles.participant.name()); //not
//id4 -> group 2
businessGroupRelationDao.addRole(id4, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id4, group3, GroupRoles.coach.name()); //not
//id5 -> group 3
businessGroupRelationDao.addRole(id5, group3, GroupRoles.coach.name()); //not
dbInstance.commitAndCloseSession();
//check identity1 : no contact
Collection<Long> contacts1 = contactDao.getDistinctGroupOwnersParticipants(id1);
Assert.assertNotNull(contacts1);
Assert.assertEquals(1, contacts1.size());
Assert.assertTrue(contacts1.contains(id1.getKey()));
//check identity2 : contact to id1 and id3
Collection<Long> contacts2 = contactDao.getDistinctGroupOwnersParticipants(id2);
Assert.assertNotNull(contacts2);
Assert.assertEquals(1, contacts2.size());
Assert.assertTrue(contacts2.contains(id1.getKey()));
//check identity3 : contact to id1 and id2
Collection<Long> contacts3 = contactDao.getDistinctGroupOwnersParticipants(id3);
Assert.assertNotNull(contacts3);
Assert.assertEquals(1, contacts3.size());
Assert.assertTrue(contacts3.contains(id1.getKey()));
//check identity4 : contact to id1
Collection<Long> contacts4 = contactDao.getDistinctGroupOwnersParticipants(id4);
Assert.assertNotNull(contacts4);
Assert.assertEquals(1, contacts4.size());
Assert.assertTrue(contacts4.contains(id1.getKey()));
//check identity5 : contact to id2
Collection<Long> contacts5 = contactDao.getDistinctGroupOwnersParticipants(id5);
Assert.assertNotNull(contacts5);
Assert.assertEquals(0, contacts5.size());
}
@Test
public void testGroupOwners() {
//5 identities
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-3-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-4-" + UUID.randomUUID().toString());
Identity id5 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-5-" + UUID.randomUUID().toString());
//create 3 groups
BusinessGroup group1 = businessGroupDao.createAndPersist(null, "gfoo", "gfoo-desc", 0, 5, true, false, true, false, false);
BusinessGroup group2 = businessGroupDao.createAndPersist(null, "gfpo", "gfpo-desc", 0, 5, true, false, false, true, false);
BusinessGroup group3 = businessGroupDao.createAndPersist(null, "gfqo", "gfqo-desc", 0, 5, true, false, false, false, false);
dbInstance.commitAndCloseSession();
//id1 -> group 1 and 2
businessGroupRelationDao.addRole(id1, group1, GroupRoles.coach.name()); //visible
businessGroupRelationDao.addRole(id1, group2, GroupRoles.participant.name()); //visible
//id2 -> group 1 and 2
businessGroupRelationDao.addRole(id2, group1, GroupRoles.participant.name()); //not
businessGroupRelationDao.addRole(id2, group2, GroupRoles.coach.name()); //not
//id3 -> group 1 and 3
businessGroupRelationDao.addRole(id3, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id3, group3, GroupRoles.participant.name()); //not
//id4 -> group 2
businessGroupRelationDao.addRole(id4, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id4, group3, GroupRoles.coach.name()); //not
//id5 -> group 3
businessGroupRelationDao.addRole(id5, group3, GroupRoles.coach.name()); //not
dbInstance.commitAndCloseSession();
//check identity1 : no contact
Collection<ContactViewExtended> contacts1 = contactDao.getGroupOwners(id1);
Assert.assertNotNull(contacts1);
Assert.assertEquals(1, contacts1.size());
Assert.assertTrue(contacts1.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity2 : contact to id1 and id3
Collection<ContactViewExtended> contacts2 = contactDao.getGroupOwners(id2);
Assert.assertNotNull(contacts2);
Assert.assertEquals(1, contacts2.size());
Assert.assertTrue(contacts2.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity3 : contact to id1 and id2
Collection<ContactViewExtended> contacts3 = contactDao.getGroupOwners(id3);
Assert.assertNotNull(contacts3);
Assert.assertEquals(0, contacts3.size());
//check identity4 : contact to id1
Collection<ContactViewExtended> contacts4 = contactDao.getGroupOwners(id4);
Assert.assertNotNull(contacts4);
Assert.assertEquals(0, contacts4.size());
//check identity5 : contact to id2
Collection<ContactViewExtended> contacts5 = contactDao.getGroupOwners(id5);
Assert.assertNotNull(contacts5);
Assert.assertEquals(0, contacts5.size());
}
@Test
public void testGroupParticipants() {
//5 identities
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-3-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-4-" + UUID.randomUUID().toString());
Identity id5 = JunitTestHelper.createAndPersistIdentityAsUser("fdao-5-" + UUID.randomUUID().toString());
//create 3 groups
BusinessGroup group1 = businessGroupDao.createAndPersist(null, "gfoo", "gfoo-desc", 0, 5, true, false, true, false, false);
BusinessGroup group2 = businessGroupDao.createAndPersist(null, "gfpo", "gfpo-desc", 0, 5, true, false, false, true, false);
BusinessGroup group3 = businessGroupDao.createAndPersist(null, "gfqo", "gfqo-desc", 0, 5, true, false, false, false, false);
dbInstance.commitAndCloseSession();
//id1 -> group 1 and 2
businessGroupRelationDao.addRole(id1, group1, GroupRoles.coach.name()); //visible
businessGroupRelationDao.addRole(id1, group2, GroupRoles.participant.name()); //visible
//id2 -> group 1 and 2
businessGroupRelationDao.addRole(id2, group1, GroupRoles.participant.name()); //not
businessGroupRelationDao.addRole(id2, group2, GroupRoles.coach.name()); //not
//id3 -> group 1 and 3
businessGroupRelationDao.addRole(id3, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id3, group3, GroupRoles.participant.name()); //not
//id4 -> group 2
businessGroupRelationDao.addRole(id4, group2, GroupRoles.coach.name()); //not
businessGroupRelationDao.addRole(id4, group3, GroupRoles.coach.name()); //not
//id5 -> group 3
businessGroupRelationDao.addRole(id5, group3, GroupRoles.coach.name()); //not
dbInstance.commitAndCloseSession();
//check identity1 : no contact
Collection<ContactViewExtended> contacts1 = contactDao.getParticipants(id1);
Assert.assertNotNull(contacts1);
Assert.assertEquals(1, contacts1.size());
Assert.assertTrue(contacts1.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity2 : contact to id1 and id3
Collection<ContactViewExtended> contacts2 = contactDao.getParticipants(id2);
Assert.assertNotNull(contacts2);
Assert.assertEquals(1, contacts2.size());
Assert.assertTrue(contacts2.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity3 : contact to id1 and id2
Collection<ContactViewExtended> contacts3 = contactDao.getParticipants(id3);
Assert.assertNotNull(contacts3);
Assert.assertEquals(1, contacts3.size());
Assert.assertTrue(contacts3.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity4 : contact to id1
Collection<ContactViewExtended> contacts4 = contactDao.getParticipants(id4);
Assert.assertNotNull(contacts4);
Assert.assertEquals(1, contacts4.size());
Assert.assertTrue(contacts4.iterator().next().getIdentityKey().equals(id1.getKey()));
//check identity5 : contact to id2
Collection<ContactViewExtended> contacts5 = contactDao.getParticipants(id5);
Assert.assertNotNull(contacts5);
Assert.assertEquals(0, contacts5.size());
}
}