@@ -481,3 +481,160 @@ async def test_search_filter_extension_isnull_get(app_client, ctx):
481481
482482 assert resp .status_code == 200
483483 assert len (resp .json ()["features" ]) == 1
484+
485+ async def test_search_filter_extension_s_contains_property (app_client , ctx ):
486+ contains_geom = {
487+ "coordinates" : [- 81.29499784193122 , 35.0538290963502 ],
488+ "type" : "Point" ,
489+ }
490+ params = {
491+ "filter" : {
492+ "op" : "s_contains" ,
493+ "args" : [
494+ {"property" : "properties.foo__geog" },
495+ contains_geom ,
496+ ],
497+ },
498+ }
499+ resp = await app_client .post ("/search" , json = params )
500+ assert resp .status_code == 200
501+ resp_json = resp .json ()
502+ assert len (resp_json ["features" ]) == 1
503+
504+
505+ async def test_search_filter_extension_s_intersects_property (app_client , ctx ):
506+ intersecting_geom = {
507+ "coordinates" : [- 81.29499784193122 , 35.0538290963502 ],
508+ "type" : "Point" ,
509+ }
510+ params = {
511+ "filter" : {
512+ "op" : "s_intersects" ,
513+ "args" : [
514+ {"property" : "properties.foo__geog" },
515+ intersecting_geom ,
516+ ],
517+ },
518+ }
519+ resp = await app_client .post ("/search" , json = params )
520+ assert resp .status_code == 200
521+ resp_json = resp .json ()
522+ assert len (resp_json ["features" ]) == 1
523+
524+
525+ async def test_search_filter_extension_s_contains_property (app_client , ctx ):
526+ contains_geom = {
527+ "coordinates" : [- 81.29499784193122 , 35.0538290963502 ],
528+ "type" : "Point" ,
529+ }
530+ params = {
531+ "filter" : {
532+ "op" : "s_contains" ,
533+ "args" : [
534+ {"property" : "properties.foo__geog" },
535+ contains_geom ,
536+ ],
537+ },
538+ }
539+ resp = await app_client .post ("/search" , json = params )
540+ assert resp .status_code == 200
541+ resp_json = resp .json ()
542+ assert len (resp_json ["features" ]) == 1
543+
544+
545+ async def test_search_filter_extension_s_within_property (app_client , ctx ):
546+ within_geom = {
547+ "coordinates" : [
548+ [
549+ [- 81.29599784193122 , 35.06440047386145 ],
550+ [- 81.29599784193122 , 35.0528290963502 ],
551+ [- 81.27041291067454 , 35.0528290963502 ],
552+ [- 81.27041291067454 , 35.0640047386145 ],
553+ [- 81.29599784193122 , 35.06440047386145 ],
554+ ]
555+ ],
556+ "type" : "Polygon" ,
557+ }
558+ params = {
559+ "filter" : {
560+ "op" : "s_within" ,
561+ "args" : [
562+ {"property" : "properties.foo__geog" },
563+ within_geom ,
564+ ],
565+ },
566+ }
567+ resp = await app_client .post ("/search" , json = params )
568+ assert resp .status_code == 200
569+ resp_json = resp .json ()
570+ assert len (resp_json ["features" ]) == 1
571+
572+
573+ async def test_search_filter_extension_s_disjoint_property (app_client , ctx ):
574+ intersecting_geom = {
575+ "coordinates" : [0 , 0 ],
576+ "type" : "Point" ,
577+ }
578+ params = {
579+ "filter" : {
580+ "op" : "s_disjoint" ,
581+ "args" : [
582+ {"property" : "properties.foo__geog" },
583+ intersecting_geom ,
584+ ],
585+ },
586+ }
587+ resp = await app_client .post ("/search" , json = params )
588+ assert resp .status_code == 200
589+ resp_json = resp .json ()
590+ assert len (resp_json ["features" ]) == 1
591+
592+
593+ async def test_search_filter_extension_cql2text_s_intersects_property (app_client , ctx ):
594+ filter = 'S_INTERSECTS("properties.foo__geog",POINT(-81.29499784193122 35.0538290963502))'
595+ params = {
596+ "filter" : filter ,
597+ "filter_lang" : "cql2-text" ,
598+ }
599+ resp = await app_client .post ("/search" , json = params )
600+ assert resp .status_code == 200
601+ resp_json = resp .json ()
602+ assert len (resp_json ["features" ]) == 1
603+
604+
605+ async def test_search_filter_extension_cql2text_s_contains_property (app_client , ctx ):
606+ filter = (
607+ 'S_CONTAINS("properties.foo__geog",POINT(-81.29499784193122 35.0538290963502))'
608+ )
609+ params = {
610+ "filter" : filter ,
611+ "filter_lang" : "cql2-text" ,
612+ }
613+ resp = await app_client .post ("/search" , json = params )
614+ assert resp .status_code == 200
615+ resp_json = resp .json ()
616+ assert len (resp_json ["features" ]) == 1
617+
618+
619+ async def test_search_filter_extension_cql2text_s_within_property (app_client , ctx ):
620+ filter = 'S_WITHIN("properties.foo__geog",POLYGON((-81.29599784193122 35.06440047386145,-81.29599784193122 35.0528290963502,-81.27041291067454 35.0528290963502,-81.27041291067454 35.0640047386145,-81.29599784193122 35.06440047386145)))'
621+ params = {
622+ "filter" : filter ,
623+ "filter_lang" : "cql2-text" ,
624+ }
625+ resp = await app_client .post ("/search" , json = params )
626+ assert resp .status_code == 200
627+ resp_json = resp .json ()
628+ assert len (resp_json ["features" ]) == 1
629+
630+
631+ async def test_search_filter_extension_cql2text_s_disjoint_property (app_client , ctx ):
632+ filter = 'S_DISJOINT("properties.foo__geog",POINT(0 0))'
633+ params = {
634+ "filter" : filter ,
635+ "filter_lang" : "cql2-text" ,
636+ }
637+ resp = await app_client .post ("/search" , json = params )
638+ assert resp .status_code == 200
639+ resp_json = resp .json ()
640+ assert len (resp_json ["features" ]) == 1
0 commit comments