@@ -371,6 +371,96 @@ def test_search_get(
371371 ), "Query should be combined with the filter expression."
372372
373373
374+ @pytest .mark .parametrize (
375+ "filter_template_expr, auth_filter, anon_filter" ,
376+ [
377+ # Simple filter, not templated
378+ [
379+ "(properties.private = false)" ,
380+ "(properties.private = false)" ,
381+ "(properties.private = false)" ,
382+ ],
383+ # Simple filter, templated
384+ [
385+ "{{ '(properties.private = false)' if token is none else true }}" ,
386+ "true" ,
387+ "(properties.private = false)" ,
388+ ],
389+ # Complex filter, not templated
390+ [
391+ """{
392+ "op": "=",
393+ "args": [{"property": "private"}, true]
394+ }""" ,
395+ """{
396+ "op": "=",
397+ "args": [{"property": "private"}, true]
398+ }""" ,
399+ """{
400+ "op": "=",
401+ "args": [{"property": "private"}, true]
402+ }""" ,
403+ ],
404+ # Complex filter, templated
405+ [
406+ """{{ '{"op": "=", "args": [{"property": "private"}, true]}' if token is none else true }}""" ,
407+ "true" ,
408+ """{"op": "=", "args": [{"property": "private"}, true]}""" ,
409+ ],
410+ ],
411+ )
412+ @pytest .mark .parametrize ("is_authenticated" , [True , False ])
413+ @pytest .mark .parametrize (
414+ "input_query" ,
415+ [
416+ # Not using filter
417+ {
418+ "collections" : "example-collection" ,
419+ "bbox" : "160.6,-55.95,-170,-25.89" ,
420+ "datetime" : "2021-06-01T00:00:00Z/2021-06-30T23:59:59Z" ,
421+ },
422+ # Using filter
423+ # {
424+ # "filter-lang": "cql2-json",
425+ # "filter": {
426+ # "op": "and",
427+ # "args": [
428+ # {"op": "=", "args": [{"property": "collection"}, "landsat-8-l1"]},
429+ # {"op": "<=", "args": [{"property": "eo:cloud_cover"}, 20]},
430+ # {"op": "=", "args": [{"property": "platform"}, "landsat-8"]},
431+ # ],
432+ # },
433+ # "limit": 5,
434+ # },
435+ ],
436+ )
437+ def test_items_list (
438+ mock_upstream ,
439+ source_api_server ,
440+ filter_template_expr ,
441+ auth_filter ,
442+ anon_filter ,
443+ is_authenticated ,
444+ input_query ,
445+ token_builder ,
446+ ):
447+ """Append query params with generated CQL2 query."""
448+ response = _build_client (
449+ src_api_server = source_api_server ,
450+ template_expr = filter_template_expr ,
451+ is_authenticated = is_authenticated ,
452+ token_builder = token_builder ,
453+ ).get ("/collections/foo/items" )
454+ response .raise_for_status ()
455+
456+ body , query = _get_upstream_request (mock_upstream )
457+
458+ assert body == ""
459+ assert query == {
460+ "filter" : cql2 .Expr (auth_filter if is_authenticated else anon_filter ).to_text ()
461+ }
462+
463+
374464def _build_client (
375465 * ,
376466 src_api_server : str ,
0 commit comments