/**
* <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.portfolio.manager;
import java.util.Collections;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Test;
import org.olat.basesecurity.BaseSecurity;
import org.olat.basesecurity.Group;
import org.olat.basesecurity.Invitation;
import org.olat.basesecurity.manager.GroupDAO;
import org.olat.core.commons.persistence.DB;
import org.olat.core.id.Identity;
import org.olat.portfolio.model.structel.PortfolioStructureMap;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 25.06.2014<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class InvitationDAOTest extends OlatTestCase {
@Autowired
private DB dbInstance;
@Autowired
private GroupDAO groupDao;
@Autowired
private InvitationDAO invitationDao;
@Autowired
private BaseSecurity securityManager;
@Autowired
private EPPolicyManager policyManager;
@Autowired
private EPFrontendManager epFrontendManager;
@Test
public void createAndPersistInvitation() {
Invitation invitation = invitationDao.createAndPersistInvitation();
Assert.assertNotNull(invitation);
dbInstance.commit();
Assert.assertNotNull(invitation);
Assert.assertNotNull(invitation.getKey());
Assert.assertNotNull(invitation.getBaseGroup());
Assert.assertNotNull(invitation.getToken());
}
@Test
public void findInvitation_group() {
Invitation invitation = invitationDao.createAndPersistInvitation();
Group baseGroup = invitation.getBaseGroup();
Assert.assertNotNull(invitation);
dbInstance.commitAndCloseSession();
Invitation reloadedInvitation = invitationDao.findInvitation(baseGroup);
Assert.assertNotNull(reloadedInvitation);
Assert.assertNotNull(reloadedInvitation.getKey());
Assert.assertEquals(baseGroup, reloadedInvitation.getBaseGroup());
Assert.assertEquals(invitation, reloadedInvitation);
Assert.assertEquals(invitation.getToken(), reloadedInvitation.getToken());
}
@Test
public void findInvitation_token() {
Invitation invitation = invitationDao.createAndPersistInvitation();
Assert.assertNotNull(invitation);
dbInstance.commitAndCloseSession();
Invitation reloadedInvitation = invitationDao.findInvitation(invitation.getToken());
Assert.assertNotNull(reloadedInvitation);
Assert.assertNotNull(reloadedInvitation.getKey());
Assert.assertNotNull(reloadedInvitation.getBaseGroup());
Assert.assertEquals(invitation, reloadedInvitation);
Assert.assertEquals(invitation.getToken(), reloadedInvitation.getToken());
}
@Test
public void hasInvitationPolicies_testHQL() {
String token = UUID.randomUUID().toString();
Date atDate = new Date();
boolean hasInvitation = invitationDao.hasInvitations(token, atDate);
Assert.assertFalse(hasInvitation);
}
@Test
public void createAndUpdateInvitation() {
Invitation invitation = invitationDao.createAndPersistInvitation();
dbInstance.commit();
Invitation updatedInvitation = invitationDao.update(invitation, "Kanu", "Unchou", "kanu.unchou@frentix.com");
dbInstance.commit();
Assert.assertEquals("Kanu", updatedInvitation.getFirstName());
Assert.assertEquals("Unchou", updatedInvitation.getLastName());
Assert.assertEquals("kanu.unchou@frentix.com", updatedInvitation.getMail());
Invitation reloadedInvitation = invitationDao.findInvitation(invitation.getToken());
Assert.assertEquals("Kanu", reloadedInvitation.getFirstName());
Assert.assertEquals("Unchou", reloadedInvitation.getLastName());
Assert.assertEquals("kanu.unchou@frentix.com", reloadedInvitation.getMail());
}
@Test
public void createIdentityFrom_invitation() {
Invitation invitation = invitationDao.createAndPersistInvitation();
String uuid = UUID.randomUUID().toString().replace("-", "");
invitation = invitationDao.update(invitation, "Clara", uuid, uuid + "@frentix.com");
dbInstance.commit();
// create the identity of the invitee
Identity invitee = invitationDao.createIdentityFrom(invitation, Locale.ENGLISH);
Assert.assertNotNull(invitee);
Assert.assertNotNull(invitee.getKey());
dbInstance.commitAndCloseSession();
// reload and check
Identity reloadIdentity = securityManager.loadIdentityByKey(invitee.getKey());
Assert.assertNotNull(reloadIdentity);
Assert.assertNotNull(reloadIdentity.getUser());
Assert.assertEquals(invitee.getKey(), reloadIdentity.getKey());
Assert.assertEquals("Clara", reloadIdentity.getUser().getFirstName());
Assert.assertEquals(uuid, reloadIdentity.getUser().getLastName());
Assert.assertEquals(uuid + "@frentix.com", reloadIdentity.getUser().getEmail());
}
@Test
public void loadOrCreateIdentityAndPersistInvitation() {
Invitation invitation = invitationDao.createAndPersistInvitation();
String uuid = UUID.randomUUID().toString().replace("-", "");
invitation = invitationDao.update(invitation, "Flora", uuid, uuid + "@frentix.com");
Group group = groupDao.createGroup();
dbInstance.commit();
// use the create part of the method
Identity identity = invitationDao.loadOrCreateIdentityAndPersistInvitation(invitation, group, Locale.ENGLISH);
Assert.assertNotNull(identity);
Assert.assertNotNull(identity.getKey());
dbInstance.commitAndCloseSession();
// reload and check
Identity reloadIdentity = securityManager.loadIdentityByKey(identity.getKey());
Assert.assertNotNull(reloadIdentity);
Assert.assertNotNull(reloadIdentity.getUser());
Assert.assertEquals(identity.getKey(), reloadIdentity.getKey());
Assert.assertEquals("Flora", reloadIdentity.getUser().getFirstName());
Assert.assertEquals(uuid, reloadIdentity.getUser().getLastName());
Assert.assertEquals(uuid + "@frentix.com", reloadIdentity.getUser().getEmail());
}
@Test
public void countInvitations() {
Invitation invitation = invitationDao.createAndPersistInvitation();
dbInstance.commit();
Assert.assertNotNull(invitation);
long numOfInvitations = invitationDao.countInvitations();
Assert.assertTrue(numOfInvitations > 0l);
}
/**
* Check the HQL code of the the method, and that it doesn't delete to much invitations
*/
@Test
public void cleanUpInvitation() {
Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-2-");
PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
Invitation invitation = invitationDao.createAndPersistInvitation();
dbInstance.commit();
invitation.setFirstName("John");
invitation.setLastName("Smith Portfolio");
EPMapPolicy policy = new EPMapPolicy();
policy.setType(EPMapPolicy.Type.invitation);
policy.setInvitation(invitation);
policyManager.updateMapPolicies(map, Collections.singletonList(policy));
dbInstance.commitAndCloseSession();
//convert invitation to identity
Identity invitee = invitationDao.createIdentityFrom(invitation, Locale.ENGLISH);
dbInstance.commitAndCloseSession();
//and check
boolean visible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
Assert.assertTrue(visible);
//clean the invitations
invitationDao.cleanUpInvitations();
//check that the invitation not was not deleted
boolean afterVisible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
Assert.assertTrue(afterVisible);
}
}