From d29a230726c27128103d54e77b69af0c40cadf1b Mon Sep 17 00:00:00 2001 From: Sriharsha Chintalapani Date: Tue, 6 Sep 2022 12:30:52 -0700 Subject: [PATCH] Fix #7104: Add support for get resource permission by FQN (#7270) --- .../catalog/jdbi3/TableRepository.java | 147 ------------------ .../resources/databases/TableResource.java | 102 ------------ .../permissions/PermissionsResource.java | 33 ++++ .../databases/TableResourceTest.java | 131 ---------------- .../permissions/PermissionsResourceTest.java | 11 ++ .../integration/ometa/test_ometa_table_api.py | 132 ---------------- 6 files changed, 44 insertions(+), 512 deletions(-) diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java index ba57a8f0968..48a3a30b8cd 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java @@ -64,7 +64,6 @@ import org.openmetadata.catalog.resources.databases.TableResource; import org.openmetadata.catalog.tests.ColumnTest; import org.openmetadata.catalog.tests.CustomMetric; import org.openmetadata.catalog.tests.TableTest; -import org.openmetadata.catalog.tests.type.TestCaseResult; import org.openmetadata.catalog.type.Column; import org.openmetadata.catalog.type.ColumnJoin; import org.openmetadata.catalog.type.ColumnProfile; @@ -397,152 +396,6 @@ public class TableRepository extends EntityRepository { return table.withTableQueries(getQueries(table)); } - @Transaction - public Table addTableTest(UUID tableId, TableTest tableTest) throws IOException { - // Validate the request content - Table table = dao.findEntityById(tableId); - // if ID is not passed we treat it as a new test case being added - List storedTableTests = getTableTests(table); - // we will override any test case name passed by user/client with tableName + testType - // our assumption is there is only one instance of a test type as of now. - tableTest.setName(table.getName() + "." + tableTest.getTestCase().getTableTestType().toString()); - Map storedMapTableTests = new HashMap<>(); - if (storedTableTests != null) { - for (TableTest t : storedTableTests) { - storedMapTableTests.put(t.getName(), t); - } - } - // existing test, use the previous UUID - if (storedMapTableTests.containsKey(tableTest.getName())) { - TableTest prevTableTest = storedMapTableTests.get(tableTest.getName()); - tableTest.setId(prevTableTest.getId()); - // process test result - if (!nullOrEmpty(tableTest.getResults())) { - List prevTestCaseResults = prevTableTest.getResults(); - prevTestCaseResults.addAll(tableTest.getResults()); - tableTest.setResults(prevTestCaseResults); - } - } - - storedMapTableTests.put(tableTest.getName(), tableTest); - List updatedTests = new ArrayList<>(storedMapTableTests.values()); - daoCollection - .entityExtensionDAO() - .insert(tableId.toString(), "table.tableTests", "tableTest", JsonUtils.pojoToJson(updatedTests)); - setFields(table, Fields.EMPTY_FIELDS); - // return the only test instead of querying all tests and results - return table.withTableTests(List.of(tableTest)); - } - - @Transaction - public Table deleteTableTest(UUID tableId, String tableTestType) throws IOException { - // Validate the request content - Table table = dao.findEntityById(tableId); - // if ID is not passed we treat it as a new test case being added - List storedTableTests = getTableTests(table); - // we will override any test case name passed by user/client with tableName + testType - // our assumption is there is only one instance of a test type as of now. - String tableTestName = table.getName() + "." + tableTestType; - Map storedMapTableTests = new HashMap<>(); - if (storedTableTests != null) { - for (TableTest t : storedTableTests) { - storedMapTableTests.put(t.getName(), t); - } - } - if (!storedMapTableTests.containsKey(tableTestName)) { - throw new EntityNotFoundException(String.format("Failed to find %s for %s", tableTestName, table.getName())); - } - TableTest deleteTableTest = storedMapTableTests.get(tableTestName); - storedMapTableTests.remove(tableTestName); - List updatedTests = new ArrayList<>(storedMapTableTests.values()); - daoCollection - .entityExtensionDAO() - .insert(tableId.toString(), "table.tableTests", "tableTest", JsonUtils.pojoToJson(updatedTests)); - return table.withTableTests(List.of(deleteTableTest)); - } - - @Transaction - public Table addColumnTest(UUID tableId, ColumnTest columnTest) throws IOException { - // Validate the request content - Table table = dao.findEntityById(tableId); - String columnName = columnTest.getColumnName(); - validateColumn(table, columnName); - // we will override any test case name passed by user/client with columnName + testType - // our assumption is there is only one instance of a test type as of now. - columnTest.setName(columnName + "." + columnTest.getTestCase().getColumnTestType().toString()); - List storedColumnTests = getColumnTests(table, columnName); - Map storedMapColumnTests = new HashMap<>(); - if (storedColumnTests != null) { - for (ColumnTest ct : storedColumnTests) { - storedMapColumnTests.put(ct.getName(), ct); - } - } - - // existingTest use the previous UUID - if (storedMapColumnTests.containsKey(columnTest.getName())) { - ColumnTest prevColumnTest = storedMapColumnTests.get(columnTest.getName()); - columnTest.setId(prevColumnTest.getId()); - - // process test results - if (!nullOrEmpty(columnTest.getResults())) { - List prevTestCaseResults = prevColumnTest.getResults(); - prevTestCaseResults.addAll(columnTest.getResults()); - columnTest.setResults(prevTestCaseResults); - } - } - - storedMapColumnTests.put(columnTest.getName(), columnTest); - List updatedTests = new ArrayList<>(storedMapColumnTests.values()); - String extension = TABLE_COLUMN_EXTENSION + columnName + ".tests"; - daoCollection - .entityExtensionDAO() - .insert(table.getId().toString(), extension, "columnTest", JsonUtils.pojoToJson(updatedTests)); - setFields(table, Fields.EMPTY_FIELDS); - // return the newly created/updated column test only - for (Column column : table.getColumns()) { - if (column.getName().equals(columnName)) { - column.setColumnTests(List.of(columnTest)); - } - } - return table; - } - - @Transaction - public Table deleteColumnTest(UUID tableId, String columnName, String columnTestType) throws IOException { - // Validate the request content - Table table = dao.findEntityById(tableId); - validateColumn(table, columnName); - // we will override any test case name passed by user/client with columnName + testType - // our assumption is there is only one instance of a test type as of now. - String columnTestName = columnName + "." + columnTestType; - List storedColumnTests = getColumnTests(table, columnName); - Map storedMapColumnTests = new HashMap<>(); - if (storedColumnTests != null) { - for (ColumnTest ct : storedColumnTests) { - storedMapColumnTests.put(ct.getName(), ct); - } - } - - if (!storedMapColumnTests.containsKey(columnTestName)) { - throw new EntityNotFoundException(String.format("Failed to find %s for %s", columnTestName, table.getName())); - } - - ColumnTest deleteColumnTest = storedMapColumnTests.get(columnTestName); - storedMapColumnTests.remove(columnTestName); - List updatedTests = new ArrayList<>(storedMapColumnTests.values()); - String extension = TABLE_COLUMN_EXTENSION + columnName + ".tests"; - daoCollection - .entityExtensionDAO() - .insert(table.getId().toString(), extension, "columnTest", JsonUtils.pojoToJson(updatedTests)); - // return the newly created/updated column test only - for (Column column : table.getColumns()) { - if (column.getName().equals(columnName)) { - column.setColumnTests(List.of(deleteColumnTest)); - } - } - return table; - } - @Transaction public Table addCustomMetric(UUID tableId, CustomMetric customMetric) throws IOException { // Validate the request content diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/databases/TableResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/databases/TableResource.java index 30a724193bb..2d0f0399147 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/databases/TableResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/databases/TableResource.java @@ -811,81 +811,6 @@ public class TableResource extends EntityResource { return addHref(uriInfo, table); } - @PUT - @Path("/{id}/tableTest") - @Operation( - operationId = "addTableTest", - summary = "Add table test cases", - tags = "tables", - description = "Add test cases to the table.", - responses = { - @ApiResponse( - responseCode = "200", - description = "OK", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = Table.class))) - }) - public Table addTableTest( - @Context UriInfo uriInfo, - @Context SecurityContext securityContext, - @Parameter(description = "Id of the table", schema = @Schema(type = "UUID")) @PathParam("id") UUID id, - @Valid CreateTableTest createTableTest) - throws IOException { - authorizer.authorizeAdmin(securityContext, true); - TableTest tableTest = getTableTest(securityContext, createTableTest); - Table table = dao.addTableTest(id, tableTest); - return addHref(uriInfo, table); - } - - @DELETE - @Path("/{id}/tableTest/{tableTestType}") - @Operation( - operationId = "deleteTableTest", - summary = "delete table test case", - tags = "tables", - description = "Delete test case from the table.", - responses = { - @ApiResponse( - responseCode = "200", - description = "OK", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = Table.class))) - }) - public Table deleteTableTest( - @Context UriInfo uriInfo, - @Context SecurityContext securityContext, - @Parameter(description = "Id of the table", schema = @Schema(type = "UUID")) @PathParam("id") UUID id, - @Parameter(description = "Table Test Type", schema = @Schema(type = "string")) @PathParam("tableTestType") - String tableTestType) - throws IOException { - authorizer.authorizeAdmin(securityContext, true); - Table table = dao.deleteTableTest(id, tableTestType); - return addHref(uriInfo, table); - } - - @PUT - @Path("/{id}/columnTest") - @Operation( - operationId = "addColumnTest", - summary = "Add column test cases", - tags = "tables", - description = "Add column test cases to the table.", - responses = { - @ApiResponse( - responseCode = "200", - description = "OK", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = Table.class))) - }) - public Table addColumnTest( - @Context UriInfo uriInfo, - @Context SecurityContext securityContext, - @Parameter(description = "Id of the table", schema = @Schema(type = "string")) @PathParam("id") String id, - @Valid CreateColumnTest createColumnTest) - throws IOException { - authorizer.authorizeAdmin(securityContext, true); - ColumnTest columnTest = getColumnTest(securityContext, createColumnTest); - Table table = dao.addColumnTest(UUID.fromString(id), columnTest); - return addHref(uriInfo, table); - } - @PUT @Path("/{id}/customMetric") @Operation( @@ -911,33 +836,6 @@ public class TableResource extends EntityResource { return addHref(uriInfo, table); } - @DELETE - @Path("/{id}/columnTest/{columnName}/{columnTestType}") - @Operation( - operationId = "deleteColumnTest", - summary = "delete column test case", - tags = "tables", - description = "Delete column test case from the table.", - responses = { - @ApiResponse( - responseCode = "200", - description = "OK", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = Table.class))) - }) - public Table deleteColumnTest( - @Context UriInfo uriInfo, - @Context SecurityContext securityContext, - @Parameter(description = "Id of the table", schema = @Schema(type = "UUID")) @PathParam("id") UUID id, - @Parameter(description = "column of the table", schema = @Schema(type = "string")) @PathParam("columnName") - String columnName, - @Parameter(description = "column Test Type", schema = @Schema(type = "string")) @PathParam("columnTestType") - String columnTestType) - throws IOException { - authorizer.authorizeAdmin(securityContext, true); - Table table = dao.deleteColumnTest(id, columnName, columnTestType); - return addHref(uriInfo, table); - } - @DELETE @Path("/{id}/customMetric/{columnName}/{customMetricName}") @Operation( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/permissions/PermissionsResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/permissions/PermissionsResource.java index de27ccecbba..54c39f9bd7b 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/permissions/PermissionsResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/permissions/PermissionsResource.java @@ -140,6 +140,39 @@ public class PermissionsResource { return authorizer.getPermission(securityContext, user, resourceContext); } + @GET + @Path("/{resource}/name/{name}") + @Operation( + operationId = "getResourcePermissionByName", + summary = "Get permissions for a given entity name for a logged in user", + tags = "permission", + responses = { + @ApiResponse( + responseCode = "200", + description = "Permissions for logged in user", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResourcePermissionList.class))) + }) + public ResourcePermission getPermission( + @Context SecurityContext securityContext, + @Parameter( + description = + "Permission for user specified in this query param. If not specified, the user is " + + "defaulted to the logged in user", + schema = @Schema(type = "string", example = "john")) + @QueryParam("user") + String user, + @Parameter(description = "Resource type", schema = @Schema(type = "String")) @PathParam("resource") + String resource, + @Parameter(description = "Entity Name", schema = @Schema(type = "String")) @PathParam("name") String name) { + EntityRepository entityRepository = Entity.getEntityRepository(resource); + ResourceContext resourceContext = + ResourceContext.builder().resource(resource).name(name).entityRepository(entityRepository).build(); + return authorizer.getPermission(securityContext, user, resourceContext); + } + static class ResourcePermissionList extends ResultList { @SuppressWarnings("unused") public ResourcePermissionList() {} diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java index 685b5bf0b28..d8cfda22cc1 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java @@ -117,7 +117,6 @@ import org.openmetadata.catalog.tests.table.TableColumnCountToEqual; import org.openmetadata.catalog.tests.table.TableRowCountToBeBetween; import org.openmetadata.catalog.tests.table.TableRowCountToEqual; import org.openmetadata.catalog.tests.type.TestCaseResult; -import org.openmetadata.catalog.tests.type.TestCaseStatus; import org.openmetadata.catalog.type.ChangeDescription; import org.openmetadata.catalog.type.Column; import org.openmetadata.catalog.type.ColumnConstraint; @@ -1391,136 +1390,6 @@ public class TableResourceTest extends EntityResourceTest { verifyCustomMetrics(table, c1, List.of(createMetric2)); } - @Test - void createUpdateDelete_tableColumnTests_200(TestInfo test) throws IOException { - Table table = createAndCheckEntity(createRequest(test), ADMIN_AUTH_HEADERS); - TableRowCountToEqual tableRowCountToEqual = new TableRowCountToEqual().withValue(100); - TableTestCase tableTestCase = - new TableTestCase() - .withTableTestType(TableTestCase.TableTestType.TABLE_ROW_COUNT_TO_EQUAL) - .withConfig(tableRowCountToEqual); - CreateTableTest createTableTest = new CreateTableTest().withTestCase(tableTestCase); - Table putResponse = putTableTest(table.getId(), createTableTest, ADMIN_AUTH_HEADERS); - verifyTableTest(putResponse.getName(), putResponse.getTableTests(), List.of(createTableTest)); - - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyTableTest(table.getName(), table.getTableTests(), List.of(createTableTest)); - - // Add result to tableTest - TestCaseResult testCaseResult1 = - new TestCaseResult() - .withResult("Rows equal to 100") - .withTestCaseStatus(TestCaseStatus.Success) - .withSampleData("Rows == 100") - .withTimestamp(100L); - createTableTest.setResult(testCaseResult1); - putResponse = putTableTest(table.getId(), createTableTest, ADMIN_AUTH_HEADERS); - verifyTableTest(putResponse.getName(), putResponse.getTableTests(), List.of(createTableTest)); - - TestCaseResult testCaseResult2 = - new TestCaseResult() - .withResult("Rows equal to 100") - .withTestCaseStatus(TestCaseStatus.Success) - .withSampleData("Rows == 100") - .withTimestamp(100L); - createTableTest.setResult(testCaseResult2); - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyTableTest(table.getName(), table.getTableTests(), List.of(createTableTest)); - TableRowCountToBeBetween tableRowCountToBeBetween = - new TableRowCountToBeBetween().withMinValue(100).withMaxValue(1000); - TableTestCase tableTestCase1 = - new TableTestCase() - .withTableTestType(TableTestCase.TableTestType.TABLE_ROW_COUNT_TO_BE_BETWEEN) - .withConfig(tableRowCountToBeBetween); - CreateTableTest createTableTest1 = new CreateTableTest().withTestCase(tableTestCase1); - putResponse = putTableTest(table.getId(), createTableTest1, ADMIN_AUTH_HEADERS); - // returns the current test thats updated or created - verifyTableTest(putResponse.getName(), putResponse.getTableTests(), List.of(createTableTest1)); - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyTableTest(table.getName(), table.getTableTests(), List.of(createTableTest, createTableTest1)); - - // update the test case - tableRowCountToBeBetween = new TableRowCountToBeBetween().withMaxValue(10).withMaxValue(100); - tableTestCase1.withConfig(tableRowCountToBeBetween); - putResponse = putTableTest(table.getId(), createTableTest1, ADMIN_AUTH_HEADERS); - // returns the current test thats updated or created - verifyTableTest(putResponse.getName(), putResponse.getTableTests(), List.of(createTableTest1)); - - Column c1 = table.getColumns().get(0); - ColumnValueLengthsToBeBetween columnValueLengthsToBeBetween = - new ColumnValueLengthsToBeBetween().withMaxLength(100).withMinLength(10); - ColumnTestCase columnTestCase = - new ColumnTestCase() - .withColumnTestType(ColumnTestCase.ColumnTestType.COLUMN_VALUE_LENGTHS_TO_BE_BETWEEN) - .withConfig(columnValueLengthsToBeBetween); - CreateColumnTest createColumnTest = - new CreateColumnTest().withColumnName(c1.getName()).withTestCase(columnTestCase); - putResponse = putColumnTest(table.getId(), createColumnTest, ADMIN_AUTH_HEADERS); - verifyColumnTest(putResponse, c1, List.of(createColumnTest)); - - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyTableTest(table.getName(), table.getTableTests(), List.of(createTableTest, createTableTest1)); - verifyColumnTest(table, c1, List.of(createColumnTest)); - - // Add result to columnTest - TestCaseResult colTestCaseResult = - new TestCaseResult() - .withResult("min is > 100 and max < 1000") - .withTestCaseStatus(TestCaseStatus.Success) - .withSampleData("minValue is 100 and maxValue is 1000") - .withTimestamp(100L); - createColumnTest.setResult(colTestCaseResult); - putResponse = putColumnTest(table.getId(), createColumnTest, ADMIN_AUTH_HEADERS); - verifyColumnTest(putResponse, c1, List.of(createColumnTest)); - - ColumnValuesMissingCountToBeEqual columnValuesMissingCountToBeEqual = - new ColumnValuesMissingCountToBeEqual().withMissingCountValue(10); - ColumnTestCase columnTestCase1 = - new ColumnTestCase() - .withColumnTestType(ColumnTestCase.ColumnTestType.COLUMN_VALUES_MISSING_COUNT_TO_BE_EQUAL) - .withConfig(columnValuesMissingCountToBeEqual); - CreateColumnTest createColumnTest1 = - new CreateColumnTest().withColumnName(c1.getName()).withTestCase(columnTestCase1); - putResponse = putColumnTest(table.getId(), createColumnTest1, ADMIN_AUTH_HEADERS); - verifyColumnTest(putResponse, c1, List.of(createColumnTest1)); - - // update the test config - columnValuesMissingCountToBeEqual = new ColumnValuesMissingCountToBeEqual().withMissingCountValue(100); - columnTestCase1 = - new ColumnTestCase() - .withColumnTestType(ColumnTestCase.ColumnTestType.COLUMN_VALUES_MISSING_COUNT_TO_BE_EQUAL) - .withConfig(columnValuesMissingCountToBeEqual); - createColumnTest1 = new CreateColumnTest().withColumnName(c1.getName()).withTestCase(columnTestCase1); - - putResponse = putColumnTest(table.getId(), createColumnTest1, ADMIN_AUTH_HEADERS); - verifyColumnTest(putResponse, c1, List.of(createColumnTest1)); - - // Add result to columnTest - TestCaseResult colTestCaseResult1 = - new TestCaseResult() - .withResult("min is > 100 and max < 1000") - .withTestCaseStatus(TestCaseStatus.Success) - .withSampleData("minValue is 100 and maxValue is 1000") - .withTimestamp(100L); - createColumnTest.setResult(colTestCaseResult1); - putResponse = putColumnTest(table.getId(), createColumnTest, ADMIN_AUTH_HEADERS); - createColumnTest.setResult(colTestCaseResult1); - verifyColumnTest(putResponse, c1, List.of(createColumnTest)); - - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyColumnTest(table, c1, List.of(createColumnTest, createColumnTest1)); - - // delete the table test case - deleteTableTest(table.getId(), createTableTest1.getTestCase().getTableTestType().toString(), ADMIN_AUTH_HEADERS); - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyTableTest(table.getName(), table.getTableTests(), List.of(createTableTest)); - - // delete column test case - deleteColumnTest(table.getId(), c1.getName(), columnTestCase1.getColumnTestType().toString(), ADMIN_AUTH_HEADERS); - table = getEntity(table.getId(), "tests", ADMIN_AUTH_HEADERS); - verifyColumnTest(table, c1, List.of(createColumnTest)); - } - @Test void get_deletedTableWithDeleteLocation(TestInfo test) throws IOException { CreateTable create = createRequest(getEntityName(test), "description", "displayName", USER1_REF); diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java index 3a6643e9994..01355cc95a2 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java @@ -170,6 +170,10 @@ class PermissionsResourceTest extends CatalogApplicationTest { ResourcePermission actualPermission = getPermission(Entity.TABLE, table1.getId(), null, authHeaders); assertAllOperationsAllowed(actualPermission); + // get permissions by resource entity name + actualPermission = getPermissionByName(Entity.TABLE, table1.getFullyQualifiedName(), null, authHeaders); + assertAllOperationsAllowed(actualPermission); + // Admin getting permissions for a specific resource on for Data consumer actualPermission = getPermission(Entity.TABLE, table1.getId(), DATA_CONSUMER_USER_NAME, ADMIN_AUTH_HEADERS); assertAllOperationsAllowed(actualPermission); @@ -300,4 +304,11 @@ class PermissionsResourceTest extends CatalogApplicationTest { target = user != null ? target.queryParam("user", user) : target; return TestUtils.get(target, ResourcePermission.class, authHeaders); } + + public ResourcePermission getPermissionByName( + String resource, String name, String user, Map authHeaders) throws HttpResponseException { + WebTarget target = getResource("permissions/" + resource + "/name/" + name); + target = user != null ? target.queryParam("user", user) : target; + return TestUtils.get(target, ResourcePermission.class, authHeaders); + } } diff --git a/ingestion/tests/integration/ometa/test_ometa_table_api.py b/ingestion/tests/integration/ometa/test_ometa_table_api.py index eaf6859e5c9..4bd45927028 100644 --- a/ingestion/tests/integration/ometa/test_ometa_table_api.py +++ b/ingestion/tests/integration/ometa/test_ometa_table_api.py @@ -31,8 +31,6 @@ from metadata.generated.schema.api.services.createDatabaseService import ( CreateDatabaseServiceRequest, ) from metadata.generated.schema.api.teams.createUser import CreateUserRequest -from metadata.generated.schema.api.tests.createColumnTest import CreateColumnTestRequest -from metadata.generated.schema.api.tests.createTableTest import CreateTableTestRequest from metadata.generated.schema.entity.data.table import ( Column, ColumnJoins, @@ -56,18 +54,8 @@ from metadata.generated.schema.entity.services.databaseService import ( DatabaseService, DatabaseServiceType, ) -from metadata.generated.schema.tests.basic import TestCaseResult, TestCaseStatus -from metadata.generated.schema.tests.column.columnValuesToBeBetween import ( - ColumnValuesToBeBetween, -) -from metadata.generated.schema.tests.columnTest import ColumnTestCase, ColumnTestType -from metadata.generated.schema.tests.table.tableRowCountToEqual import ( - TableRowCountToEqual, -) -from metadata.generated.schema.tests.tableTest import TableTestCase, TableTestType from metadata.generated.schema.type.entityReference import EntityReference from metadata.generated.schema.type.usageRequest import UsageRequest -from metadata.ingestion.ometa.client import APIError from metadata.ingestion.ometa.ometa_api import OpenMetadata @@ -458,126 +446,6 @@ class OMetaTableTest(TestCase): assert res.id == entity_ref.id - def test_add_table_tests(self): - """ - Add tableTests to table instance - """ - - table = self.metadata.create_or_update(data=self.create) - - table_test = CreateTableTestRequest( - description="Testing something", - testCase=TableTestCase( - config=TableRowCountToEqual(value=100), - tableTestType=TableTestType.tableRowCountToEqual, - ), - ) - - table_with_test = self.metadata.add_table_test( - table=table, table_test=table_test - ) - - assert len(table_with_test.tableTests) == 1 - assert table_with_test.tableTests[0].testCase == table_test.testCase - - test_case_result = TestCaseResult( - result="some result", - timestamp=datetime.now().timestamp(), - testCaseStatus=TestCaseStatus.Success, - ) - - table_test_with_res = CreateTableTestRequest( - description="Testing something", - testCase=TableTestCase( - config=TableRowCountToEqual(value=100), - tableTestType=TableTestType.tableRowCountToEqual, - ), - result=test_case_result, - ) - - table_with_test_and_res = self.metadata.add_table_test( - table=table, table_test=table_test_with_res - ) - - assert len(table_with_test_and_res.tableTests[0].results) == 1 - assert ( - table_with_test_and_res.tableTests[0].results[0].testCaseStatus - == TestCaseStatus.Success - ) - - def test_add_column_tests(self): - """ - Add columnTests to table instance - """ - - table = self.metadata.create_or_update(data=self.create) - - col_test = CreateColumnTestRequest( - columnName="id", - testCase=ColumnTestCase( - config=ColumnValuesToBeBetween(minValue=1, maxValue=3), - columnTestType=ColumnTestType.columnValuesToBeBetween, - ), - ) - - updated_table = self.metadata.add_column_test(table=table, col_test=col_test) - - id_test = next( - iter([col for col in updated_table.columns if col.name.__root__ == "id"]), - None, - ) - - assert len(id_test.columnTests) == 1 - assert id_test.columnTests[0].testCase == col_test.testCase - - # Column needs to exist in the table! - with pytest.raises(APIError): - ko_test = CreateColumnTestRequest( - columnName="random_column", - testCase=ColumnTestCase( - config=ColumnValuesToBeBetween(minValue=1, maxValue=3), - columnTestType=ColumnTestType.columnValuesToBeBetween, - ), - ) - - self.metadata.add_column_test(table=table, col_test=ko_test) - - col_test_res = TestCaseResult( - result="some result", - timestamp=datetime.now().timestamp(), - testCaseStatus=TestCaseStatus.Success, - ) - - col_test_with_res = CreateColumnTestRequest( - columnName="id", - testCase=ColumnTestCase( - config=ColumnValuesToBeBetween(minValue=1, maxValue=3), - columnTestType=ColumnTestType.columnValuesToBeBetween, - ), - result=col_test_res, - ) - - table_with_test_and_res = self.metadata.add_column_test( - table=table, col_test=col_test_with_res - ) - - id_test_res = next( - iter( - [ - col - for col in table_with_test_and_res.columns - if col.name.__root__ == "id" - ] - ), - None, - ) - - assert len(id_test_res.columnTests[0].results) == 1 - assert ( - id_test_res.columnTests[0].results[0].testCaseStatus - == TestCaseStatus.Success - ) - def test_update_profile_sample(self): """ We can safely update the profile sample %