From 0ed67d69f754dea88c60554f531a15b52b708154 Mon Sep 17 00:00:00 2001 From: mosiac1 <88427079+mosiac1@users.noreply.github.com> Date: Thu, 5 Jan 2023 15:58:24 +0000 Subject: [PATCH] Fix User entity pagination when isBot flag is False (#9604) Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> --- .../service/jdbi3/CollectionDAO.java | 6 +-- .../resources/teams/UserResourceTest.java | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java index 668b7617210..ee68e9de2b4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java @@ -2439,7 +2439,7 @@ public interface CollectionDAO { mySqlCondition); postgresCondition = String.format( - "%s AND ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE ", postgresCondition); + "%s AND (ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE) ", postgresCondition); } } if (team == null && isAdminStr == null && isBotStr == null) { @@ -2484,7 +2484,7 @@ public interface CollectionDAO { mySqlCondition); postgresCondition = String.format( - "%s AND ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE ", postgresCondition); + "%s AND (ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE) ", postgresCondition); } } if (team == null && isAdminStr == null && isBotStr == null) { @@ -2536,7 +2536,7 @@ public interface CollectionDAO { mySqlCondition); postgresCondition = String.format( - "%s AND ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE ", postgresCondition); + "%s AND (ue.json#>'{isBot}' IS NULL OR ((ue.json#>'{isBot}')::boolean) = FALSE) ", postgresCondition); } } if (team == null && isAdminStr == null && isBotStr == null) { diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java index 73e904418b5..957d28974f5 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java @@ -419,6 +419,53 @@ public class UserResourceTest extends EntityResourceTest { assertEquals(initialUserCount - initialBotCount, users.getPaging().getTotal()); } + @Test + void get_listUsersWithFalseBotFilterPagination(TestInfo test) throws IOException { + TeamResourceTest teamResourceTest = new TeamResourceTest(); + Team team = teamResourceTest.createEntity(teamResourceTest.createRequest(test, 1), ADMIN_AUTH_HEADERS); + + Map queryParams = Map.of("isBot", "false", "team", team.getName()); + + // create 5 bot users + for (int i = 0; i < 5; i++) { + CreateUser create = createBotUserRequest(test, i).withTeams(List.of(team.getId())); + createAndCheckEntity(create, ADMIN_AUTH_HEADERS); + } + + // create 10 non-bot users + for (int i = 5; i < 15; i++) { + CreateUser create = createRequest(test, i).withTeams(List.of(team.getId())); + createAndCheckEntity(create, ADMIN_AUTH_HEADERS); + } + + ResultList users = listEntities(queryParams, 5, null, null, ADMIN_AUTH_HEADERS); + assertEquals(5, users.getData().size()); + assertEquals(10, users.getPaging().getTotal()); + // First page must contain "after" and should not have "before" + assertNotNull(users.getPaging().getAfter()); + assertNull(users.getPaging().getBefore()); + User user1 = users.getData().get(0); + + String after = users.getPaging().getAfter(); + users = listEntities(queryParams, 5, null, after, ADMIN_AUTH_HEADERS); + assertEquals(5, users.getData().size()); + assertEquals(10, users.getPaging().getTotal()); + // Third page must contain only "before" since it is the last page + assertNull(users.getPaging().getAfter()); + assertNotNull(users.getPaging().getBefore()); + User user2 = users.getData().get(0); + assertNotEquals(user1, user2); + + String before = users.getPaging().getBefore(); + users = listEntities(queryParams, 5, before, null, ADMIN_AUTH_HEADERS); + assertEquals(5, users.getData().size()); + assertEquals(10, users.getPaging().getTotal()); + // First page must contain only "after" + assertNotNull(users.getPaging().getAfter()); + assertNull(users.getPaging().getBefore()); + assertEquals(user1, users.getData().get(0)); + } + private CreateUser createBotUserRequest(TestInfo test, int index) { return createBotUserRequest(getEntityName(test, index)); }