11"""Tests for Jinja2 CQL2 filter (simplified for readability)."""
22
33import json
4- from typing import cast
5- from unittest .mock import MagicMock
64
75import cql2
86import pytest
97from fastapi .testclient import TestClient
10- from httpx import Request
11- from utils import AppFactory , parse_query_string
8+ from utils import AppFactory , get_upstream_request
129
1310FILTER_EXPR_CASES = [
1411 pytest .param (
@@ -148,14 +145,6 @@ def _build_client(
148145 return TestClient (app , headers = headers )
149146
150147
151- async def _get_upstream_request (mock_upstream : MagicMock ):
152- """Fetch the raw body and query params from the single upstream request."""
153- assert mock_upstream .call_count == 1
154- [request ] = cast (list [Request ], mock_upstream .call_args [0 ])
155- req_body = request ._streamed_body
156- return req_body .decode (), parse_query_string (request .url .query .decode ("utf-8" ))
157-
158-
159148@pytest .mark .parametrize (
160149 "filter_template_expr, expected_auth_filter, expected_anon_filter" ,
161150 FILTER_EXPR_CASES ,
@@ -182,8 +171,8 @@ async def test_search_post(
182171 response .raise_for_status ()
183172
184173 # Retrieve the JSON body that was actually sent upstream
185- proxied_body_str = ( await _get_upstream_request (mock_upstream ))[ 0 ]
186- proxied_body = json .loads (proxied_body_str )
174+ proxied_request = await get_upstream_request (mock_upstream )
175+ proxied_body = json .loads (proxied_request . body )
187176
188177 # Determine the expected combined filter
189178 proxy_filter = cql2 .Expr (
@@ -231,8 +220,8 @@ async def test_search_get(
231220 response .raise_for_status ()
232221
233222 # For GET, we expect the upstream body to be empty, but URL params to be appended
234- proxied_body , upstream_query = await _get_upstream_request (mock_upstream )
235- assert proxied_body == ""
223+ proxied_request = await get_upstream_request (mock_upstream )
224+ assert proxied_request . body == ""
236225
237226 # Determine the expected combined filter
238227 proxy_filter = cql2 .Expr (
@@ -253,7 +242,7 @@ async def test_search_get(
253242 "filter-lang" : filter_lang ,
254243 }
255244 assert (
256- upstream_query == expected_output
245+ proxied_request . query_params == expected_output
257246 ), "GET query should combine filter expressions."
258247
259248
@@ -284,15 +273,15 @@ async def test_items_list(
284273 response .raise_for_status ()
285274
286275 # For GET items, we also expect an empty body and appended querystring
287- proxied_body , proxied_query = await _get_upstream_request (mock_upstream )
288- assert proxied_body == ""
276+ proxied_request = await get_upstream_request (mock_upstream )
277+ assert proxied_request . body == ""
289278
290279 # Only the appended filter (no input_filter merges in these particular tests),
291280 # but you could do similar merging logic if needed.
292281 proxy_filter = cql2 .Expr (
293282 expected_auth_filter if is_authenticated else expected_anon_filter
294283 )
295- assert proxied_query == {
284+ assert proxied_request . query_params == {
296285 "filter-lang" : "cql2-text" ,
297286 "filter" : (
298287 proxy_filter + cql2 .Expr (qs_filter )
0 commit comments