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, getTestSuiteTypeCondition());
condition = addCondition(condition, getTestSuiteFQNCondition());
condition = addCondition(condition, getEmptyTestSuiteCondition());
condition = addCondition(condition, getDomainCondition());
condition = addCondition(condition, getEntityFQNHashCondition());
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) {
return tableName == null
? String.format(

View File

@ -125,6 +125,12 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
schema = @Schema(type = "string", example = "executable"))
@QueryParam("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(
description = "Returns list of test definitions before this cursor",
schema = @Schema(type = "string"))
@ -143,6 +149,7 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
Include include) {
ListFilter filter = new ListFilter(include);
filter.addQueryParam("testSuiteType", testSuiteType);
filter.addQueryParam("includeEmptyTestSuites", includeEmptyTestSuites);
EntityUtil.Fields fields = getFields(fieldsParam);
ResourceContext<?> resourceContext = getResourceContext();

View File

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

View File

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

View File

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

View File

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