From cdcc51d05cb3383dbc236e20fe04e14c76b7e4c0 Mon Sep 17 00:00:00 2001 From: Vivek Ratnavel Subramanian Date: Mon, 1 Aug 2022 04:46:17 -0700 Subject: [PATCH] Backend: Users api throws error in Postgres for isBot flag (#6470) --- .../catalog/jdbi3/CollectionDAO.java | 6 +-- .../resources/teams/UserResourceTest.java | 41 ++++++++++++++++++- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java index f44bef5a66e..2515c973893 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java @@ -2014,7 +2014,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 && isAdmin == null && isBot == null) { @@ -2061,7 +2061,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 && isAdmin == null && isBot == null) { @@ -2115,7 +2115,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 && isAdmin == null && isBot == null) { diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/teams/UserResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/teams/UserResourceTest.java index 276584e91f1..77094a4625e 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/teams/UserResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/teams/UserResourceTest.java @@ -35,7 +35,6 @@ import static org.openmetadata.catalog.util.TestUtils.TEST_AUTH_HEADERS; import static org.openmetadata.catalog.util.TestUtils.TEST_USER_NAME; import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE; import static org.openmetadata.catalog.util.TestUtils.assertDeleted; -import static org.openmetadata.catalog.util.TestUtils.assertEntityReferences; import static org.openmetadata.catalog.util.TestUtils.assertListNotNull; import static org.openmetadata.catalog.util.TestUtils.assertListNull; import static org.openmetadata.catalog.util.TestUtils.assertResponse; @@ -452,6 +451,46 @@ public class UserResourceTest extends EntityResourceTest { assertTrue(users.getData().stream().anyMatch(isUser2)); } + @Test + void get_listUsersWithBotFilter_200_ok(TestInfo test) throws IOException { + ResultList users = listEntities(null, 100_000, null, null, ADMIN_AUTH_HEADERS); + int initialUserCount = users.getPaging().getTotal(); + Map botQueryParams = new HashMap<>(); + botQueryParams.put("isBot", "true"); + ResultList bots = listEntities(botQueryParams, 100_000, null, null, ADMIN_AUTH_HEADERS); + int initialBotCount = bots.getPaging().getTotal(); + + // Create 3 bot users + CreateUser create = createRequest(test, 0).withIsBot(true); + User bot0 = createAndCheckEntity(create, ADMIN_AUTH_HEADERS); + create = createRequest(test, 1).withIsBot(true); + User bot1 = createAndCheckEntity(create, ADMIN_AUTH_HEADERS); + create = createRequest(test, 2).withIsBot(true); + User bot2 = createAndCheckEntity(create, ADMIN_AUTH_HEADERS); + + Predicate isBot0 = u -> u.getId().equals(bot0.getId()); + Predicate isBot1 = u -> u.getId().equals(bot1.getId()); + Predicate isBot2 = u -> u.getId().equals(bot2.getId()); + + users = listEntities(null, 100_000, null, null, ADMIN_AUTH_HEADERS); + assertEquals(initialUserCount + 3, users.getPaging().getTotal()); + + // list bot users + bots = listEntities(botQueryParams, 100_000, null, null, ADMIN_AUTH_HEADERS); + assertEquals(initialBotCount + 3, bots.getData().size()); + assertEquals(initialBotCount + 3, bots.getPaging().getTotal()); + assertTrue(bots.getData().stream().anyMatch(isBot0)); + assertTrue(bots.getData().stream().anyMatch(isBot1)); + assertTrue(bots.getData().stream().anyMatch(isBot2)); + + Map queryParams = new HashMap<>(); + queryParams.put("isBot", "false"); + + // list users (not bots) + users = listEntities(queryParams, 100_000, null, null, ADMIN_AUTH_HEADERS); + assertEquals(initialUserCount - initialBotCount, users.getPaging().getTotal()); + } + @Test void get_listUsersWithTeamsPagination(TestInfo test) throws IOException { TeamResourceTest teamResourceTest = new TeamResourceTest();