diff --git a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/ClaimTestUtil.java b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/ClaimTestUtil.java index b022363069a..fb40c467f91 100644 --- a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/ClaimTestUtil.java +++ b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/ClaimTestUtil.java @@ -31,6 +31,8 @@ public class ClaimTestUtil { public static final String CLAIM_URI3 = "http://wso2.org/givenname3"; public static final String CLAIM_URI4 = "http://wso2.org/claims/username"; public static final String CLAIM_URI5 = "http://wso2.org/claims/userid"; + public static final String CLAIM_URI6 = "http://wso2.org/claims/fullname"; + public static final String HOME_PROFILE_NAME = "HomeProfile"; public static Map getClaimTestData() { @@ -97,6 +99,18 @@ public static Map getClaimTestData() { cm5.setClaim(claim5); cm5.setMappedAttribute("scimId"); claims.put(CLAIM_URI5, cm5); + + Claim claim6 = new Claim(); + claim6.setClaimUri(CLAIM_URI6); + claim6.setDescription("Fullname claim URI"); + claim6.setDialectURI("http://wso2.org/"); + claim6.setDisplayTag("Full name"); + claim6.setRequired(true); + claim6.setSupportedByDefault(true); + ClaimMapping cm6 = new ClaimMapping(); + cm6.setClaim(claim6); + cm6.setMappedAttribute("fullname"); + claims.put(CLAIM_URI6, cm6); return claims; diff --git a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/claim/AdvancedClaimManagerTest.java b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/claim/AdvancedClaimManagerTest.java index 0b94c117ed8..089f8139cd3 100644 --- a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/claim/AdvancedClaimManagerTest.java +++ b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/claim/AdvancedClaimManagerTest.java @@ -86,7 +86,7 @@ public void doClaimStuff() throws Exception{ // get all the claim URIs String[] ClmURI = claimMan.getAllClaimUris(); - assertEquals(5, ClmURI.length); + assertEquals(6, ClmURI.length); // get the attribute name for a given claimURI // if the claimURI is null it will return a null value. @@ -124,19 +124,19 @@ public void doClaimStuff() throws Exception{ ClaimMapping[] CM1 = (ClaimMapping[]) claimMan.getAllSupportClaimMappingsByDefault(); Arrays.sort(CM1,new ClaimSorter());//sorting C1 array Claim C1 = CM1[0].getClaim(); - assertEquals("Given Name",C1.getDisplayTag()); + assertEquals("Full name",C1.getDisplayTag()); //lists all the claims required at the time user registration ClaimMapping[] CM2 = (ClaimMapping[]) claimMan.getAllRequiredClaimMappings(); Arrays.sort(CM2,new ClaimSorter());//sorting C2 array - assertEquals(5, CM2.length); + assertEquals(6, CM2.length); Claim C2 = CM2[2].getClaim(); - assertEquals("Given Name3", C2.getDisplayTag()); - assertEquals(5, claimMan.getAllRequiredClaimMappings().length); - assertEquals(5, claimMan.getAllSupportClaimMappingsByDefault().length); - assertEquals(5, claimMan.getAllClaimMappings().length); + assertEquals("Given Name2", C2.getDisplayTag()); + assertEquals(6, claimMan.getAllRequiredClaimMappings().length); + assertEquals(6, claimMan.getAllSupportClaimMappingsByDefault().length); + assertEquals(6, claimMan.getAllClaimMappings().length); //void addNewClaimMapping(ClaimMapping mapping) add new mappings @@ -144,9 +144,9 @@ public void doClaimStuff() throws Exception{ for(ClaimMapping x:NewclaimMapping){ claimMan.addNewClaimMapping(x); } - assertEquals(6,claimMan.getAllSupportClaimMappingsByDefault().length); - assertEquals(6,claimMan.getAllRequiredClaimMappings().length); - assertEquals(8,claimMan.getAllClaimMappings().length); + assertEquals(7,claimMan.getAllSupportClaimMappingsByDefault().length); + assertEquals(7,claimMan.getAllRequiredClaimMappings().length); + assertEquals(9,claimMan.getAllClaimMappings().length); //update an existing mapping @@ -154,15 +154,15 @@ public void doClaimStuff() throws Exception{ NewclaimMapping[1].getClaim().setRequired(true); claimMan.updateClaimMapping(NewclaimMapping[1]); - assertEquals(7,claimMan.getAllRequiredClaimMappings().length); + assertEquals(8,claimMan.getAllRequiredClaimMappings().length); assertEquals("The Update claim5",NewclaimMapping[1].getClaim().getDescription()); //delete an existing mapping claimMan.deleteClaimMapping(NewclaimMapping[0]); - assertEquals(6,claimMan.getAllRequiredClaimMappings().length); - assertEquals(6,claimMan.getAllSupportClaimMappingsByDefault().length); - assertEquals(7,claimMan.getAllClaimMappings().length); + assertEquals(7,claimMan.getAllRequiredClaimMappings().length); + assertEquals(7,claimMan.getAllSupportClaimMappingsByDefault().length); + assertEquals(8,claimMan.getAllClaimMappings().length); } public Map doClaimBuilderStuff() throws Exception{ diff --git a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmPrimaryUserStoreTest.java b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmPrimaryUserStoreTest.java index 21ffe6492a5..40012087c3c 100644 --- a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmPrimaryUserStoreTest.java +++ b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmPrimaryUserStoreTest.java @@ -39,6 +39,7 @@ import org.wso2.carbon.user.core.model.ExpressionAttribute; import org.wso2.carbon.user.core.model.ExpressionCondition; import org.wso2.carbon.user.core.model.ExpressionOperation; +import org.wso2.carbon.user.core.model.OperationalCondition; import org.wso2.carbon.user.core.model.UniqueIDUserClaimSearchEntry; import org.wso2.carbon.user.core.model.UserClaimSearchEntry; import org.wso2.carbon.user.core.util.DatabaseUtil; @@ -552,6 +553,158 @@ public void test194GetUserListWithIDCondition() throws UserStoreException { assertEquals(0, admin.getUserListWithID(expressionCondition, null, null, 10, 2, null, null).size()); } + public void test194GetUserListWithIDConditionCursor() throws Exception { + + // Current user list admin, user1WithID, user2, user2WithID, user3, user3WithID, user4, user4WithID + + // userName sw use + ExpressionCondition expressionCondition = new ExpressionCondition(ExpressionOperation.SW.toString(), + ExpressionAttribute.USERNAME.toString(), "use"); + ExpressionCondition noConditions = new ExpressionCondition(ExpressionOperation.SW.toString(), + ExpressionAttribute.USERNAME.toString(), ""); + + //Making a List of expressionConditions for multi-attribute filtering + // userName co WithID + ExpressionCondition expressionCondition2 = new ExpressionCondition(ExpressionOperation.CO.toString(), + ExpressionAttribute.USERNAME.toString(), "WithID"); + // userName sw use and userName co WithID + OperationalCondition multiFiltering = + new OperationalCondition("AND", expressionCondition, expressionCondition2); + + // No filtering + assertEquals(8, admin.getUserListWithID(noConditions, null, null, 10, "", "NEXT", null, null).size()); + + // Single userName filtering initial query (no cursor) + assertEquals(7, admin.getUserListWithID(expressionCondition, null, null, 10, "", "NEXT", null, null).size()); + + // Single userName filtering - Forwards cursor pagination + assertEquals(4, admin.getUserListWithID(expressionCondition, null, null, 10, "user2WithID", "NEXT", null, null) + .size()); + + // Single userName filtering - Backwards cursor pagination + assertEquals(2, admin.getUserListWithID(expressionCondition, null, null, 10, "user2WithID", "PREVIOUS", + null, null).size()); + + // Multiple filter conditions with userName attribute - Forwards cursor pagination + assertEquals(4, admin.getUserListWithID(multiFiltering, null, null, 10, "", "NEXT", null, null).size()); + + // Multiple filter conditions with userName attribute - Backwards cursor pagination + assertEquals(1, admin.getUserListWithID(multiFiltering, null, null, 10, "user2WithID", "PREVIOUS", null, null) + .size()); + + // Setup for claim filtering + Map claims = new HashMap<>(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Alucard"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Tepes, Alucard"); + admin.addUser("Alucard", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Akira"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Toriyama, Akira"); + admin.addUser("Akira", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Alphonse"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Elrich, Alphonse"); + admin.addUser("Alphonse", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Annie"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Leonhart, Annie"); + admin.addUser("Annie", "pass100", null, claims, null, false); + + // New user list: admin, Akira, Alphonse, Alucard, Annie, user1WithID, user2, user2WithID, user3, user3WithID, + // user4, user4WithID + // Having claims: Akira, Alphonse, Alucard, Annie + + // givenname sw A + ExpressionCondition claimFiltering1 = new ExpressionCondition(ExpressionOperation.SW.toString(), "attr1", "A"); + // fullname sw T + ExpressionCondition claimFiltering2 = new ExpressionCondition(ExpressionOperation.SW.toString(), "fullname", + "T"); + // givenname sw A and fullname sw T + OperationalCondition multiClaimFiltering = new OperationalCondition("AND", claimFiltering1, claimFiltering2); + + // Single claim filtering forward cursor pagination + assertEquals(4, admin.getUserListWithID(claimFiltering1, null, null, 10, "", "NEXT", null, null).size()); + + // Single claim filtering backwards cursor pagination + assertEquals(2, admin.getUserListWithID(claimFiltering1, null, null, 10, "Alucard", "PREVIOUS", null, null) + .size()); + + // Multi claim filtering forwards cursor pagination + assertEquals(2, admin.getUserListWithID(multiClaimFiltering, null, null, 10, "", "NEXT", null, null).size()); + + // Multi claim filtering backwards cursor pagination + assertEquals(1, admin.getUserListWithID(multiClaimFiltering, null, null, 10, "Alucard", "PREVIOUS", null, null) + .size()); + + // Role configuration for group filtering + +// admin.addUser("user1", "pass1", new String[]{"role1"}, null, null, false); + admin.addRole("Manager", new String[]{"Alucard", "Akira", "Alphonse", "Annie", "user2", "user2WithID", "user3", + "user3WithID"}, null); + admin.addRole("HeadManager", new String[]{"Alucard", "Akira", "Alphonse", "Annie", "user2", "user2WithID", + "user3", "user4"}, null); + // New role list: admin, Internal/everyone, role1WithID, role3, role4, Manager, HeadManager + + // groups eq Manager + ExpressionCondition groupFiltering = new ExpressionCondition(ExpressionOperation.EQ.toString(), + ExpressionAttribute.ROLE.toString(), "Manager"); + // group eq HeadManager + ExpressionCondition groupFiltering2 = new ExpressionCondition(ExpressionOperation.EQ.toString(), + ExpressionAttribute.ROLE.toString(), "HeadManager"); + // groups eq Manager and groups eq HeadManager + OperationalCondition multiGroupFiltering = new OperationalCondition("AND", groupFiltering, groupFiltering2); + + // Group Filtering forwards cursor pagination + assertEquals(3, admin.getUserListWithID(groupFiltering, null, null, 10, "user2", "NEXT", null, null).size()); + + // Group Filtering backwards cursor pagination + assertEquals(6, admin.getUserListWithID(groupFiltering, null, null, 10, "user3", "PREVIOUS", null, null) + .size()); + + // Multi-group filtering forwards cursor pagination + assertEquals(2, admin.getUserListWithID(multiGroupFiltering, null, null, 10, "user2", "NEXT", null, null) + .size()); + + // Multi-group filtering backwards cursor pagination + assertEquals(3, admin.getUserListWithID(multiGroupFiltering, null, null, 10, "Annie", "PREVIOUS", null, null) + .size()); + + // groups eq Manager and groups eq HeadManager and userName sw use + OperationalCondition groupAndUserNameFilter = + new OperationalCondition("AND", multiGroupFiltering, expressionCondition); + + // Multi-group filtering and userName filtering forward cursor pagination + assertEquals(3, admin.getUserListWithID(groupAndUserNameFilter, null, null, 10, "", "NEXT", null, null).size()); + + // Multi-group filtering and userName filtering backwards cursor pagination + assertEquals(1, admin.getUserListWithID(groupAndUserNameFilter, null, null, 10, "user2WithID", "PREVIOUS", + null, null).size()); + + // givenname sw A and groups eq Manager + OperationalCondition singleClaimAndGroupFilter = + new OperationalCondition("AND", claimFiltering1, groupFiltering); + // givenname sw A and groups eq Manager and groups eq HeadManager + OperationalCondition singleClaimAndMultiGroupFilter = + new OperationalCondition("AND", claimFiltering1, multiGroupFiltering); + // givenname sw A and fullname sw T and groups eq Manager and groups eq HeadManager + OperationalCondition multiGroupAndMultiClaimFilter = + new OperationalCondition("AND", multiClaimFiltering, multiGroupFiltering); + + // Having claims + In the manager and HeadManager groups: Akira, Alphonse, Alucard, Annie + + // Single group and claim filtering forward cursor pagination + assertEquals(3, admin.getUserListWithID(singleClaimAndGroupFilter, null, null, 10, "Akira", "NEXT", null, null) + .size()); + + // Multi-group filtering and single claim filtering forward cursor pagination + assertEquals(4, admin.getUserListWithID(singleClaimAndMultiGroupFilter, null, null, 10, "", "NEXT", null, null) + .size()); + + // Multi-group filtering and multi-claim filtering forward cursor pagination + assertEquals(1, admin.getUserListWithID(multiGroupAndMultiClaimFilter, null, null, 10, "Akira", "NEXT", + null, null).size()); + } + public void test195GetRoleListOfUserWithID() throws UserStoreException { assertEquals(2, admin.getRoleListOfUserWithID(userId1).size()); diff --git a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmSecondaryUserStoreTest.java b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmSecondaryUserStoreTest.java index fe6278166cb..0b9722966be 100644 --- a/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmSecondaryUserStoreTest.java +++ b/core/org.wso2.carbon.user.core/src/test/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCRealmSecondaryUserStoreTest.java @@ -49,6 +49,7 @@ import org.wso2.carbon.user.core.model.ExpressionAttribute; import org.wso2.carbon.user.core.model.ExpressionCondition; import org.wso2.carbon.user.core.model.ExpressionOperation; +import org.wso2.carbon.user.core.model.OperationalCondition; import org.wso2.carbon.user.core.model.UniqueIDUserClaimSearchEntry; import org.wso2.carbon.user.core.model.UserClaimSearchEntry; import org.wso2.carbon.user.core.util.DatabaseUtil; @@ -588,6 +589,165 @@ public void test194GetUserListWithIDCondition() throws UserStoreException { null, 10, 2, null, null).size()); } + public void test194GetUserListWithIDConditionCursor() throws Exception { + + // Current user list: user1WithID, user2, user2WithID, user3, user3WithID, user4WithID + + // userName sw use + ExpressionCondition expressionCondition = new ExpressionCondition(ExpressionOperation.SW.toString(), + ExpressionAttribute.USERNAME.toString(), "use"); + ExpressionCondition noConditions = new ExpressionCondition(ExpressionOperation.SW.toString(), + ExpressionAttribute.USERNAME.toString(), ""); + + //Making a List of expressionConditions for multi-attribute filtering + // userName co WithID + ExpressionCondition expressionCondition2 = new ExpressionCondition(ExpressionOperation.CO.toString(), + ExpressionAttribute.USERNAME.toString(), "WithID"); + // userName sw use and userName co WithID + OperationalCondition multiFiltering = + new OperationalCondition("AND", expressionCondition, expressionCondition2); + + // No filtering + assertEquals(6, admin.getUserListWithID(noConditions, "SECONDARY", null, 10, "", "NEXT", null, null).size()); + + // Single userName filtering initial query (no cursor) + assertEquals(6, admin.getUserListWithID(expressionCondition, "SECONDARY", null, 10, "", "NEXT", null, null) + .size()); + + // Single userName filtering - Forwards cursor pagination + assertEquals(3, admin.getUserListWithID(expressionCondition, "SECONDARY", null, 10, "user2WithID", "NEXT", + null, null).size()); + + // Single userName filtering - Backwards cursor pagination + assertEquals(2, admin.getUserListWithID(expressionCondition, "SECONDARY", null, 10, "user2WithID", "PREVIOUS", + null, null).size()); + + // Multi userName filtering - Forwards cursor pagination + assertEquals(4, admin.getUserListWithID(multiFiltering, "SECONDARY", null, 10, "", "NEXT", null, null).size()); + + // Multi userName filtering - Backwards cursor pagination + assertEquals(1, admin.getUserListWithID(multiFiltering, "SECONDARY", null, 10, "user2WithID", "PREVIOUS", + null, null).size()); + + // Setup for claim filtering + Map claims = new HashMap<>(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Alucard"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Tepes, Alucard"); + admin.addUser("SECONDARY/Alucard", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Akira"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Toriyama, Akira"); + admin.addUser("SECONDARY/Akira", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Alphonse"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Elrich, Alphonse"); + admin.addUser("SECONDARY/Alphonse", "pass100", null, claims, null, false); + claims.clear(); + claims.put(ClaimTestUtil.CLAIM_URI1, "Annie"); + claims.put(ClaimTestUtil.CLAIM_URI6, "Leonhart, Annie"); + admin.addUser("SECONDARY/Annie", "pass100", null, claims, null, false); + + // New user list: Akira, Alphonse, Alucard, Annie, user1WithID, user2, user2WithID, user3, user3WithID, + // user4WithID + // Having claims: Akira, Alphonse, Alucard, Annie + + // givenname sw A + ExpressionCondition claimFiltering1 = new ExpressionCondition( + ExpressionOperation.SW.toString(), "attr1", "A"); + // fullname sw T + ExpressionCondition claimFiltering2 = new ExpressionCondition( + ExpressionOperation.SW.toString(), "fullname", "T"); + // givenname sw A and fullname sw T + OperationalCondition multiClaimFiltering = new OperationalCondition("AND", claimFiltering1, claimFiltering2); + + // Single claim filtering forward cursor pagination + assertEquals(4, admin.getUserListWithID(claimFiltering1, "SECONDARY", null, 10, "", "NEXT", null, null).size()); + + // Single claim filtering backwards cursor pagination + assertEquals(2, admin.getUserListWithID(claimFiltering1, "SECONDARY", null, 10, "Alucard", "PREVIOUS", + null, null).size()); + + // Multi claim filtering forwards cursor pagination + assertEquals(2, admin.getUserListWithID(multiClaimFiltering, "SECONDARY", null, 10, "", "NEXT", null, null) + .size()); + + // Multi claim filtering backwards cursor pagination + assertEquals(1, admin.getUserListWithID(multiClaimFiltering, "SECONDARY", null, 10, "Alucard", "PREVIOUS", + null, null).size()); + + // Role configuration for group filtering + +// admin.addUser("user1", "pass1", new String[]{"role1"}, null, null, false); + admin.addRole("SECONDARY/Manager", new String[]{"SECONDARY/Alucard", "SECONDARY/Akira", "SECONDARY/Alphonse", + "SECONDARY/Annie", "SECONDARY/user2", "SECONDARY/user2WithID", "SECONDARY/user3", + "SECONDARY/user3WithID"}, null); + admin.addRole("SECONDARY/HeadManager", new String[]{"SECONDARY/Alucard", "SECONDARY/Akira", + "SECONDARY/Alphonse", "SECONDARY/Annie", "SECONDARY/user2", "SECONDARY/user2WithID", + "SECONDARY/user3"}, null); + // New role list: admin, Internal/everyone, role1WithID, role3, role4, Manager, HeadManager + + // groups eq Manager + ExpressionCondition groupFiltering = new ExpressionCondition( + ExpressionOperation.EQ.toString(), ExpressionAttribute.ROLE.toString(), "Manager"); + // group eq HeadManager + ExpressionCondition groupFiltering2 = new ExpressionCondition( + ExpressionOperation.EQ.toString(), ExpressionAttribute.ROLE.toString(), "HeadManager"); + // groups eq Manager and groups eq HeadManager + OperationalCondition multiGroupFiltering = new OperationalCondition("AND", groupFiltering, groupFiltering2); + + // Group Filtering forwards cursor pagination + assertEquals(3, admin.getUserListWithID(groupFiltering, "SECONDARY", null, 10, "user2", "NEXT", null, null) + .size()); + + // Group Filtering backwards cursor pagination + assertEquals(6, admin.getUserListWithID(groupFiltering, "SECONDARY", null, 10, "user3", "PREVIOUS", null, null) + .size()); + + // Multi-group filtering forwards cursor pagination + assertEquals(2, admin.getUserListWithID(multiGroupFiltering, "SECONDARY", null, 10, "user2", "NEXT", null, null) + .size()); + + // Multi-group filtering backwards cursor pagination + assertEquals(3, admin.getUserListWithID(multiGroupFiltering, "SECONDARY", null, 10, "Annie", "PREVIOUS", + null, null).size()); + + // groups eq Manager and groups eq HeadManager and userName sw use + OperationalCondition groupAndUserNameFilter = + new OperationalCondition("AND", multiGroupFiltering, expressionCondition); + + // Multi-group filtering and userName filtering forward cursor pagination + assertEquals(3, admin.getUserListWithID(groupAndUserNameFilter, "SECONDARY", null, 10, "", "NEXT", null, null) + .size()); + + // Multi-group filtering and userName filtering backwards cursor pagination + assertEquals(1, admin.getUserListWithID(groupAndUserNameFilter, "SECONDARY", null, 10, "user2WithID", + "PREVIOUS", null, null).size()); + + // givenname sw A and groups eq Manager + OperationalCondition singleClaimAndGroupFilter = + new OperationalCondition("AND", claimFiltering1, groupFiltering); + // givenname sw A and groups eq Manager and groups eq HeadManager + OperationalCondition singleClaimAndMultiGroupFilter = + new OperationalCondition("AND", claimFiltering1, multiGroupFiltering); + // givenname sw A and fullname sw T and groups eq Manager and groups eq HeadManager + OperationalCondition multiGroupAndMultiClaimFilter = + new OperationalCondition("AND", multiClaimFiltering, multiGroupFiltering); + + // Having claims + In the manager and HeadManager groups: Akira, Alphonse, Alucard, Annie + + // Single group and claim filtering forward cursor pagination + assertEquals(3, admin.getUserListWithID(singleClaimAndGroupFilter, "SECONDARY", null, 10, "Akira", "NEXT", + null, null).size()); + + // Multi-group filtering and single claim filtering forward cursor pagination + assertEquals(4, admin.getUserListWithID(singleClaimAndMultiGroupFilter, "SECONDARY", null, 10, "", "NEXT", + null, null).size()); + + // Multi-group filtering and multi-claim filtering forward cursor pagination + assertEquals(1, admin.getUserListWithID(multiGroupAndMultiClaimFilter, "SECONDARY", null, 10, "Akira", "NEXT", + null, null).size()); + } + public void test195GetRoleListOfUserWithID() throws UserStoreException { assertEquals(2, admin.getRoleListOfUserWithID(userId1).size());