Skip to content

Commit e162265

Browse files
committed
Test tweaks
1 parent 5bc43fa commit e162265

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

tests/test_filters_jinja2.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import pytest
99
from fastapi.testclient import TestClient
1010
from httpx import Request
11-
from utils import AppFactory
11+
from utils import AppFactory, parse_query_string
1212

1313
FILTER_EXPR_CASES = [
1414
pytest.param(
@@ -151,7 +151,7 @@ async def _get_upstream_request(mock_upstream: MagicMock):
151151
assert mock_upstream.call_count == 1
152152
[request] = cast(list[Request], mock_upstream.call_args[0])
153153
req_body = request._streamed_body
154-
return req_body.decode(), dict(request.url.params)
154+
return req_body.decode(), parse_query_string(request.url.query.decode("utf-8"))
155155

156156

157157
@pytest.mark.parametrize(
@@ -219,12 +219,13 @@ async def test_search_get(
219219
token_builder,
220220
):
221221
"""Test that GET /search merges the upstream query params with the templated filter."""
222-
response = _build_client(
222+
client = _build_client(
223223
src_api_server=source_api_server,
224224
template_expr=filter_template_expr,
225225
is_authenticated=is_authenticated,
226226
token_builder=token_builder,
227-
).get("/search", params=input_query)
227+
)
228+
response = client.get("/search", params=input_query)
228229
response.raise_for_status()
229230

230231
# For GET, we expect the upstream body to be empty, but URL params to be appended
@@ -239,13 +240,15 @@ async def test_search_get(
239240
if input_filter:
240241
proxy_filter += cql2.Expr(input_filter)
241242

243+
filter_lang = input_query.get("filter-lang", "cql2-text")
242244
expected_output = {
243245
**input_query,
244246
"filter": (
245247
proxy_filter.to_text()
246-
if input_query.get("filter-lang") == "cql2-text"
248+
if filter_lang == "cql2-text"
247249
else proxy_filter.to_json()
248250
),
251+
"filter-lang": filter_lang,
249252
}
250253
assert (
251254
upstream_query == expected_output

tests/utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from dataclasses import dataclass
44
from typing import Callable
5+
import json
6+
from urllib.parse import parse_qs, unquote
57

68
import httpx
79

@@ -48,3 +50,19 @@ def single_chunk_async_stream_response(
4850
status_code=status_code,
4951
headers=headers,
5052
)
53+
54+
55+
def parse_query_string(qs: str) -> dict:
56+
"""Parse a query string into a dictionary."""
57+
parsed = parse_qs(qs)
58+
59+
result = {}
60+
for key, value_list in parsed.items():
61+
value = value_list[0]
62+
if key == "filter" and parsed.get("filter-lang") == "cql2-json":
63+
decoded_str = unquote(value)
64+
result[key] = json.loads(decoded_str)
65+
else:
66+
result[key] = unquote(value)
67+
68+
return result

0 commit comments

Comments
 (0)