FIXES #14396: Exclude empty test suites from quality page (#14511)

* fix: exclude empty test suites

* style: ran java linting

* fix: update expected test results
This commit is contained in:
Teddy 2023-12-28 14:25:49 +01:00 committed by GitHub
parent 0b561f354a
commit 3886842bb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 0 deletions

View File

@ -58,6 +58,7 @@ public class ListFilter {
condition = addCondition(condition, getTestCaseCondition()); condition = addCondition(condition, getTestCaseCondition());
condition = addCondition(condition, getTestSuiteTypeCondition()); condition = addCondition(condition, getTestSuiteTypeCondition());
condition = addCondition(condition, getTestSuiteFQNCondition()); condition = addCondition(condition, getTestSuiteFQNCondition());
condition = addCondition(condition, getEmptyTestSuiteCondition());
condition = addCondition(condition, getDomainCondition()); condition = addCondition(condition, getDomainCondition());
condition = addCondition(condition, getEntityFQNHashCondition()); condition = addCondition(condition, getEntityFQNHashCondition());
condition = addCondition(condition, getTestCaseResolutionStatusType()); condition = addCondition(condition, getTestCaseResolutionStatusType());
@ -227,6 +228,20 @@ public class ListFilter {
} }
} }
private String getEmptyTestSuiteCondition() {
String includeEmptyTestSuites = getQueryParam("includeEmptyTestSuites");
if (includeEmptyTestSuites == null || Boolean.parseBoolean(includeEmptyTestSuites)) {
// if we want to include empty test suites, then we don't need to add a condition
return "";
}
if (Boolean.TRUE.equals(DatasourceConfig.getInstance().isMySQL())) {
return "!JSON_CONTAINS(json, JSON_ARRAY() , '$.testCaseResultSummary')";
}
return "jsonb_array_length(json#>'{testCaseResultSummary}') != 0";
}
private String getFqnPrefixCondition(String tableName, String fqnPrefix) { private String getFqnPrefixCondition(String tableName, String fqnPrefix) {
return tableName == null return tableName == null
? String.format( ? String.format(

View File

@ -125,6 +125,12 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
schema = @Schema(type = "string", example = "executable")) schema = @Schema(type = "string", example = "executable"))
@QueryParam("testSuiteType") @QueryParam("testSuiteType")
String testSuiteType, String testSuiteType,
@Parameter(
description = "Include empty test suite in the response.",
schema = @Schema(type = "boolean", example = "true"))
@QueryParam("includeEmptyTestSuites")
@DefaultValue("true")
Boolean includeEmptyTestSuites,
@Parameter( @Parameter(
description = "Returns list of test definitions before this cursor", description = "Returns list of test definitions before this cursor",
schema = @Schema(type = "string")) schema = @Schema(type = "string"))
@ -143,6 +149,7 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
Include include) { Include include) {
ListFilter filter = new ListFilter(include); ListFilter filter = new ListFilter(include);
filter.addQueryParam("testSuiteType", testSuiteType); filter.addQueryParam("testSuiteType", testSuiteType);
filter.addQueryParam("includeEmptyTestSuites", includeEmptyTestSuites);
EntityUtil.Fields fields = getFields(fieldsParam); EntityUtil.Fields fields = getFields(fieldsParam);
ResourceContext<?> resourceContext = getResourceContext(); ResourceContext<?> resourceContext = getResourceContext();

View File

@ -356,6 +356,10 @@ public class TestSuiteResourceTest extends EntityResourceTest<TestSuite, CreateT
queryParams.put("testSuiteType", "logical"); queryParams.put("testSuiteType", "logical");
testSuiteResultList = listEntities(queryParams, ADMIN_AUTH_HEADERS); testSuiteResultList = listEntities(queryParams, ADMIN_AUTH_HEADERS);
testSuiteResultList.getData().forEach(ts -> assertEquals(false, ts.getExecutable())); testSuiteResultList.getData().forEach(ts -> assertEquals(false, ts.getExecutable()));
queryParams.put("includeEmptyTestSuites", "false");
testSuiteResultList = listEntities(queryParams, ADMIN_AUTH_HEADERS);
assertEquals(0, testSuiteResultList.getData().size());
} }
@Test @Test

View File

@ -145,6 +145,7 @@ export const TestSuites = ({ summaryPanel }: { summaryPanel: ReactNode }) => {
const result = await getListTestSuites({ const result = await getListTestSuites({
...params, ...params,
fields: 'owner,summary', fields: 'owner,summary',
includeEmptyTestSuites: false,
testSuiteType: testSuiteType:
tab === DataQualityPageTabs.TABLES tab === DataQualityPageTabs.TABLES
? TestSuiteType.executable ? TestSuiteType.executable

View File

@ -102,6 +102,7 @@ describe('TestSuites component', () => {
).toBeInTheDocument(); ).toBeInTheDocument();
expect(mockGetListTestSuites).toHaveBeenCalledWith({ expect(mockGetListTestSuites).toHaveBeenCalledWith({
fields: 'owner,summary', fields: 'owner,summary',
includeEmptyTestSuites: false,
limit: 15, limit: 15,
testSuiteType: 'executable', testSuiteType: 'executable',
}); });
@ -138,6 +139,7 @@ describe('TestSuites component', () => {
).toBeInTheDocument(); ).toBeInTheDocument();
expect(mockGetListTestSuites).toHaveBeenCalledWith({ expect(mockGetListTestSuites).toHaveBeenCalledWith({
fields: 'owner,summary', fields: 'owner,summary',
includeEmptyTestSuites: false,
limit: 15, limit: 15,
testSuiteType: 'logical', testSuiteType: 'logical',
}); });

View File

@ -34,6 +34,7 @@ export enum TestSuiteType {
export type ListTestSuitePrams = ListParams & { export type ListTestSuitePrams = ListParams & {
testSuiteType?: TestSuiteType; testSuiteType?: TestSuiteType;
includeEmptyTestSuites?: boolean;
}; };
export type ListTestCaseParams = ListParams & { export type ListTestCaseParams = ListParams & {