refactor(web): dep-inject the passport query with @model_validate (#41845)

This commit is contained in:
Eddy ZHANG authored and GitHub committed 2026-09-05 10:31:05 +00:00
1 parent 00e5786067
commit d69b19b567
2 files changed
+6 -6

No files matched your search

+3 -2
View File
@@ -5,6 +5,7 @@ from werkzeug.exceptions import NotFound, Unauthorized
from constants import HEADER_NAME_APP_CODE
from controllers.common.schema import query_params_from_model, register_response_schema_models, register_schema_models
from controllers.console.wraps import model_validate
from controllers.web import web_ns
from controllers.web.error import WebAppAuthRequiredError
from extensions.ext_application_services import application_services
@@ -48,12 +49,12 @@ class PassportResource(Resource):
}
)
@web_ns.response(200, "Passport retrieved successfully", web_ns.models[PassportAccessTokenResponse.__name__])
def get(self):
@model_validate(PassportQuery)
def get(self, query: PassportQuery):
app_code = request.headers.get(HEADER_NAME_APP_CODE)
if app_code is None:
raise Unauthorized("X-App-Code header is missing.")
query = PassportQuery.model_validate(request.args.to_dict(flat=True))
passport_request = WebPassportRequest(
app_code=app_code,
user_session_id=query.user_id,
@@ -1,6 +1,5 @@
"""Unit tests for the thin web-passport Flask adapter."""
from inspect import unwrap
from types import SimpleNamespace
from unittest.mock import MagicMock, patch
@@ -31,7 +30,7 @@ def test_passport_resource_parses_input_and_serializes_result(app: Flask) -> Non
patch("controllers.web.passport.application_services", return_value=services),
patch("controllers.web.passport.extract_webapp_access_token", return_value="login-token"),
):
result = unwrap(PassportResource.get)(PassportResource())
result = PassportResource().get()
assert result == {"access_token": "issued-token"}
service.issue.assert_called_once_with(
@@ -41,7 +40,7 @@ def test_passport_resource_parses_input_and_serializes_result(app: Flask) -> Non
def test_passport_resource_requires_app_code(app: Flask) -> None:
with app.test_request_context("/passport"), pytest.raises(Unauthorized, match="X-App-Code"):
unwrap(PassportResource.get)(PassportResource())
PassportResource().get()
@pytest.mark.parametrize(
@@ -66,4 +65,4 @@ def test_passport_resource_translates_application_errors(
patch("controllers.web.passport.application_services", return_value=services),
pytest.raises(http_error),
):
unwrap(PassportResource.get)(PassportResource())
PassportResource().get()