MINOR fix test case search filtering (#15785)

* fix: test case filtering from search endpoint

* style: ran java linting

* fix: updated test case EL in list test
This commit is contained in:
Teddy 2024-04-03 11:01:54 +02:00 committed by GitHub
parent 205850be79
commit dd53f45cc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 50 additions and 8 deletions

View File

@ -46,6 +46,7 @@ import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.Filter;
import org.openmetadata.service.jdbi3.ListFilter;
import org.openmetadata.service.jdbi3.TestCaseRepository;
import org.openmetadata.service.resources.Collection;
@ -369,7 +370,7 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
}
ResourceContextInterface resourceContextInterface =
getResourceContext(entityLink, new ListFilter());
getResourceContext(entityLink, searchListFilter);
// Override OperationContext to change the entity to table and operation from VIEW_ALL to
// VIEW_TESTS
OperationContext operationContext =
@ -952,7 +953,7 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
return repository.addTestCasesToLogicalTestSuite(testSuite, testCaseIds).toResponse();
}
private ResourceContextInterface getResourceContext(String entityLink, ListFilter filter) {
private ResourceContextInterface getResourceContext(String entityLink, Filter filter) {
ResourceContextInterface resourceContext;
if (entityLink != null) {
EntityLink entityLinkParsed = EntityLink.parse(entityLink);

View File

@ -122,15 +122,17 @@ public class SearchListFilter extends Filter<SearchListFilter> {
String status = getQueryParam("testCaseStatus");
String testSuiteId = getQueryParam("testSuiteId");
String type = getQueryParam("testCaseType");
String testPlatform = getQueryParam("testPlatform");
String testPlatform = getQueryParam("testPlatforms");
String startTimestamp = getQueryParam("startTimestamp");
String endTimestamp = getQueryParam("endTimestamp");
if (entityFQN != null) {
conditions.add(
includeAllTests
? String.format("{\"regexp\": {\"entityFQN\": \"%s.*\"}}", entityFQN)
: String.format("{\"term\": {\"entityFQN\": \"%s\"}}", entityFQN));
? String.format(
"{\"prefix\": {\"entityFQN\": \"%s\"}}", escapeDoubleQuotes(entityFQN))
: String.format(
"{\"term\": {\"entityFQN\": \"%s\"}}", escapeDoubleQuotes(entityFQN)));
}
if (testSuiteId != null) {
@ -153,7 +155,9 @@ public class SearchListFilter extends Filter<SearchListFilter> {
}
if (testPlatform != null) {
conditions.add(String.format("{\"term\": {\"testPlatforms\": \"%s\"}}", testPlatform));
String platforms =
Arrays.stream(testPlatform.split(",")).collect(Collectors.joining("\", \"", "\"", "\""));
conditions.add(String.format("{\"terms\": {\"testPlatforms\": [%s]}}", platforms));
}
if (startTimestamp != null && endTimestamp != null) {
@ -165,4 +169,8 @@ public class SearchListFilter extends Filter<SearchListFilter> {
return addCondition(conditions);
}
private String escapeDoubleQuotes(String str) {
return str.replace("\"", "\\\"");
}
}

View File

@ -56,6 +56,7 @@ import org.openmetadata.schema.entity.feed.Thread;
import org.openmetadata.schema.tests.ResultSummary;
import org.openmetadata.schema.tests.TestCase;
import org.openmetadata.schema.tests.TestCaseParameterValue;
import org.openmetadata.schema.tests.TestPlatform;
import org.openmetadata.schema.tests.TestSuite;
import org.openmetadata.schema.tests.type.Assigned;
import org.openmetadata.schema.tests.type.Resolved;
@ -751,7 +752,7 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
}
for (int i = 0; i < testCasesNum; i++) {
String tableFQN = tables.get(rand.nextInt(tables.size())).getFullyQualifiedName();
String tableFQN = tables.get(i).getFullyQualifiedName();
String testSuiteFQN = testSuites.get(tableFQN).getFullyQualifiedName();
CreateTestCase create =
createRequest(testInfo, i)
@ -770,13 +771,45 @@ public class TestCaseResourceTest extends EntityResourceTest<TestCase, CreateTes
.withTimestamp(TestUtils.dateToTimestamp(String.format("2021-09-%02d", i)));
putTestCaseResult(testCase.getFullyQualifiedName(), testCaseResult, ADMIN_AUTH_HEADERS);
}
TestCase testCaseForEL = testCases.get(0);
HashMap queryParams = new HashMap<>();
ResultList<TestCase> allEntities =
listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertEquals(testCasesNum, allEntities.getData().size());
queryParams.put("q", "test_getSimplelistFromSearcha");
allEntities = listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertNotEquals(0, allEntities.getData().size());
assertEquals(1, allEntities.getData().size());
org.assertj.core.api.Assertions.assertThat(allEntities.getData().get(0).getName())
.contains("test_getSimplelistFromSearcha");
queryParams.clear();
queryParams.put("entityLink", testCaseForEL.getEntityLink());
queryParams.put("includeAllTests", true);
allEntities = listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertEquals(1, allEntities.getData().size());
org.assertj.core.api.Assertions.assertThat(allEntities.getData().get(0).getEntityLink())
.contains(testCaseForEL.getEntityLink());
queryParams.clear();
queryParams.put("testPlatforms", TestPlatform.DEEQU);
allEntities = listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertEquals(
0, allEntities.getData().size()); // we don't have any test cases with DEEQU platform
queryParams.clear();
queryParams.put("testPlatforms", TestPlatform.OPEN_METADATA);
allEntities = listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertEquals(
testCasesNum,
allEntities.getData().size()); // we have all test cases with OPEN_METADATA platform
queryParams.clear();
queryParams.put(
"testPlatforms", String.format("%s,%s", TestPlatform.OPEN_METADATA, TestPlatform.DEEQU));
allEntities = listEntitiesFromSearch(queryParams, testCasesNum, 0, ADMIN_AUTH_HEADERS);
assertEquals(
testCasesNum, allEntities.getData().size()); // Should return either values matching
}
public void putTestCaseResult(String fqn, TestCaseResult data, Map<String, String> authHeaders)