|
| 1 | +import json |
| 2 | +from datetime import date |
1 | 3 | from datetime import timedelta |
2 | 4 |
|
3 | 5 | import pytest |
4 | 6 | from dateutil.relativedelta import relativedelta |
| 7 | +from flask import __version__ as flask_version |
5 | 8 | from flask import Flask |
6 | | -from flask.json import JSONEncoder |
7 | 9 |
|
8 | 10 | from flask_jwt_extended import JWTManager |
9 | 11 | from flask_jwt_extended.config import config |
| 12 | +from flask_jwt_extended.internal_utils import JSONEncoder |
| 13 | + |
| 14 | + |
| 15 | +flask_version_tuple = tuple(map(int, flask_version.split("."))) |
10 | 16 |
|
11 | 17 |
|
12 | 18 | @pytest.fixture(scope="function") |
@@ -65,8 +71,6 @@ def test_default_configs(app): |
65 | 71 |
|
66 | 72 | assert config.identity_claim_key == "sub" |
67 | 73 |
|
68 | | - assert config.json_encoder is app.json_encoder |
69 | | - |
70 | 74 | assert config.error_msg_key == "msg" |
71 | 75 |
|
72 | 76 |
|
@@ -112,11 +116,6 @@ def test_override_configs(app, delta_func): |
112 | 116 |
|
113 | 117 | app.config["JWT_ERROR_MESSAGE_KEY"] = "message" |
114 | 118 |
|
115 | | - class CustomJSONEncoder(JSONEncoder): |
116 | | - pass |
117 | | - |
118 | | - app.json_encoder = CustomJSONEncoder |
119 | | - |
120 | 119 | with app.test_request_context(): |
121 | 120 | assert config.token_location == ["cookies", "query_string", "json"] |
122 | 121 | assert config.jwt_in_query_string is True |
@@ -162,11 +161,29 @@ class CustomJSONEncoder(JSONEncoder): |
162 | 161 |
|
163 | 162 | assert config.identity_claim_key == "foo" |
164 | 163 |
|
165 | | - assert config.json_encoder is CustomJSONEncoder |
166 | | - |
167 | 164 | assert config.error_msg_key == "message" |
168 | 165 |
|
169 | 166 |
|
| 167 | +@pytest.mark.skipif( |
| 168 | + flask_version_tuple >= (2, 2, 0), reason="Only applies to Flask <= 2.2.0" |
| 169 | +) |
| 170 | +def test_config_json_encoder_flask21(app): |
| 171 | + with app.test_request_context(): |
| 172 | + assert config.json_encoder == app.json_encoder |
| 173 | + dump = json.dumps({"d": date(2022, 8, 12)}, cls=config.json_encoder) |
| 174 | + assert dump == '{"d": "Fri, 12 Aug 2022 00:00:00 GMT"}' |
| 175 | + |
| 176 | + |
| 177 | +@pytest.mark.skipif( |
| 178 | + flask_version_tuple < (2, 2, 0), reason="Only applies to Flask > 2.2.0" |
| 179 | +) |
| 180 | +def test_config_json_encoder_flask(app): |
| 181 | + with app.test_request_context(): |
| 182 | + assert config.json_encoder == JSONEncoder |
| 183 | + dump = json.dumps({"d": date(2022, 8, 12)}, cls=config.json_encoder) |
| 184 | + assert dump == '{"d": "Fri, 12 Aug 2022 00:00:00 GMT"}' |
| 185 | + |
| 186 | + |
170 | 187 | def test_tokens_never_expire(app): |
171 | 188 | app.config["JWT_ACCESS_TOKEN_EXPIRES"] = False |
172 | 189 | app.config["JWT_REFRESH_TOKEN_EXPIRES"] = False |
|
0 commit comments