From cc2a4c80d9a5f22833e40e5d845f88468c701d25 Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Mon, 16 Sep 2019 12:34:12 +0200
Subject: [PATCH] SSDM-8734: fixing and extending UserManagerTest

---
 .../task/UserManagerExpectationsBuilder.java  | 10 +++-
 .../systemtest/task/UserManagerTest.java      | 52 +++++++++++++++++--
 2 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerExpectationsBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerExpectationsBuilder.java
index f571b263d8c..fafbfba6308 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerExpectationsBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerExpectationsBuilder.java
@@ -93,6 +93,8 @@ class UserManagerExpectationsBuilder
     
     private Map<String, Map<AuthorizationLevel, Set<String>>> usersByLevelBySpace = new TreeMap<>();
 
+    private boolean deactivation = true;
+
     UserManagerExpectationsBuilder(IApplicationServerInternalApi v3api, UserManagerTestService testService,
             IOpenBisSessionManager sessionManager, Map<Role, List<String>> commonSpaces)
     {
@@ -109,6 +111,12 @@ class UserManagerExpectationsBuilder
         this.testService = testService;
         this.sessionManager = sessionManager;
     }
+    
+    public UserManagerExpectationsBuilder noDeactivation()
+    {
+        deactivation = false;
+        return this;
+    }
 
     public UserManagerExpectationsBuilder globalSpaces(List<String> globalSpaces)
     {
@@ -359,7 +367,7 @@ class UserManagerExpectationsBuilder
         for (Person person : v3api.getPersons(sessionToken, personIds, fetchOptions).values())
         {
             String userId = person.getUserId();
-            assertEquals(person.isActive(), Boolean.FALSE, "Active flag of " + person);
+            assertEquals(person.isActive(), Boolean.valueOf(deactivation == false), "Active flag of " + person);
             assertEquals(person.getSpace(), null, "Home space of " + person);
             assertEquals(person.getRoleAssignments().size(), 0, "Role assignments of " + person);
             for (Entry<String, Set<String>> entry : usersByGroupId.entrySet())
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java
index 55af3743a21..542c4962da8 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java
@@ -81,7 +81,7 @@ public class UserManagerTest extends AbstractTest
     private File workingDir;
 
     private File mappingFile;
-    
+
     private UserManagerReport report;
 
     private static Map<Role, List<String>> commonSpaces()
@@ -1243,6 +1243,7 @@ public class UserManagerTest extends AbstractTest
         assertEquals(manage(userManager).getErrorReport(), "");
         // 2. U2 is no longer known by the authentication service
         userManager = new UserManagerBuilder(v3api, logger, report()).unknownUser(U2).commonSpaces(commonSpaces).get();
+        userManager.addGroup(new UserGroupAsBuilder("G2").admins(U1.getUserId()), users(U1, U3));
 
         // When
         UserManagerReport report = manage(userManager);
@@ -1264,6 +1265,42 @@ public class UserManagerTest extends AbstractTest
         builder.assertExpectations();
     }
 
+    @Test
+    public void testUserFromAGroupHasLeftedNoDeactivation()
+    {
+        // Given
+        // 1. create group G2 with users U1 (admin), U2 and U3
+        MockLogger logger = new MockLogger();
+        Map<Role, List<String>> commonSpaces = commonSpaces();
+        UserManager userManager = new UserManagerBuilder(v3api, logger, report()).commonSpaces(commonSpaces).get();
+        userManager.addGroup(new UserGroupAsBuilder("G2").admins(U1.getUserId()), users(U1, U2, U3));
+        assertEquals(manage(userManager).getErrorReport(), "");
+        // 2. U2 is no longer known
+        userManager = new UserManagerBuilder(v3api, logger, report()).unknownUser(U2).commonSpaces(commonSpaces).noDeactivation().get();
+        userManager.addGroup(new UserGroupAsBuilder("G2").admins(U1.getUserId()), users(U1, U3));
+
+        // When
+        UserManagerReport report = manage(userManager);
+
+        // Then
+        assertEquals(report.getErrorReport(), "");
+        assertEquals(report.getAuditLog(), "1970-01-01 01:00:00 [REMOVE-USER-FROM-AUTHORIZATION-GROUP] group: G2, user: u2\n"
+                + "1970-01-01 01:00:01 [UNASSIGN-ROLE-FORM-USER] user: u2, role: SPACE_ADMIN for G2_U2\n"
+                + "1970-01-01 01:00:02 [REMOVE-HOME-SPACE-FROM-USER] u2\n");
+        UserManagerExpectationsBuilder builder = createBuilder().noDeactivation();
+        builder.groups("G2").commonSpaces(commonSpaces).users(U1, U3);
+        builder.space("G2_ALPHA").admin(U1).user(U3);
+        builder.space("G2_BETA").admin(U1).user(U3);
+        builder.space("G2_GAMMA").admin(U1).observer(U3);
+        builder.space("G2_U1").admin(U1).non(U3);
+        builder.space("G2_U2").admin(U1).non(U3);
+        builder.space("G2_U3").admin(U1).admin(U3);
+        builder.homeSpace(U1, "G2_U1");
+        builder.unknownUser(U2);
+        builder.homeSpace(U3, "G2_U3");
+        builder.assertExpectations();
+    }
+
     @Test
     public void testReuseSameUserId()
     {
@@ -1380,7 +1417,7 @@ public class UserManagerTest extends AbstractTest
         }
         return map;
     }
-    
+
     private UserManagerReport report()
     {
         report = new UserManagerReport(new MockTimeProvider(0, 1000));
@@ -1414,7 +1451,7 @@ public class UserManagerTest extends AbstractTest
         private ISimpleLogger logger;
 
         private UserManagerReport report;
-        
+
         private Set<String> usersUnknownByAuthenticationService = new TreeSet<>();
 
         private List<String> globalSpaces = new ArrayList<>();
@@ -1427,6 +1464,8 @@ public class UserManagerTest extends AbstractTest
 
         private File shareIdsMappingFile;
 
+        private boolean deactivateUnknownUsers = true;
+
         UserManagerBuilder(IApplicationServerInternalApi service, ISimpleLogger logger, UserManagerReport report)
         {
             this.service = service;
@@ -1451,9 +1490,16 @@ public class UserManagerTest extends AbstractTest
             UserManager userManager = new UserManager(authenticationService, service, shareIdsMappingFile, logger, report);
             userManager.setGlobalSpaces(globalSpaces);
             userManager.setCommon(commonSpacesByRole, commonSamples, commonExperiments);
+            userManager.setDeactivateUnknwonUsers(deactivateUnknownUsers);
             return userManager;
         }
 
+        private UserManagerBuilder noDeactivation()
+        {
+            deactivateUnknownUsers = false;
+            return this;
+        }
+
         private UserManagerBuilder unknownUser(Principal user)
         {
             usersUnknownByAuthenticationService.add(user.getUserId());
-- 
GitLab