mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-29 01:32:01 +00:00
MINOR: added a DELETE method for failedRowsSample (#15878)
* added a DELETE method for failedRowsSample * fixed tests * changed required permission to EDIT_SAMPLE_DATA * changed required permission to DELETE_SAMPLE_DATA * changed required permission to DELETE_TEST_CASE_FAILED_ROWS_SAMPLE * changed required permissions addFailedRowsSample -> EDIT_TEST_CASE_FAILED_ROWS_SAMPLE getFailedRowsSample -> VIEW_TEST_CASE_FAILED_ROWS_SAMPLE * removed op EditTestCaseFailedRowsSample * fixed tests * format
This commit is contained in:
parent
fb263158d5
commit
6349adb0ec
@ -666,7 +666,9 @@ public class TestCaseRepository extends EntityRepository<TestCase> {
|
||||
return new RestUtil.DeleteResponse<>(testCase, ENTITY_DELETED);
|
||||
}
|
||||
|
||||
/** Remove test case from test suite summary and update test suite */
|
||||
/**
|
||||
* Remove test case from test suite summary and update test suite
|
||||
*/
|
||||
@Transaction
|
||||
private void removeTestCaseFromTestSuiteResultSummary(UUID testSuiteId, String testCaseFqn) {
|
||||
TestSuite testSuite = Entity.getEntity(TEST_SUITE, testSuiteId, "*", Include.ALL, false);
|
||||
@ -723,8 +725,10 @@ public class TestCaseRepository extends EntityRepository<TestCase> {
|
||||
return testCase.withFailedRowsSample(tableData);
|
||||
}
|
||||
|
||||
public void deleteTestCaseFailedRowsSample(UUID id) {
|
||||
@Transaction
|
||||
public RestUtil.DeleteResponse<TableData> deleteTestCaseFailedRowsSample(UUID id) {
|
||||
daoCollection.entityExtensionDAO().delete(id, FAILED_ROWS_SAMPLE_EXTENSION);
|
||||
return new RestUtil.DeleteResponse<>(null, ENTITY_DELETED);
|
||||
}
|
||||
|
||||
public static class TestCaseFailureResolutionTaskWorkflow extends FeedRepository.TaskWorkflow {
|
||||
@ -740,7 +744,9 @@ public class TestCaseRepository extends EntityRepository<TestCase> {
|
||||
this.dataQualityDataTimeSeriesDao = Entity.getCollectionDAO().dataQualityDataTimeSeriesDao();
|
||||
}
|
||||
|
||||
/** If the task is resolved, we'll resolve the Incident with the given reason */
|
||||
/**
|
||||
* If the task is resolved, we'll resolve the Incident with the given reason
|
||||
*/
|
||||
@Override
|
||||
@Transaction
|
||||
public TestCase performTask(String userName, ResolveTask resolveTask) {
|
||||
|
||||
@ -961,7 +961,7 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
|
||||
UUID id,
|
||||
@Valid TableData tableData) {
|
||||
OperationContext operationContext =
|
||||
new OperationContext(entityType, MetadataOperation.EDIT_SAMPLE_DATA);
|
||||
new OperationContext(entityType, MetadataOperation.EDIT_TESTS);
|
||||
authorizer.authorize(securityContext, operationContext, getResourceContextById(id));
|
||||
TestCase testCase = repository.find(id, Include.NON_DELETED);
|
||||
if (testCase.getTestCaseResult() == null
|
||||
@ -992,7 +992,7 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
|
||||
@Parameter(description = "Id of the table", schema = @Schema(type = "UUID")) @PathParam("id")
|
||||
UUID id) {
|
||||
OperationContext operationContext =
|
||||
new OperationContext(entityType, MetadataOperation.VIEW_SAMPLE_DATA);
|
||||
new OperationContext(entityType, MetadataOperation.VIEW_TEST_CASE_FAILED_ROWS_SAMPLE);
|
||||
ResourceContext<?> resourceContext = getResourceContextById(id);
|
||||
TestCase testCase = repository.find(id, Include.NON_DELETED);
|
||||
authorizer.authorize(securityContext, operationContext, resourceContext);
|
||||
@ -1000,6 +1000,31 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
|
||||
return repository.getSampleData(testCase, authorizePII);
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Path("/{id}/failedRowsSample")
|
||||
@Operation(
|
||||
operationId = "deleteFailedRowsSample",
|
||||
summary = "Delete failed rows sample data",
|
||||
description = "Delete a sample of failed rows for this test case.",
|
||||
responses = {
|
||||
@ApiResponse(responseCode = "200", description = "OK"),
|
||||
@ApiResponse(
|
||||
responseCode = "404",
|
||||
description = "Failed rows sample data for test case {id} is not found.")
|
||||
})
|
||||
public Response deleteFailedRowsData(
|
||||
@Context UriInfo uriInfo,
|
||||
@Context SecurityContext securityContext,
|
||||
@Parameter(description = "Id of the table", schema = @Schema(type = "UUID")) @PathParam("id")
|
||||
UUID id) {
|
||||
OperationContext operationContext =
|
||||
new OperationContext(entityType, MetadataOperation.DELETE_TEST_CASE_FAILED_ROWS_SAMPLE);
|
||||
ResourceContext<?> resourceContext = getResourceContextById(id);
|
||||
authorizer.authorize(securityContext, operationContext, resourceContext);
|
||||
RestUtil.DeleteResponse<TableData> response = repository.deleteTestCaseFailedRowsSample(id);
|
||||
return response.toResponse();
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Path("/logicalTestCases")
|
||||
@Operation(
|
||||
|
||||
@ -33,7 +33,6 @@ import static org.openmetadata.service.util.TestUtils.assertListNull;
|
||||
import static org.openmetadata.service.util.TestUtils.assertResponse;
|
||||
import static org.openmetadata.service.util.TestUtils.assertResponseContains;
|
||||
import static org.openmetadata.service.util.TestUtils.dateToTimestamp;
|
||||
import static org.openmetadata.service.util.TestUtils.patch;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
@ -73,7 +72,6 @@ import org.openmetadata.schema.tests.type.TestSummary;
|
||||
import org.openmetadata.schema.type.ChangeDescription;
|
||||
import org.openmetadata.schema.type.Column;
|
||||
import org.openmetadata.schema.type.ColumnDataType;
|
||||
import org.openmetadata.schema.type.MetadataOperation;
|
||||
import org.openmetadata.schema.type.TableData;
|
||||
import org.openmetadata.schema.type.TagLabel;
|
||||
import org.openmetadata.schema.type.TaskStatus;
|
||||
@ -819,6 +817,12 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
TestUtils.put(target, data, CREATED, authHeaders);
|
||||
}
|
||||
|
||||
public void deleteTestCaseResult(String fqn, Map<String, String> authHeaders)
|
||||
throws HttpResponseException {
|
||||
WebTarget target = getCollection().path("/" + fqn + "/testCaseResult");
|
||||
TestUtils.delete(target, authHeaders);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void post_entity_as_non_admin_401(TestInfo test) {
|
||||
@ -2104,7 +2108,7 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
}
|
||||
|
||||
@Test
|
||||
void put_failedRowSample_200(TestInfo test) throws IOException, ParseException {
|
||||
void put_and_delete_failedRowSample_200(TestInfo test) throws IOException, ParseException {
|
||||
CreateTestCase create =
|
||||
createRequest(test)
|
||||
.withEntityLink(TABLE_LINK)
|
||||
@ -2125,7 +2129,7 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
|
||||
// Cannot set failed sample for a non-failing test case
|
||||
assertResponse(
|
||||
() -> putSampleData(testCase, columns, rows, ADMIN_AUTH_HEADERS),
|
||||
() -> putFailedRowsSample(testCase, columns, rows, ADMIN_AUTH_HEADERS),
|
||||
BAD_REQUEST,
|
||||
"Failed rows can only be added to a failed test case.");
|
||||
|
||||
@ -2138,17 +2142,55 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
.withTimestamp(TestUtils.dateToTimestamp("2024-01-01")),
|
||||
ADMIN_AUTH_HEADERS);
|
||||
// Sample data can be put as an ADMIN
|
||||
putSampleData(testCase, columns, rows, ADMIN_AUTH_HEADERS);
|
||||
putFailedRowsSample(testCase, columns, rows, ADMIN_AUTH_HEADERS);
|
||||
|
||||
// Sample data can be put as owner
|
||||
rows.get(0).set(1, 2); // Change value 1 to 2
|
||||
putSampleData(testCase, columns, rows, authHeaders(USER1.getName()));
|
||||
putFailedRowsSample(testCase, columns, rows, authHeaders(USER1.getName()));
|
||||
|
||||
// Sample data can't be put as non-owner, non-admin
|
||||
assertResponse(
|
||||
() -> putSampleData(testCase, columns, rows, authHeaders(USER2.getName())),
|
||||
() -> putFailedRowsSample(testCase, columns, rows, authHeaders(USER2.getName())),
|
||||
FORBIDDEN,
|
||||
permissionNotAllowed(USER2.getName(), List.of(MetadataOperation.EDIT_SAMPLE_DATA)));
|
||||
permissionNotAllowed(USER2.getName(), List.of(EDIT_TESTS)));
|
||||
|
||||
deleteFailedRowsSample(testCase, ADMIN_AUTH_HEADERS);
|
||||
|
||||
assertResponse(
|
||||
() -> getSampleData(testCase.getId(), ADMIN_AUTH_HEADERS),
|
||||
NOT_FOUND,
|
||||
FAILED_ROWS_SAMPLE_EXTENSION + " instance for " + testCase.getId() + " not found");
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolved_test_case_deletes_sample_data(TestInfo test) throws IOException, ParseException {
|
||||
CreateTestCase create =
|
||||
createRequest(test)
|
||||
.withEntityLink(TABLE_LINK)
|
||||
.withTestSuite(TEST_SUITE1.getFullyQualifiedName())
|
||||
.withTestDefinition(TEST_DEFINITION3.getFullyQualifiedName())
|
||||
.withParameterValues(
|
||||
List.of(
|
||||
new TestCaseParameterValue().withValue("100").withName("missingCountValue")));
|
||||
TestCase testCase = createAndCheckEntity(create, ADMIN_AUTH_HEADERS);
|
||||
List<String> columns = Arrays.asList(C1, C2, C3);
|
||||
|
||||
// Add 3 rows of sample data for 3 columns
|
||||
List<List<Object>> rows =
|
||||
Arrays.asList(
|
||||
Arrays.asList("c1Value1", 1, true),
|
||||
Arrays.asList("c1Value2", null, false),
|
||||
Arrays.asList("c1Value3", 3, true));
|
||||
|
||||
putTestCaseResult(
|
||||
testCase.getFullyQualifiedName(),
|
||||
new TestCaseResult()
|
||||
.withResult("result")
|
||||
.withTestCaseStatus(TestCaseStatus.Failed)
|
||||
.withTimestamp(TestUtils.dateToTimestamp("2024-01-01")),
|
||||
ADMIN_AUTH_HEADERS);
|
||||
|
||||
putFailedRowsSample(testCase, columns, rows, ADMIN_AUTH_HEADERS);
|
||||
|
||||
// resolving test case deletes the sample data
|
||||
TestCaseResult testCaseResult =
|
||||
@ -2192,7 +2234,7 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
List<List<Object>> rows =
|
||||
Arrays.asList(List.of("c1Value1"), List.of("c1Value2"), List.of("c1Value3"));
|
||||
// add sample data
|
||||
putSampleData(testCase, columns, rows, ADMIN_AUTH_HEADERS);
|
||||
putFailedRowsSample(testCase, columns, rows, ADMIN_AUTH_HEADERS);
|
||||
// assert values are not masked for the table owner
|
||||
TableData data = getSampleData(testCase.getId(), authHeaders(USER1.getName()));
|
||||
assertFalse(
|
||||
@ -2213,21 +2255,28 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
|
||||
.count());
|
||||
}
|
||||
|
||||
private void putSampleData(
|
||||
private void putFailedRowsSample(
|
||||
TestCase testCase,
|
||||
List<String> columns,
|
||||
List<List<Object>> rows,
|
||||
Map<String, String> authHeaders)
|
||||
throws IOException {
|
||||
TableData tableData = new TableData().withColumns(columns).withRows(rows);
|
||||
TestCase putResponse = putSampleData(testCase.getId(), tableData, authHeaders);
|
||||
TestCase putResponse = putFailedRowsSample(testCase.getId(), tableData, authHeaders);
|
||||
assertEquals(tableData, putResponse.getFailedRowsSample());
|
||||
|
||||
TableData data = getSampleData(testCase.getId(), ADMIN_AUTH_HEADERS);
|
||||
assertEquals(tableData, data);
|
||||
}
|
||||
|
||||
public TestCase putSampleData(UUID testCaseId, TableData data, Map<String, String> authHeaders)
|
||||
private TestCase deleteFailedRowsSample(TestCase testCase, Map<String, String> authHeaders)
|
||||
throws IOException {
|
||||
WebTarget target = getResource(testCase.getId()).path("/failedRowsSample");
|
||||
return TestUtils.delete(target, TestCase.class, authHeaders);
|
||||
}
|
||||
|
||||
public TestCase putFailedRowsSample(
|
||||
UUID testCaseId, TableData data, Map<String, String> authHeaders)
|
||||
throws HttpResponseException {
|
||||
WebTarget target = getResource(testCaseId).path("/failedRowsSample");
|
||||
return TestUtils.put(target, data, TestCase.class, OK, authHeaders);
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
"ViewQueries",
|
||||
"ViewDataProfile",
|
||||
"ViewSampleData",
|
||||
"ViewTestCaseFailedRowsSample",
|
||||
"EditAll",
|
||||
"EditCustomFields",
|
||||
"EditDataProfile",
|
||||
@ -42,7 +43,8 @@
|
||||
"EditUsers",
|
||||
"EditLifeCycle",
|
||||
"EditKnowledgePanel",
|
||||
"EditPage"
|
||||
"EditPage",
|
||||
"DeleteTestCaseFailedRowsSample"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user