3535import org .apache .atlas .model .typedef .AtlasTypesDef ;
3636import org .apache .atlas .type .AtlasTypeUtil ;
3737import org .apache .atlas .utils .TestResourceFileUtils ;
38+ import org .apache .commons .lang .StringUtils ;
3839import org .testng .annotations .BeforeClass ;
3940import org .testng .annotations .DataProvider ;
4041import org .testng .annotations .Test ;
4647import java .util .Collections ;
4748import java .util .HashMap ;
4849import java .util .List ;
49- import java .util .function .Predicate ;
5050
5151import static com .fasterxml .jackson .annotation .JsonAutoDetect .Visibility .NONE ;
5252import static com .fasterxml .jackson .annotation .JsonAutoDetect .Visibility .PUBLIC_ONLY ;
@@ -228,21 +228,33 @@ public void testSavedSearch(String jsonFile) {
228228 }
229229
230230 @ Test
231- public void testAttributeSearchInvalidOperator () {
232- runNegativeSearchTest ("search-parameters/operator" , "ATLAS-400-00-103" , parameters -> parameters .getEntityFilters () != null && parameters .getEntityFilters ().getOperator () != null );
231+ public void testComplexFilterInvalidOperator () {
232+ runNegativeSearchTestForBasicSearch ("search-parameters/operator" , "ATLAS-400-00-103" ,
233+ parameters -> (parameters .getEntityFilters () != null && containsAnyOperator (parameters .getEntityFilters ())) ||
234+ (parameters .getTagFilters () != null && containsAnyOperator (parameters .getTagFilters ())));
235+ runNegativeSearchTestForQuickSearch ("search-parameters/operator" , "ATLAS-400-00-103" ,
236+ parameters -> parameters .getEntityFilters () != null && containsAnyOperator (parameters .getEntityFilters ()));
233237 }
234238
235239 @ Test
236- public void testAttributeSearchEmptyNameAttribute () {
237- runNegativeSearchTest ("search-parameters/attribute-name" , "ATLAS-400-00-104" , parameters -> parameters .getEntityFilters () != null && parameters .getEntityFilters ().getAttributeName () != null );
240+ public void testComplexFilterEmptyAttributeName () {
241+ runNegativeSearchTestForBasicSearch ("search-parameters/attribute-name" , "ATLAS-400-00-104" ,
242+ parameters -> (parameters .getEntityFilters () != null && containsAnyAttributeName (parameters .getEntityFilters ())) ||
243+ (parameters .getTagFilters () != null && containsAnyAttributeName (parameters .getTagFilters ())));
244+ runNegativeSearchTestForQuickSearch ("search-parameters/attribute-name" , "ATLAS-400-00-104" ,
245+ parameters -> parameters .getEntityFilters () != null && containsAnyAttributeName (parameters .getEntityFilters ()));
238246 }
239247
240248 @ Test
241- public void testAttributeSearchEmptyValueAttribute () {
242- runNegativeSearchTest ("search-parameters/attribute-value" , "ATLAS-400-00-105" , parameters -> parameters .getEntityFilters () != null && parameters .getEntityFilters ().getAttributeValue () != null );
249+ public void testComplexFilterEmptyAttributeValue () {
250+ runNegativeSearchTestForBasicSearch ("search-parameters/attribute-value" , "ATLAS-400-00-105" ,
251+ parameters -> (parameters .getEntityFilters () != null && containsAnyAttributeValue (parameters .getEntityFilters ())) ||
252+ (parameters .getTagFilters () != null && containsAnyAttributeValue (parameters .getTagFilters ())));
253+ runNegativeSearchTestForQuickSearch ("search-parameters/attribute-value" , "ATLAS-400-00-105" ,
254+ parameters -> parameters .getEntityFilters () != null && containsAnyAttributeValue (parameters .getEntityFilters ()));
243255 }
244256
245- public void runNegativeSearchTest (String jsonFile , String expectedErrorCode , java .util .function .Predicate <SearchParameters > paramFilter ) {
257+ public void runNegativeSearchTestForBasicSearch (String jsonFile , String expectedErrorCode , java .util .function .Predicate <SearchParameters > paramFilter ) {
246258 try {
247259 BasicSearchParametersWithExpectation [] testExpectations = TestResourceFileUtils .readObjectFromJson (jsonFile , BasicSearchParametersWithExpectation [].class );
248260 assertNotNull (testExpectations );
@@ -264,6 +276,66 @@ public void runNegativeSearchTest(String jsonFile, String expectedErrorCode, jav
264276 }
265277 }
266278
279+ public void runNegativeSearchTestForQuickSearch (String jsonFile , String expectedErrorCode , java .util .function .Predicate <QuickSearchParameters > qspParamFilter ) {
280+ try {
281+ BasicSearchParametersWithExpectation [] testExpectations = TestResourceFileUtils .readObjectFromJson (jsonFile , BasicSearchParametersWithExpectation [].class );
282+ assertNotNull (testExpectations );
283+ Arrays
284+ .stream (testExpectations )
285+ .map (testExpectation -> testExpectation .getSearchParameters ())
286+ .map (sp -> {
287+ QuickSearchParameters qsp = new QuickSearchParameters ();
288+ qsp .setTypeName (sp .getTypeName ());
289+ qsp .setEntityFilters (sp .getEntityFilters ());
290+ return qsp ; })
291+ .filter (qspParamFilter )
292+ .forEach (params -> {
293+ try {
294+ atlasClientV2 .quickSearch (params );
295+ }
296+ catch (AtlasServiceException e ) {
297+ assertTrue (e .getMessage ().contains (expectedErrorCode ),
298+ "Expected error code " + expectedErrorCode + " in exception message: " + e .getMessage ());
299+ }
300+ });
301+ } catch (IOException e ) {
302+ fail (e .getMessage ());
303+ }
304+ }
305+
306+ private boolean containsAnyMatchingCriteria (SearchParameters .FilterCriteria filterCriteria , java .util .function .Predicate <SearchParameters .FilterCriteria > matcher ) {
307+ if (filterCriteria == null ) {
308+ return false ;
309+ }
310+ if (matcher .test (filterCriteria )) {
311+ return true ;
312+ }
313+ if (filterCriteria .getCriterion () != null ) {
314+ return filterCriteria .getCriterion ().stream ()
315+ .filter (fc -> fc != null )
316+ .anyMatch (fc -> containsAnyMatchingCriteria (fc , matcher ));
317+ }
318+
319+ return false ;
320+ }
321+
322+ private boolean containsAnyOperator (SearchParameters .FilterCriteria filter ) {
323+ return containsAnyMatchingCriteria (filter , fc -> {
324+ if (fc .getOperator () == null ) {
325+ return true ;
326+ }
327+ return SearchParameters .Operator .fromString (fc .getOperator ().toString ()) == null ;
328+ });
329+ }
330+
331+ private boolean containsAnyAttributeName (SearchParameters .FilterCriteria filter ) {
332+ return containsAnyMatchingCriteria (filter , fc -> StringUtils .isBlank (fc .getAttributeName ()));
333+ }
334+
335+ private boolean containsAnyAttributeValue (SearchParameters .FilterCriteria filter ) {
336+ return containsAnyMatchingCriteria (filter , fc -> StringUtils .isBlank (fc .getAttributeValue ()));
337+ }
338+
267339 @ Test (dependsOnMethods = "testSavedSearch" )
268340 public void testExecuteSavedSearchByName () {
269341 try {
0 commit comments