@@ -416,6 +416,53 @@ def test_keyword_index_str_query_and(self):
416416
417417 self .assertEqual (["/plone/folder/doc" ], result_paths (response .json ()))
418418
419+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
420+ def test_keyword_index_not_as_list (self ):
421+ query = {"test_list_field.not" : ["Keyword1" , "Keyword2" ]}
422+ response = self .api_session .get ("/@search" , params = query )
423+
424+ self .assertEqual (
425+ sorted (
426+ [
427+ "/plone" ,
428+ "/plone/doc-outside-folder" ,
429+ "/plone/folder" ,
430+ "/plone/folder2" ,
431+ "/plone/folder2/doc" ,
432+ ]
433+ ),
434+ sorted (result_paths (response .json ())),
435+ )
436+
437+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
438+ def test_keyword_index_not_as_str (self ):
439+ query = {"test_list_field.not" : "Keyword1" }
440+ response = self .api_session .get ("/@search" , params = query )
441+ self .assertEqual (
442+ sorted (
443+ [
444+ "/plone" ,
445+ "/plone/folder" ,
446+ "/plone/folder/other-document" ,
447+ "/plone/folder2" ,
448+ "/plone/folder2/doc" ,
449+ "/plone/doc-outside-folder" ,
450+ ]
451+ ),
452+ sorted (result_paths (response .json ())),
453+ )
454+
455+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
456+ def test_keyword_index_query_and_not (self ):
457+ query = {
458+ "test_list_field.query" : "Keyword2" ,
459+ "test_list_field.not" : "Keyword1" ,
460+ }
461+ response = self .api_session .get ("/@search" , params = query )
462+ self .assertEqual (
463+ ["/plone/folder/other-document" ], result_paths (response .json ())
464+ )
465+
419466 # BooleanIndex
420467
421468 def test_boolean_index_query (self ):
@@ -446,6 +493,35 @@ def test_field_index_int_range_query(self):
446493
447494 self .assertEqual (["/plone/folder/doc" ], result_paths (response .json ()))
448495
496+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
497+ def test_field_index_not_as_list (self ):
498+ query = {"portal_type.not" : ["DXTestDocument" , "Plone Site" ]}
499+ response = self .api_session .get ("/@search" , params = query )
500+
501+ self .assertEqual (
502+ sorted (["/plone/folder" , "/plone/folder2" ]),
503+ sorted (result_paths (response .json ())),
504+ )
505+
506+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
507+ def test_field_index_not_as_str (self ):
508+ query = {"portal_type.not" : ["DXTestDocument" ]}
509+ response = self .api_session .get ("/@search" , params = query )
510+
511+ self .assertEqual (
512+ sorted (["/plone/folder" , "/plone/folder2" , "/plone" ]),
513+ sorted (result_paths (response .json ())),
514+ )
515+
516+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
517+ def test_field_index_query_and_not (self ):
518+ query = {
519+ "id.query" : ["folder" , "folder2" ],
520+ "id.not" : "folder2" ,
521+ }
522+ response = self .api_session .get ("/@search" , params = query )
523+ self .assertEqual (["/plone/folder" ], result_paths (response .json ()))
524+
449525 # ExtendedPathIndex
450526
451527 def test_extended_path_index_query (self ):
@@ -555,6 +631,46 @@ def test_date_index_ranged_query(self):
555631
556632 self .assertEqual (["/plone/folder/doc" ], result_paths (response .json ()))
557633
634+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
635+ def test_date_index_not_as_list (self ):
636+ query = {
637+ "start.not" : [date (1950 , 1 , 1 ).isoformat (), date (1975 , 1 , 1 ).isoformat ()]
638+ }
639+ response = self .api_session .get ("/@search" , params = query )
640+
641+ self .assertEqual (
642+ sorted (
643+ [
644+ "/plone" ,
645+ "/plone/folder" ,
646+ "/plone/folder2" ,
647+ "/plone/doc-outside-folder" ,
648+ ]
649+ ),
650+ sorted (result_paths (response .json ())),
651+ )
652+
653+ @unittest .skipUnless (HAS_PLONE_6 , "'not' query support with Plone 6" )
654+ def test_date_index_not_as_date (self ):
655+ query = {
656+ "start.not" : date (1950 , 1 , 1 ).isoformat (),
657+ }
658+ response = self .api_session .get ("/@search" , params = query )
659+
660+ self .assertEqual (
661+ sorted (
662+ [
663+ "/plone" ,
664+ "/plone/folder" ,
665+ "/plone/folder/other-document" ,
666+ "/plone/folder2" ,
667+ "/plone/folder2/doc" ,
668+ "/plone/doc-outside-folder" ,
669+ ]
670+ ),
671+ sorted (result_paths (response .json ())),
672+ )
673+
558674 # DateRangeIndex
559675
560676 def test_date_range_index_query (self ):
0 commit comments