diff --git a/mise.lock b/mise.lock index c6c6c59..8dbb35a 100644 --- a/mise.lock +++ b/mise.lock @@ -87,9 +87,9 @@ url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/532322353" provenance = "github-attestations" [tools.rumdl."platforms.linux-x64"] -checksum = "sha256:12058de9ab5e0078a468d11bd1a8c5b79f69768a15c06832cebde715075ed893" -url = "https://github.com/rvben/rumdl/releases/download/v0.2.62/rumdl-v0.2.62-x86_64-unknown-linux-gnu.tar.gz" -url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/532322356" +checksum = "sha256:f2581ed4b9cccff9288ee395777911f194368b28e0e0258070e94b7859a30b7e" +url = "https://github.com/rvben/rumdl/releases/download/v0.2.62/rumdl-v0.2.62-x86_64-unknown-linux-musl.tar.gz" +url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/532322358" provenance = "github-attestations" [tools.rumdl."platforms.linux-x64-musl"] diff --git a/src/flask_hypergen/hypergen.py b/src/flask_hypergen/hypergen.py index 8e2309f..18a33f0 100644 --- a/src/flask_hypergen/hypergen.py +++ b/src/flask_hypergen/hypergen.py @@ -271,7 +271,7 @@ def route_register( _ENDPOINTS[qualified_endpoint] = func_obj if router is not None: router.add_url_rule( - rule or f'/{func_name}/', + f'/{func_name}/' if rule is None else rule, endpoint, func_obj, methods=methods, diff --git a/tests/flask_hypergen_tests/test_core_ported.py b/tests/flask_hypergen_tests/test_core_ported.py index 879350e..98688db 100644 --- a/tests/flask_hypergen_tests/test_core_ported.py +++ b/tests/flask_hypergen_tests/test_core_ported.py @@ -4,6 +4,7 @@ from types import SimpleNamespace from unittest import mock +from flask import Blueprint from pyrsistent import pmap import pytest from werkzeug.exceptions import Forbidden @@ -826,6 +827,28 @@ def my_view(request): func_obj.reverse('extra') +@pytest.mark.parametrize( + ('rule', 'expected_url'), + [('', '/routes'), (None, '/routes/my_view/'), ('/custom/', '/routes/custom/')], +) +def test_route_register_blueprint_rule(app, client, rule, expected_url): + blueprint = Blueprint('routes', __name__, url_prefix='/routes') + + def my_view(): + return 'route response' + + func_obj = route_register(blueprint, my_view, rule=rule) + app.register_blueprint(blueprint) + + response = client.get(expected_url) + assert response.status_code == 200 + assert response.text == 'route response' + + with app.test_request_context(): + assert func_obj.reverse() == expected_url + assert resolve_url(expected_url).func is func_obj + + def test_plugins_method_call_and_pipeline(): calls = []