From 2298e4d567065da922399eeb9b0a9d2d70e38067 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 21 Jul 2014 12:14:55 +0200
Subject: [PATCH] OO-1000: preserve the creation date and last modified date of
 the security group membership during update, fields use as first access and
 last access in groups

---
 .../org/olat/basesecurity/BaseSecurity.java   |  18 ---
 .../basesecurity/BaseSecurityManager.java     |  81 ++--------
 .../org/olat/upgrade/OLATUpgrade_10_0_0.java  |  35 ++++-
 .../basesecurity/SecurityManagerTest.java     | 138 +++++++-----------
 4 files changed, 98 insertions(+), 174 deletions(-)

diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index 9e4917a6880..77a2b73eb61 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -132,30 +132,12 @@ public interface BaseSecurity {
 	 */
 	public List<Identity> getIdentitiesOfSecurityGroups(List<SecurityGroup> secGroups);
 
-	//fxdiff: FXOLAT-219 decrease the load for synching groups
-	public List<IdentityShort> getIdentitiesShortOfSecurityGroups(List<SecurityGroup> secGroups, int firstResult, int maxResults);
-
 	/**
 	 * @param secGroup
 	 * @return a List of Object[] with the array[0] = Identity, array[1] =
 	 *         addedToGroupTimestamp
 	 */
 	public List<Object[]> getIdentitiesAndDateOfSecurityGroup(SecurityGroup secGroup);
-
-	/**
-	 * @see org.olat.basesecurity.Manager#getIdentitiesAndDateOfSecurityGroup(org.olat.basesecurity.SecurityGroup)
-	 * @param sortedByAddDate true= return list of idenities sorted by added date
-	 */
-	public List<Object[]> getIdentitiesAndDateOfSecurityGroup(SecurityGroup secGroup, boolean sortedByAddDate);
-	
-	
-	/**
-	 * Get date where identity joined a security group
-	 * @param secGroup
-	 * @param identity
-	 * @return joindate of given securityGroup. May return null if group doesn't exist or user isn't in this group
-	 */
-	public Date getSecurityGroupJoinDateForIdentity(SecurityGroup secGroup, Identity identity);
 	
 	/**
 	 * @param securityGroupName
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index 5f4127402be..f8ea85b4355 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -795,85 +795,35 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
 		sb.append("select distinct(identity) from ").append(SecurityGroupMembershipImpl.class.getName()).append(" as sgmsi ")
 		  .append(" inner join sgmsi.identity identity ")
 		  .append(" inner join fetch  identity.user user ")
-			.append(" where sgmsi.securityGroup in (:secGroups)");
+		  .append(" where sgmsi.securityGroup in (:secGroups)");
 		
-		return DBFactory.getInstance().getCurrentEntityManager()
+		return dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Identity.class)
 				.setParameter("secGroups", secGroups)
 				.getResultList();
 	}
-	
-	@Override
-	//fxdiff: FXOLAT-219 decrease the load for synching groups
-	public List<IdentityShort> getIdentitiesShortOfSecurityGroups(List<SecurityGroup> secGroups, int firstResult, int maxResults) {
-		if (secGroups == null || secGroups.isEmpty()) {
-			return Collections.emptyList();
-		}
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select id from ").append(IdentityShort.class.getName()).append(" as id ")
-		.append(" where id.key in (")
-		.append("   select sgmsi.identity.key from  ").append(SecurityGroupMembershipImpl.class.getName()).append(" as sgmsi ")
-		.append("   where sgmsi.securityGroup in (:secGroups)")
-		.append(" )");
-
-		DBQuery query = DBFactory.getInstance().createQuery(sb.toString());
-		query.setParameterList("secGroups", secGroups);
-		List<IdentityShort> idents = query.list();
-		return idents;
-	}
 
 	/**
 	 * @see org.olat.basesecurity.Manager#getIdentitiesAndDateOfSecurityGroup(org.olat.basesecurity.SecurityGroup)
 	 */
-	public List getIdentitiesAndDateOfSecurityGroup(SecurityGroup secGroup) {
-		return getIdentitiesAndDateOfSecurityGroup(secGroup,false);
-	}
-	
-	/**
-	 * @see org.olat.basesecurity.Manager#getIdentitiesAndDateOfSecurityGroup(org.olat.basesecurity.SecurityGroup)
-	 * @param sortedByAddDate true= return list of idenities sorted by added date
-	 */
-	public List getIdentitiesAndDateOfSecurityGroup(SecurityGroup secGroup, boolean sortedByAddDate) {
-	   StringBuilder queryString = new StringBuilder();
-	   queryString.append("select ii, sgmsi.lastModified from"
-         + " org.olat.basesecurity.IdentityImpl as ii inner join fetch ii.user as iuser, "
-         + " org.olat.basesecurity.SecurityGroupMembershipImpl as sgmsi "
-         + " where sgmsi.securityGroup = ? and sgmsi.identity = ii");
-	   if (sortedByAddDate) {
-	  	 queryString.append(" order by sgmsi.lastModified, sgmsi.key");
-	   } 
-		 List identAndDate = DBFactory.getInstance().find(queryString.toString(),
-         new Object[] { secGroup.getKey() },
-         new Type[] { StandardBasicTypes.LONG });
-     return identAndDate;
-	}
-
-	/**
-	 * 
-	 * @see org.olat.basesecurity.Manager#getSecurityGroupJoinDateForIdentity(org.olat.basesecurity.SecurityGroup, org.olat.core.id.Identity)
-	 */
-	public Date getSecurityGroupJoinDateForIdentity(SecurityGroup secGroup, Identity identity){
-		String query = "select creationDate from " + "  org.olat.basesecurity.SecurityGroupMembershipImpl as sgi "
-				+ " where sgi.securityGroup = :secGroup and sgi.identity = :identId";
-		
-		DB db = DBFactory.getInstance();
-		DBQuery dbq = db.createQuery(query);
-		dbq.setLong("identId", identity.getKey().longValue());
-		dbq.setLong("secGroup", secGroup.getKey());
-		List result = dbq.list();
-		if (result.size()==0){
-			return null;
-		}
-		else {
-			return (Date)result.get(0);
-		}
+	@Override
+	public List<Object[]> getIdentitiesAndDateOfSecurityGroup(SecurityGroup secGroup) {
+	   StringBuilder sb = new StringBuilder();
+	   sb.append("select ii, sgmsi.lastModified from ").append(IdentityImpl.class.getName()).append(" as ii")
+	     .append(" inner join fetch ii.user as iuser, ")
+	     .append(SecurityGroupMembershipImpl.class.getName()).append(" as sgmsi")
+	     .append(" where sgmsi.securityGroup=:secGroup and sgmsi.identity = ii");
+	 
+	   return dbInstance.getCurrentEntityManager()
+				 .createQuery(sb.toString(), Object[].class)
+				 .setParameter("secGroup", secGroup)
+				 .getResultList();
 	}
-	
 
 	/**
 	 * @see org.olat.basesecurity.Manager#countIdentitiesOfSecurityGroup(org.olat.basesecurity.SecurityGroup)
 	 */
+	@Override
 	public int countIdentitiesOfSecurityGroup(SecurityGroup secGroup) {
 		DB db = DBFactory.getInstance();
 		String q = "select count(sgm) from org.olat.basesecurity.SecurityGroupMembershipImpl sgm where sgm.securityGroup = :group";
@@ -887,6 +837,7 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
 	/**
 	 * @see org.olat.basesecurity.Manager#createAndPersistNamedSecurityGroup(java.lang.String)
 	 */
+	@Override
 	public SecurityGroup createAndPersistNamedSecurityGroup(String groupName) {
 		SecurityGroup secG = createAndPersistSecurityGroup();
 		NamedGroupImpl ngi = new NamedGroupImpl(groupName, secG);
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
index 47b27006d27..582aa7b2444 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
@@ -28,12 +28,15 @@ import java.util.Set;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.Constants;
 import org.olat.basesecurity.Group;
+import org.olat.basesecurity.GroupMembership;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.Policy;
 import org.olat.basesecurity.SecurityGroup;
+import org.olat.basesecurity.SecurityGroupMembershipImpl;
 import org.olat.basesecurity.manager.GroupDAO;
+import org.olat.basesecurity.model.GroupImpl;
+import org.olat.basesecurity.model.GroupMembershipImpl;
 import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.manager.BusinessGroupRelationDAO;
 import org.olat.group.right.BGRightManager;
@@ -515,12 +518,36 @@ public class OLATUpgrade_10_0_0 extends OLATUpgrade {
 	private void processSecurityGroup(Group group, String role, SecurityGroup secGroup) {
 		if(secGroup == null) return;
 
-		List<Identity> identities = securityManager.getIdentitiesOfSecurityGroup(secGroup);
-		for(Identity identity:identities) {
-			groupDao.addMembership(group, identity, role);
+		List<SecurityGroupMembershipImpl> oldMemberships = getMembershipsOfSecurityGroup(secGroup);
+		for(SecurityGroupMembershipImpl oldMembership:oldMemberships) {
+			GroupMembershipImpl membership = new GroupMembershipImpl();
+			membership.setCreationDate(oldMembership.getCreationDate());
+			membership.setLastModified(oldMembership.getLastModified());
+			membership.setGroup(group);
+			membership.setIdentity(oldMembership.getIdentity());
+			membership.setRole(role);
+			dbInstance.getCurrentEntityManager().persist(membership);
+
+			Set<GroupMembership> members = ((GroupImpl)group).getMembers();
+			if(members == null) {
+				members = new HashSet<>();
+				((GroupImpl)group).setMembers(members);
+			}
+			members.add(membership);
 		}	
 	}
 	
+	private List<SecurityGroupMembershipImpl> getMembershipsOfSecurityGroup(SecurityGroup secGroup) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select membership from ").append(SecurityGroupMembershipImpl.class.getName()).append(" as membership")
+		  .append("  where membership.securityGroup=:secGroup");
+		return dbInstance.getCurrentEntityManager()
+			.createQuery(sb.toString(), SecurityGroupMembershipImpl.class)
+			.setParameter("secGroup", secGroup)
+			.getResultList();
+	}
+	
+	
 	private List<BusinessGroupUpgrade> findBusinessGroups(int firstResult, int maxResults) {
 		StringBuilder sb = new StringBuilder();	
 		sb.append("select businessgroup from ").append(BusinessGroupUpgrade.class.getName()).append(" businessgroup")
diff --git a/src/test/java/org/olat/basesecurity/SecurityManagerTest.java b/src/test/java/org/olat/basesecurity/SecurityManagerTest.java
index a2e286b0f6a..e73fcd94063 100644
--- a/src/test/java/org/olat/basesecurity/SecurityManagerTest.java
+++ b/src/test/java/org/olat/basesecurity/SecurityManagerTest.java
@@ -28,19 +28,13 @@ package org.olat.basesecurity;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
-
-import junit.framework.Assert;
 
 import org.junit.Before;
 import org.junit.Ignore;
@@ -49,11 +43,10 @@ import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.id.UserConstants;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
 import org.olat.core.util.Encoder;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * SecurityTestSuite is a container of all Tests in this package.
@@ -62,12 +55,11 @@ import org.olat.test.OlatTestCase;
  */
 public class SecurityManagerTest extends OlatTestCase {
 
-	private static OLog log = Tracing.createLoggerFor(SecurityManagerTest.class);
 	private Identity s1,s2,s3,testAdmin;
-	private static String testLogin = "test-login"; 
-	private BaseSecurity sm;
-
+	private static String testLogin = "test-login";
 	
+	@Autowired
+	private BaseSecurity securityManager;
 
 	// Already tested in BusinessGroupTest :
 	//  - getGroupsWithPermissionOnOlatResourceable
@@ -75,45 +67,48 @@ public class SecurityManagerTest extends OlatTestCase {
 	/**
 	 * 
 	 */
-	@Test public void testGetIdentitiesByPowerSearch() {
+	@Test
+	public void testGetIdentitiesByPowerSearch() {
 		// test using visibility search
-		List<Identity> userList = sm.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, null, null, null);
+		List<Identity> userList = securityManager.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, null, null, null);
 		assertEquals(1,userList.size());
 		Identity identity = userList.get(0);
 		assertEquals(testLogin,identity.getName());
 		// test using powser search
-		userList = sm.getIdentitiesByPowerSearch(testLogin, null, true, null, null, null, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(testLogin, null, true, null, null, null, null, null, null, null, null);
 		assertEquals(1,userList.size());
 		identity = userList.get(0);
 		assertEquals(testLogin,identity.getName());
 	}
 	
-	@Test public void testGetIdentitiesByPowerSearchWithuserProperties() {
+	@Test
+	public void testGetIdentitiesByPowerSearchWithuserProperties() {
 		Map<String, String> userProperties = new HashMap<String, String>();
 		userProperties.put(UserConstants.FIRSTNAME, "first"+ testLogin);
 		userProperties.put(UserConstants.LASTNAME, "last"+ testLogin);
 		// test using visibility search
-		List<Identity> userList = sm.getVisibleIdentitiesByPowerSearch(testLogin, userProperties, true, null, null, null, null, null);
+		List<Identity> userList = securityManager.getVisibleIdentitiesByPowerSearch(testLogin, userProperties, true, null, null, null, null, null);
 		assertEquals(1,userList.size());
 		Identity identity = userList.get(0);
 		assertEquals("first" + testLogin,identity.getUser().getProperty(UserConstants.FIRSTNAME, null));
 		// test using powser search
-		userList = sm.getIdentitiesByPowerSearch(testLogin, userProperties, true, null, null, null, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(testLogin, userProperties, true, null, null, null, null, null, null, null, null);
 		assertEquals(1,userList.size());
 		identity = userList.get(0);
 		assertEquals("first" + testLogin,identity.getUser().getProperty(UserConstants.FIRSTNAME, null));
 	}
 
-	@Test public void testGetIdentitiesByPowerSearchWithConjunctionFlag() {
+	@Test
+	public void testGetIdentitiesByPowerSearchWithConjunctionFlag() {
 		// 1) two fields that match to two different users
 		Map<String, String> userProperties = new HashMap<String, String>();
 		userProperties.put(UserConstants.FIRSTNAME, s1.getUser().getProperty(UserConstants.FIRSTNAME, null));
 		userProperties.put(UserConstants.LASTNAME, s2.getUser().getProperty(UserConstants.LASTNAME, null));
 		// with AND search (conjunction) no identity is found
-		List<Identity> userList = sm.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
+		List<Identity> userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
 		assertEquals(0, userList.size());
 		// with OR search both identities are found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null);
 		assertEquals(2, userList.size());
 
 		// 2) two fields wheras only one matches to one single user
@@ -121,21 +116,22 @@ public class SecurityManagerTest extends OlatTestCase {
 		userProperties.put(UserConstants.FIRSTNAME, s1.getUser().getProperty(UserConstants.FIRSTNAME, null));
 		userProperties.put(UserConstants.LASTNAME, "some nonexisting value");
 		// with AND search (conjunction) no identity is found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
 		assertEquals(0, userList.size());
 		// with OR search first identity ist found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null);
 		assertEquals(1, userList.size());
 	}
 
 	
-	@Test public void testGetIdentitiesByPowerSearchWithAuthProviders() {
+	@Test
+	public void testGetIdentitiesByPowerSearchWithAuthProviders() {
 		// 1) only auth providers and login
 	  String[] authProviders = {BaseSecurityModule.getDefaultAuthProviderIdentifier()};
 		for (int i = 0; i < authProviders.length; i++) {
 			assertTrue("Provider name.length must be <= 8", authProviders[i].length() <= 8);
 		}
-	  List<Identity> userList = sm.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, authProviders, null, null);
+	  List<Identity> userList = securityManager.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, authProviders, null, null);
 		assertEquals(1,userList.size());
 		Identity identity =  userList.get(0);
 		assertEquals(testLogin,identity.getName());
@@ -143,7 +139,7 @@ public class SecurityManagerTest extends OlatTestCase {
 		for (int i = 0; i < nonAuthProviders.length; i++) {
 			assertTrue("Provider name.length must be <= 8", nonAuthProviders[i].length() <= 8);
 		}
-	  userList = sm.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, nonAuthProviders, null, null);
+	  userList = securityManager.getVisibleIdentitiesByPowerSearch(testLogin, null, true, null, null, nonAuthProviders, null, null);
 		assertEquals(0,userList.size());
 		
 		// 2) two fields wheras only one matches to one single user
@@ -151,14 +147,14 @@ public class SecurityManagerTest extends OlatTestCase {
 		userProperties.put(UserConstants.FIRSTNAME, s1.getUser().getProperty(UserConstants.FIRSTNAME, null));
 		userProperties.put(UserConstants.LASTNAME, "some nonexisting value");
 		// with AND search (conjunction) no identity is found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, true, null, null, authProviders, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, authProviders, null, null, null, null, null);
 		assertEquals(0, userList.size());
 		// with OR search first identity ist found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, false, null, null, authProviders, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, authProviders, null, null, null, null, null);
 		assertEquals(1, userList.size());
 
 		// 3) two fields wheras only one matches to one single user
-		sm.createAndPersistAuthentication(s1, "mytest_p", s1.getName(), "sdf", Encoder.Algorithm.sha512);
+		securityManager.createAndPersistAuthentication(s1, "mytest_p", s1.getName(), "sdf", Encoder.Algorithm.sha512);
 		String[] myProviders = new String[] {"mytest_p", "non-prov"};
 		for (int i = 0; i < myProviders.length; i++) {
 			assertTrue("Provider name.length must be <= 8", myProviders[i].length() <= 8);
@@ -167,73 +163,42 @@ public class SecurityManagerTest extends OlatTestCase {
 		userProperties.put(UserConstants.FIRSTNAME, s1.getUser().getProperty(UserConstants.FIRSTNAME, null));
 		userProperties.put(UserConstants.LASTNAME, "some nonexisting value");
 		// with AND search (conjunction) no identity is found
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, true, null, null, myProviders, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, myProviders, null, null, null, null, null);
 		assertEquals(0, userList.size());
 		// with OR search identity is found via auth provider and via first name
-		userList = sm.getIdentitiesByPowerSearch(null, userProperties, false, null, null, myProviders, null, null, null, null, null);
+		userList = securityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, myProviders, null, null, null, null, null);
 		assertEquals(1, userList.size());
 	}
 	
-	@Test public void testRemoveIdentityFromSecurityGroup() {
-		SecurityGroup olatUsersGroup = sm.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
-		assertTrue(sm.isIdentityInSecurityGroup(s1, olatUsersGroup));
-		sm.removeIdentityFromSecurityGroup(s1, olatUsersGroup);
-		assertFalse(sm.isIdentityInSecurityGroup(s1, olatUsersGroup));
-		sm.addIdentityToSecurityGroup(s1, olatUsersGroup);
-		assertTrue(sm.isIdentityInSecurityGroup(s1, olatUsersGroup));
+	@Test
+	public void testRemoveIdentityFromSecurityGroup() {
+		SecurityGroup olatUsersGroup = securityManager.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
+		assertTrue(securityManager.isIdentityInSecurityGroup(s1, olatUsersGroup));
+		securityManager.removeIdentityFromSecurityGroup(s1, olatUsersGroup);
+		assertFalse(securityManager.isIdentityInSecurityGroup(s1, olatUsersGroup));
+		securityManager.addIdentityToSecurityGroup(s1, olatUsersGroup);
+		assertTrue(securityManager.isIdentityInSecurityGroup(s1, olatUsersGroup));
 	}
 	
-	@Test public void testGetIdentitiesAndDateOfSecurityGroup() {
-		SecurityGroup olatUsersGroup = sm.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
-		List<Object[]> identities = sm.getIdentitiesAndDateOfSecurityGroup(olatUsersGroup, false);// not sortedByAddDate
+	@Test
+	public void testGetIdentitiesAndDateOfSecurityGroup() {
+		SecurityGroup olatUsersGroup = securityManager.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
+		List<Object[]> identities = securityManager.getIdentitiesAndDateOfSecurityGroup(olatUsersGroup);// not sortedByAddDate
 		assertTrue("Found no users", identities.size() > 0);
 		Object[] firstIdentity = identities.get(0);
 		assertTrue("Wrong type, Identity[0] must be an Identity", firstIdentity[0] instanceof Identity);
 		assertTrue("Wrong type, Identity[1] must be a Date", firstIdentity[1] instanceof Date);
-
-		identities = sm.getIdentitiesAndDateOfSecurityGroup(olatUsersGroup, true);// sortedByAddDate
-		assertTrue("Found no users", identities.size() > 0);
-		Date addedDateBefore = null;
-		for (Iterator<Object[]> iterator = identities.iterator(); iterator.hasNext();) {
-			Object[] object = iterator.next();
-			Identity identity = (Identity) object[0];
-			Assert.assertNotNull(identity);
-			Date addedDate    = (Date) object[1];
-			Assert.assertNotNull(addedDate);
-			if (addedDateBefore != null) {
-				assertTrue("Not sorted by AddDate ", (addedDate.compareTo(addedDateBefore) == 1) || (addedDate.compareTo(addedDateBefore) == 0) );
-			}
-			addedDateBefore = addedDate;
-		}
-	}
-	
-	@Test public void testGetSecurityGroupJoinDateForIdentity(){
-		String randomName = UUID.randomUUID().toString().replace("-", "").substring(0, 16);
-		SecurityGroup secGroup = sm.createAndPersistNamedSecurityGroup(randomName);
-		sm.addIdentityToSecurityGroup(s1, secGroup);
-		DBFactory.getInstance().commit();
-		try {
-			// we have to sleep for a short time to have different time
-			Thread.sleep(1200);// > 1s as not all database save time up-to the milliseconds
-		} catch (InterruptedException e) {
-			log.error("", e);
-		}
-		Date now = new Date();
-		assertTrue(sm.getSecurityGroupJoinDateForIdentity(secGroup, s1).getTime() < now.getTime());
-		assertNotNull(sm.getSecurityGroupJoinDateForIdentity(secGroup, s1));
-		if (!sm.getSecurityGroupsForIdentity(s2).contains(secGroup)){
-			assertNull(sm.getSecurityGroupJoinDateForIdentity(secGroup, s2));
-		}
 	}
 	
-	@Test public void testGetAuthentications() {
-		List<Authentication> authentications = sm.getAuthentications(s1);
+	@Test
+	public void testGetAuthentications() {
+		List<Authentication> authentications = securityManager.getAuthentications(s1);
 		Authentication authentication = authentications.get(0);
 		assertEquals(testLogin,authentication.getAuthusername());
 	}
 
 	@Test public void testFindAuthenticationByAuthusername() {
-		Authentication authentication = sm.findAuthenticationByAuthusername(testLogin, BaseSecurityModule.getDefaultAuthProviderIdentifier());
+		Authentication authentication = securityManager.findAuthenticationByAuthusername(testLogin, BaseSecurityModule.getDefaultAuthProviderIdentifier());
 		assertEquals(testLogin,authentication.getAuthusername());
 	}
 
@@ -255,8 +220,8 @@ public class SecurityManagerTest extends OlatTestCase {
 
 		Calendar c1 = Calendar.getInstance();
 		c1.add(Calendar.DAY_OF_YEAR, -100);// -100
-		assertTrue("Found no user-logins", sm.countUniqueUserLoginsSince(c1.getTime()) >= 4); 
-		Long initialUserLogins = sm.countUniqueUserLoginsSince(c1.getTime());
+		assertTrue("Found no user-logins", securityManager.countUniqueUserLoginsSince(c1.getTime()) >= 4); 
+		Long initialUserLogins = securityManager.countUniqueUserLoginsSince(c1.getTime());
 		
 		// Set lastLogin for the 4 test-users
 		c1 = Calendar.getInstance();
@@ -268,7 +233,7 @@ public class SecurityManagerTest extends OlatTestCase {
 		s3.setLastLogin(c1.getTime());
 		testAdmin.setLastLogin(c1.getTime());
 	
-   	// Set lastLogin for 4 test users
+		// Set lastLogin for 4 test users
 		db.updateObject(s1);
 		db.updateObject(s2);
 		db.updateObject(s3);
@@ -277,24 +242,23 @@ public class SecurityManagerTest extends OlatTestCase {
 		
 		Calendar c2 = Calendar.getInstance();		
 		c2.add(Calendar.DAY_OF_YEAR, -2); 
-		assertEquals(initialUserLogins - 4, sm.countUniqueUserLoginsSince(c2.getTime()).intValue() );
+		assertEquals(initialUserLogins - 4, securityManager.countUniqueUserLoginsSince(c2.getTime()).intValue() );
 		c2 = Calendar.getInstance();
 		c2.add(Calendar.DAY_OF_YEAR, - 14); 
-		assertEquals(initialUserLogins - 4, sm.countUniqueUserLoginsSince(c2.getTime()).intValue());
+		assertEquals(initialUserLogins - 4, securityManager.countUniqueUserLoginsSince(c2.getTime()).intValue());
 		c2 = Calendar.getInstance();
 		c2.add(Calendar.DAY_OF_YEAR, - 16); 
-		assertEquals(initialUserLogins - 1, sm.countUniqueUserLoginsSince(c2.getTime()).intValue());
+		assertEquals(initialUserLogins - 1, securityManager.countUniqueUserLoginsSince(c2.getTime()).intValue());
 		c2 = Calendar.getInstance();
 		c2.add(Calendar.DAY_OF_YEAR, - 99); 
-		assertEquals(initialUserLogins - 1, sm.countUniqueUserLoginsSince(c2.getTime()).intValue());
+		assertEquals(initialUserLogins - 1, securityManager.countUniqueUserLoginsSince(c2.getTime()).intValue());
 		c2 = Calendar.getInstance();
 		c2.add(Calendar.DAY_OF_YEAR, - 101); 
-		assertEquals(initialUserLogins, sm.countUniqueUserLoginsSince(c2.getTime()));
+		assertEquals(initialUserLogins, securityManager.countUniqueUserLoginsSince(c2.getTime()));
 	}
 
 	@Before
 	public void setup() throws Exception {
-		sm = BaseSecurityManager.getInstance();
 		s1 = JunitTestHelper.createAndPersistIdentityAsUser(testLogin);
 		s2 = JunitTestHelper.createAndPersistIdentityAsUser("coop");
 		s3 = JunitTestHelper.createAndPersistIdentityAsAuthor("diesbach");
-- 
GitLab