final Integer userId1 = createUser("ldapMaster1", "test123", "firstname1", "lastname1");
final Integer userId2 = createUser("ldapMaster2", "test123", "firstname2", "lastname2");
final Integer userId3 = createUser("ldapMaster3", "test123", "firstname3", "lastname3");
final Integer userId4 = createUser("ldapMaster4", "test123", "firstname4", "lastname4");
final Integer groupId1 = createGroup("ldapMasterGroup1", "This is a stupid description.");
GroupDO group = groupDao.internalGetById(groupId1);
synchronizeLdapUsers(loginHandler);
LdapGroup ldapGroup = ldapGroupDao.findById(groupId1);
Assert.assertTrue(isMembersEmpty(ldapGroup));
// Assign users to group
group.setAssignedUsers(new HashSet<PFUserDO>());
group.addUser(userDao.getUserGroupCache().getUser(userId1));
group.addUser(userDao.getUserGroupCache().getUser(userId2));
group.addUser(userDao.getUserGroupCache().getUser(userId3));
groupDao.internalUpdate(group);
synchronizeLdapUsers(loginHandler);
ldapGroup = ldapGroupDao.findById(groupId1);
assertMembers(ldapGroup, "ldapMaster1", "ldapMaster2", "ldapMaster3");
Assert.assertFalse(isMembersEmpty(ldapGroup));
LdapUser ldapUser = ldapUserDao.findById(userId1, getPath());
Assert.assertEquals("ldapMaster1", ldapUser.getUid());
// Renaming one user, deleting one user and assigning third user
userDao.internalMarkAsDeleted(userDao.getById(userId2));
PFUserDO user3 = userDao.getById(userId3);
user3.setUsername("ldapMasterRenamed3");
userDao.internalUpdate(user3);
group = userDao.getUserGroupCache().getGroup(groupId1);
group.addUser(userDao.getById(userId4));
groupDao.internalUpdate(group);
synchronizeLdapUsers(loginHandler);
ldapGroup = ldapGroupDao.findById(groupId1);
assertMembers(ldapGroup, "ldapMaster1", "ldapMasterRenamed3", "ldapMaster4");
// Renaming one user and mark him as restricted
user3 = userDao.getById(userId3);
user3.setUsername("ldapMaster3");
user3.setRestrictedUser(true);
userDao.internalUpdate(user3);
synchronizeLdapUsers(loginHandler);
ldapUser = ldapUserDao.findById(userId3, getPath());
Assert.assertEquals("ldapMaster3", ldapUser.getUid());
Assert.assertTrue(ldapUser.getOrganizationalUnit().contains("ou=restricted"));
ldapGroup = ldapGroupDao.findById(groupId1);
assertMembers(ldapGroup, "ldapMaster1", "ldapMaster3,ou=restricted", "ldapMaster4");
// Renaming group
group = groupDao.getById(groupId1);
group.setName("ldapMasterGroupRenamed1");
groupDao.internalUpdate(group);
synchronizeLdapUsers(loginHandler);
ldapGroup = ldapGroupDao.findById(groupId1);
assertMembers(ldapGroup, "ldapMaster1", "ldapMaster3,ou=restricted", "ldapMaster4");
Assert.assertEquals("ldapMasterGroupRenamed1", ldapGroup.getCommonName());