Skip to content

Commit a2c9c86

Browse files
authored
Fix case sensitive in url (#24)
* fix case-sensitive in url.
1 parent cf5b157 commit a2c9c86

File tree

5 files changed

+61
-2
lines changed

5 files changed

+61
-2
lines changed

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## Version 0.14.2
2+
3+
* Fix case-sensitive url validation.
4+
15
## Version 0.14.1
26

37
* Fix README.md.

src/flask_first/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from .first.exceptions import FirstResponseJSONValidation
2323
from .first.exceptions import FirstValidation
2424

25-
__version__ = '0.14.1'
25+
__version__ = '0.14.2'
2626

2727

2828
class First:

src/flask_first/first/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __init__(
3131
self._paths_schema = self.spec.serialized_spec['paths']
3232

3333
self.method = method.lower()
34-
self.endpoint = endpoint.lower()
34+
self.endpoint = endpoint
3535
self.headers = headers
3636
self.cookies = cookies
3737
self.path_params = path_params
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Mini API for testing Flask-First
4+
version: 1.0.0
5+
paths:
6+
/CaseSensitiveURL:
7+
get:
8+
operationId: case_sensitive_url_endpoint
9+
responses:
10+
"200":
11+
description: OK
12+
content:
13+
application/json:
14+
schema:
15+
type: object
16+
properties:
17+
message:
18+
type: string

tests/test_url.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
from flask import request
5+
6+
from .conftest import BASEDIR
7+
8+
9+
def test_specification__case_sensitive_url(fx_create_app):
10+
def case_sensitive_url_endpoint() -> dict:
11+
return {'message': request.url_rule.rule}
12+
13+
test_client = fx_create_app(
14+
Path(BASEDIR, 'specs/v3.0/url.case_sensitive.openapi.yaml'),
15+
(case_sensitive_url_endpoint,),
16+
)
17+
18+
url = '/CaseSensitiveURL'
19+
r = test_client.get(url)
20+
assert r.status_code == 200
21+
assert r.json['message'] == url
22+
23+
24+
@pytest.mark.parametrize(
25+
'url', ('/casesensitiveurl', '/casesensitiveurl', '/CASESENSITIVEURL', '/CASE-SENSITIVE_URL')
26+
)
27+
def test_specification__non_case_sensitive_url(fx_create_app, url):
28+
def case_sensitive_url_endpoint() -> dict:
29+
return {'message': request.url_rule.rule}
30+
31+
test_client = fx_create_app(
32+
Path(BASEDIR, 'specs/v3.0/url.case_sensitive.openapi.yaml'),
33+
(case_sensitive_url_endpoint,),
34+
)
35+
36+
r = test_client.get(url)
37+
assert r.status_code == 404

0 commit comments

Comments
 (0)