From f268712e0af20283ad4ed490622f8fe09de2a78c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 18 Oct 2013 10:20:02 +0200 Subject: [PATCH] OO-809: fix the wrong equals for non-mysql database in findIdentiesByEmail (patch 1 of S. Clemenz), add unit tests --- .../java/org/olat/user/UserManagerImpl.java | 15 ++-- .../java/org/olat/user/UserManagerTest.java | 79 ++++++++++++++++--- 2 files changed, 78 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/olat/user/UserManagerImpl.java b/src/main/java/org/olat/user/UserManagerImpl.java index d3d5269ea06..0de81c5c2e8 100644 --- a/src/main/java/org/olat/user/UserManagerImpl.java +++ b/src/main/java/org/olat/user/UserManagerImpl.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -204,14 +203,16 @@ public class UserManagerImpl extends UserManager { @Override public List<Identity> findIdentitiesByEmail(List<String> emailList) { List<String> emails = new ArrayList<String>(emailList); - for(Iterator<String> emailIt=emails.iterator(); emailIt.hasNext(); ) { - String email = emailIt.next(); + for (int i=0; i<emails.size(); i++) { + String email = emails.get(i).toLowerCase(); if (!MailHelper.isValidEmailAddress(email)) { - emailIt.remove(); + emails.remove(i); logWarn("Invalid email address: " + email, null); } + else { + emails.set(i, email); + } } - if(emails.isEmpty()) { return Collections.emptyList(); } @@ -225,7 +226,7 @@ public class UserManagerImpl extends UserManager { if(mysql) { emailSb.append(" user.properties['").append(UserConstants.EMAIL).append("'] in (:emails) "); } else { - emailSb.append(" lower(user.properties['").append(UserConstants.EMAIL).append("']) = lower(:emails)"); + emailSb.append(" lower(user.properties['").append(UserConstants.EMAIL).append("']) in (:emails)"); } List<Identity> identities = dbInstance.getCurrentEntityManager() @@ -237,7 +238,7 @@ public class UserManagerImpl extends UserManager { if(mysql) { institutionalSb.append(" user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("'] in (:emails) "); } else { - institutionalSb.append(" lower(user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("']) = lower(:emails)"); + institutionalSb.append(" lower(user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("']) in (:emails)"); } if(!identities.isEmpty()) { institutionalSb.append(" and identity not in (:identities) "); diff --git a/src/test/java/org/olat/user/UserManagerTest.java b/src/test/java/org/olat/user/UserManagerTest.java index 185861eebee..f52fe18696a 100644 --- a/src/test/java/org/olat/user/UserManagerTest.java +++ b/src/test/java/org/olat/user/UserManagerTest.java @@ -19,6 +19,7 @@ */ package org.olat.user; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; @@ -31,6 +32,7 @@ import org.olat.basesecurity.BaseSecurityModule; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.core.id.User; +import org.olat.core.id.UserConstants; import org.olat.core.util.Encoder; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -51,13 +53,38 @@ public class UserManagerTest extends OlatTestCase { @Autowired private BaseSecurity securityManager; + @Test - public void findIdentitiesByEmail() { + public void findIdentityByEmail_email() { //create a user - String name = "createid-" + UUID.randomUUID().toString(); - String email = name + "@frentix.com"; - User user = userManager.createUser("first" + name, "last" + name, email); - Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, Encoder.encrypt("secret")); + Identity id = createUser(UUID.randomUUID().toString()); + dbInstance.commitAndCloseSession(); + + //get the identity by email + String email = id.getUser().getProperty(UserConstants.EMAIL, null); + Identity foundIdentity = userManager.findIdentityByEmail(email); + Assert.assertNotNull(foundIdentity); + Assert.assertEquals(id, foundIdentity); + } + + @Test + public void findIdentityByEmail_institutionalEmail() { + //create a user + Identity id = createUser(UUID.randomUUID().toString()); + dbInstance.commitAndCloseSession(); + + //get the identity by email + String email = id.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null); + Identity foundIdentity = userManager.findIdentityByEmail(email); + Assert.assertNotNull(foundIdentity); + Assert.assertEquals(id, foundIdentity); + } + + @Test + public void findIdentitiesByEmail_email() { + //create a user + Identity id1 = createUser(UUID.randomUUID().toString()); + Identity id2 = createUser(UUID.randomUUID().toString()); dbInstance.commitAndCloseSession(); //get empty (must survive) @@ -65,11 +92,45 @@ public class UserManagerTest extends OlatTestCase { Assert.assertNotNull(emptyIdentities); Assert.assertTrue(emptyIdentities.isEmpty()); - //get the identity - List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(email)); + //get the identities by emails + List<String> emails = new ArrayList<String>(); + emails.add(id1.getUser().getProperty(UserConstants.EMAIL, null)); + emails.add(id2.getUser().getProperty(UserConstants.EMAIL, null)); + + List<Identity> identities = userManager.findIdentitiesByEmail(emails); Assert.assertNotNull(identities); - Assert.assertEquals(1, identities.size()); - Assert.assertTrue(identities.contains(identity)); + Assert.assertEquals(2, identities.size()); + Assert.assertTrue(identities.contains(id1)); + Assert.assertTrue(identities.contains(id2)); } + + @Test + public void findIdentitiesByEmail_institutionalEmail() { + //create a user + Identity id1 = createUser(UUID.randomUUID().toString()); + Identity id2 = createUser(UUID.randomUUID().toString()); + dbInstance.commitAndCloseSession(); + //get the identities by emails + List<String> emails = new ArrayList<String>(); + emails.add(id1.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null)); + emails.add(id2.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null)); + + List<Identity> identities = userManager.findIdentitiesByEmail(emails); + Assert.assertNotNull(identities); + Assert.assertEquals(2, identities.size()); + Assert.assertTrue(identities.contains(id1)); + Assert.assertTrue(identities.contains(id2)); + } + + private Identity createUser(String uuid) { + String name = "createid-" + uuid; + String email = name + "@frentix.com"; + String institutEmail = name + "@openolat.com"; + User user = userManager.createUser("first" + name, "last" + name, email); + user.setProperty(UserConstants.INSTITUTIONALEMAIL, institutEmail); + Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, Encoder.encrypt("secret")); + Assert.assertNotNull(identity); + return identity; + } } -- GitLab