Skip to content

Commit c41ad61

Browse files
committed
Fix if/else scope in assert statements
A statement like `assert x == 1 if False else "foobar"` will be evaluated to assert "foobar", which is always True. This means that checking for a response status code like `assert status_code == 200 if i < 5 else 429` will be evaluated to `assert status_code == 200` for i < 5, but also to `assert 429` for i >= 5 and not `assert status_code == 429`. The fix is to get the right scope for the if/else condition by using parentheses, so that the right response status code will be checked if i >= 5.
1 parent 5e2b9c1 commit c41ad61

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

tests/test_fastapi_extension.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ async def t1(request: Request):
2020
client = TestClient(app)
2121
for i in range(0, 10):
2222
response = client.get("/t1")
23-
assert response.status_code == 200 if i < 5 else 429
23+
assert response.status_code == (200 if i < 5 else 429)
2424

2525
def test_single_decorator_with_headers(self, build_fastapi_app):
2626
app, limiter = build_fastapi_app(key_func=get_ipaddr, headers_enabled=True)
@@ -33,7 +33,7 @@ async def t1(request: Request):
3333
client = TestClient(app)
3434
for i in range(0, 10):
3535
response = client.get("/t1")
36-
assert response.status_code == 200 if i < 5 else 429
36+
assert response.status_code == (200 if i < 5 else 429)
3737
assert (
3838
response.headers.get("X-RateLimit-Limit") is not None if i < 5 else True
3939
)
@@ -50,7 +50,7 @@ async def t1(request: Request, response: Response):
5050
client = TestClient(app)
5151
for i in range(0, 10):
5252
response = client.get("/t1")
53-
assert response.status_code == 200 if i < 5 else 429
53+
assert response.status_code == (200 if i < 5 else 429)
5454

5555
def test_single_decorator_not_response_with_headers(self, build_fastapi_app):
5656
app, limiter = build_fastapi_app(key_func=get_ipaddr, headers_enabled=True)
@@ -63,7 +63,7 @@ async def t1(request: Request, response: Response):
6363
client = TestClient(app)
6464
for i in range(0, 10):
6565
response = client.get("/t1")
66-
assert response.status_code == 200 if i < 5 else 429
66+
assert response.status_code == (200 if i < 5 else 429)
6767
assert (
6868
response.headers.get("X-RateLimit-Limit") is not None if i < 5 else True
6969
)
@@ -84,7 +84,7 @@ async def t1(request: Request):
8484
cli = TestClient(app)
8585
for i in range(0, 100):
8686
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
87-
assert response.status_code == 200 if i < 50 else 429
87+
assert response.status_code == (200 if i < 50 else 429)
8888
for i in range(50):
8989
assert cli.get("/t1").status_code == 200
9090

@@ -109,7 +109,7 @@ async def t1(request: Request, response: Response):
109109
cli = TestClient(app)
110110
for i in range(0, 100):
111111
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
112-
assert response.status_code == 200 if i < 50 else 429
112+
assert response.status_code == (200 if i < 50 else 429)
113113
for i in range(50):
114114
assert cli.get("/t1").status_code == 200
115115

@@ -134,7 +134,7 @@ async def t1(request: Request, response: Response):
134134
cli = TestClient(app)
135135
for i in range(0, 100):
136136
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
137-
assert response.status_code == 200 if i < 50 else 429
137+
assert response.status_code == (200 if i < 50 else 429)
138138
for i in range(50):
139139
assert cli.get("/t1").status_code == 200
140140

@@ -253,11 +253,11 @@ async def t1(request: Request, response: Response):
253253
client = TestClient(app)
254254
for i in range(0, 10):
255255
response = client.get("/t1")
256-
assert response.status_code == 200 if i < 5 else 429
256+
assert response.status_code == (200 if i < 5 else 429)
257257

258258
for i in range(0, 20):
259259
response = client.get("/t1", headers={"TOKEN": "secret"})
260-
assert response.status_code == 200 if i < 10 else 429
260+
assert response.status_code == (200 if i < 10 else 429)
261261

262262
def test_disabled_limiter(self, build_fastapi_app):
263263
"""
@@ -308,10 +308,10 @@ async def t2(request: Request):
308308
client = TestClient(app)
309309
for i in range(0, 10):
310310
response = client.get("/t1")
311-
assert response.status_code == 200 if i < 5 else 429
311+
assert response.status_code == (200 if i < 5 else 429)
312312

313313
response = client.get("/t2")
314-
assert response.status_code == 200 if i < 3 else 429
314+
assert response.status_code == (200 if i < 3 else 429)
315315

316316
def test_callable_cost(self, build_fastapi_app):
317317
app, limiter = build_fastapi_app(key_func=get_ipaddr)
@@ -331,10 +331,10 @@ async def t2(request: Request):
331331
client = TestClient(app)
332332
for i in range(0, 10):
333333
response = client.get("/t1", headers={"foo": "10"})
334-
assert response.status_code == 200 if i < 5 else 429
334+
assert response.status_code == (200 if i < 5 else 429)
335335

336336
response = client.get("/t2", headers={"foo": "5"})
337-
assert response.status_code == 200 if i < 6 else 429
337+
assert response.status_code == (200 if i < 6 else 429)
338338

339339
@pytest.mark.parametrize(
340340
"key_style",

tests/test_starlette_extension.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async def t1(request: Request):
2323
client = TestClient(app)
2424
for i in range(0, 10):
2525
response = client.get("/t1")
26-
assert response.status_code == 200 if i < 5 else 429
26+
assert response.status_code == (200 if i < 5 else 429)
2727
if i < 5:
2828
assert response.text == "test"
2929

@@ -39,7 +39,7 @@ def t1(request: Request):
3939
client = TestClient(app)
4040
for i in range(0, 10):
4141
response = client.get("/t1")
42-
assert response.status_code == 200 if i < 5 else 429
42+
assert response.status_code == (200 if i < 5 else 429)
4343
if i < 5:
4444
assert response.text == "test"
4545

@@ -83,7 +83,7 @@ def always_dynamic(request: Request):
8383
# Test always false hitting the limit after one hit
8484
for i in range(0, 2):
8585
response = client.get("/false")
86-
assert response.status_code == 200 if i < 1 else 429
86+
assert response.status_code == (200 if i < 1 else 429)
8787
if i < 1:
8888
assert response.text == "test"
8989
# Test dynamic not exempting with the correct header
@@ -94,7 +94,7 @@ def always_dynamic(request: Request):
9494
# Test dynamic exempting with the incorrect header
9595
for i in range(0, 2):
9696
response = client.get("/dynamic")
97-
assert response.status_code == 200 if i < 1 else 429
97+
assert response.status_code == (200 if i < 1 else 429)
9898
if i < 1:
9999
assert response.text == "test"
100100

@@ -117,7 +117,7 @@ def t2(request: Request):
117117
client = TestClient(app)
118118
for i in range(0, 10):
119119
response = client.get("/t1")
120-
assert response.status_code == 200 if i < 5 else 429
120+
assert response.status_code == (200 if i < 5 else 429)
121121
# the shared limit has already been hit via t1
122122
assert client.get("/t2").status_code == 429
123123

@@ -135,7 +135,7 @@ async def t1(request: Request):
135135
cli = TestClient(app)
136136
for i in range(0, 10):
137137
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
138-
assert response.status_code == 200 if i < 5 else 429
138+
assert response.status_code == (200 if i < 5 else 429)
139139
for i in range(5):
140140
assert cli.get("/t1").status_code == 200
141141

@@ -159,7 +159,7 @@ async def t1(request: Request):
159159
cli = TestClient(app)
160160
for i in range(0, 10):
161161
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
162-
assert response.status_code == 200 if i < 5 else 429
162+
assert response.status_code == (200 if i < 5 else 429)
163163
assert response.headers.get("Retry-After") if i < 5 else True
164164
for i in range(5):
165165
assert cli.get("/t1").status_code == 200
@@ -304,7 +304,7 @@ async def t1(request: Request):
304304
cli = TestClient(app)
305305
for i in range(0, 10):
306306
response = cli.get("/t1", headers={"X_FORWARDED_FOR": "127.0.0.2"})
307-
assert response.status_code == 200 if i < 5 else 429
307+
assert response.status_code == (200 if i < 5 else 429)
308308
for i in range(5):
309309
assert cli.get("/t1").status_code == 200
310310

@@ -332,14 +332,14 @@ async def t2(request: Request):
332332
client = TestClient(app)
333333
for i in range(0, 10):
334334
response = client.get("/t1")
335-
assert response.status_code == 200 if i < 5 else 429
335+
assert response.status_code == (200 if i < 5 else 429)
336336
if i < 5:
337337
assert response.text == "test"
338338
else:
339339
assert "error" in response.json()
340340

341341
response = client.get("/t2")
342-
assert response.status_code == 200 if i < 3 else 429
342+
assert response.status_code == (200 if i < 3 else 429)
343343
if i < 3:
344344
assert response.text == "test"
345345
else:
@@ -365,14 +365,14 @@ async def t2(request: Request):
365365
client = TestClient(app)
366366
for i in range(0, 10):
367367
response = client.get("/t1", headers={"foo": "10"})
368-
assert response.status_code == 200 if i < 5 else 429
368+
assert response.status_code == (200 if i < 5 else 429)
369369
if i < 5:
370370
assert response.text == "test"
371371
else:
372372
assert "error" in response.json()
373373

374374
response = client.get("/t2", headers={"foo": "5"})
375-
assert response.status_code == 200 if i < 6 else 429
375+
assert response.status_code == (200 if i < 6 else 429)
376376
if i < 6:
377377
assert response.text == "test"
378378
else:

0 commit comments

Comments
 (0)