Skip to content

Commit 919cb4e

Browse files
adding additional tests
1 parent bc92dd2 commit 919cb4e

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

tests/functional/event_handler/_pydantic/test_openapi_validation_middleware.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,3 +2694,60 @@ def query_model_advanced(params: Annotated[QueryAdvanced, Query()]) -> Dict[str,
26942694
full_name_error = next((e for e in errors if "full_name" in e["loc"] or "fullName" in e["loc"]), None)
26952695
assert full_name_error is not None
26962696
assert full_name_error["type"] == "string_too_short"
2697+
2698+
2699+
def test_validation_query_string_with_fully_encoded_datetime_alb_resolver():
2700+
# GIVEN a ALBResolver with validation enabled,
2701+
# and an event with a fully url-encoded datetime
2702+
# as a query string parameter
2703+
app = ALBResolver(enable_validation=True, decode_query_parameters=True)
2704+
raw_event = load_event("albEvent.json")
2705+
raw_event["path"] = "/users"
2706+
# Fully encoded: "2025-12-20T16:56:02.032000" -> "2025-12-20T16%3A56%3A02.032000"
2707+
# With spaces or special chars: "2025-12-20 16:56:02" -> "2025-12-20%2016%3A56%3A02"
2708+
raw_event["queryStringParameters"] = {"query_dt": "2025-12-20T16%3A56%3A02.032000"}
2709+
2710+
@app.get("/users")
2711+
def handler(query_dt: datetime.datetime):
2712+
return {"received": query_dt.isoformat()}
2713+
2714+
result = app(raw_event, {})
2715+
assert result["statusCode"] == 200
2716+
body = json.loads(result["body"])
2717+
assert body["received"] == "2025-12-20T16:56:02.032000"
2718+
2719+
2720+
def test_validation_query_string_with_encoded_key_and_value_alb_resolver():
2721+
# GIVEN a ALBResolver with validation enabled,
2722+
# and an event with url-encoded key AND value
2723+
app = ALBResolver(enable_validation=True, decode_query_parameters=True)
2724+
raw_event = load_event("albEvent.json")
2725+
raw_event["path"] = "/search"
2726+
# Key: "search query" -> "search%20query"
2727+
# Value: "hello world" -> "hello%20world"
2728+
raw_event["queryStringParameters"] = {"search%20query": "hello%20world"}
2729+
2730+
@app.get("/search")
2731+
def handler(search_query: Annotated[str, Query(alias="search query")]):
2732+
return {"result": search_query}
2733+
2734+
result = app(raw_event, {})
2735+
assert result["statusCode"] == 200
2736+
body = json.loads(result["body"])
2737+
assert body["result"] == "hello world"
2738+
2739+
2740+
def test_validation_without_decode_query_parameters_alb_resolver():
2741+
# GIVEN a ALBResolver WITHOUT decode_query_parameters (default behavior)
2742+
app = ALBResolver(enable_validation=True)
2743+
raw_event = load_event("albEvent.json")
2744+
raw_event["path"] = "/users"
2745+
raw_event["queryStringParameters"] = {"query_dt": "2025-12-20T16%3A56%3A02.032000"}
2746+
2747+
@app.get("/users")
2748+
def handler(query_dt: datetime.datetime):
2749+
return None
2750+
2751+
# THEN validation should fail because the encoded string is not a valid datetime
2752+
result = app(raw_event, {})
2753+
assert result["statusCode"] == 422

0 commit comments

Comments
 (0)