Skip to content

Commit a32ffd2

Browse files
authored
Fix deprecations (#249)
* Address TemplateResponse deprecation * Remove unneeded asyncio marks * Rename class to not appear as unittest class * Try to patch the connection manager so tests don't conflict with each other * Restore xdist * CS * Remove python 3.9 leftovers * Revert "Restore xdist" This reverts commit 1792bf5.
1 parent c419eec commit a32ffd2

File tree

6 files changed

+52
-38
lines changed

6 files changed

+52
-38
lines changed

.github/workflows/python-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
test:
1616
strategy:
1717
matrix:
18-
version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
18+
version: ["3.10", "3.11", "3.12", "3.13"]
1919
os: [ubuntu-latest]
2020
runs-on: ${{ matrix.os }}
2121
steps:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ exclude = ["migrations"]
9999
# Pydantic plugin causes some issues: https://github.com/pydantic/pydantic-settings/issues/403
100100
#plugins = "pydantic.mypy,strawberry.ext.mypy_plugin"
101101
plugins = "strawberry.ext.mypy_plugin"
102-
python_version = "3.9"
102+
python_version = "3.10"
103103

104104
[[tool.mypy.overrides]]
105105
module = [

src/http_app/routes/hello.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@
1010

1111
@router.get("/", response_class=HTMLResponse, include_in_schema=True)
1212
async def hello(request: Request, jwt_token=Security(decode_jwt)):
13-
return templates.TemplateResponse("hello.html", {"request": request, "token_payload": jwt_token})
13+
return templates.TemplateResponse(
14+
name="hello.html",
15+
request=request,
16+
context={"token_payload": jwt_token},
17+
)

tests/common/test_asyncapi.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def reset_asyncapi_state():
2828

2929

3030
# Test message models
31-
class TestMessage(BaseModel):
31+
class SomeTestMessage(BaseModel):
3232
content: str
3333
timestamp: int
3434

@@ -103,31 +103,36 @@ def test_register_channel_operation(reset_asyncapi_state):
103103

104104
register_channel(address="test/topic", id=channel_id)
105105
register_channel_operation(
106-
channel_id=channel_id, operation_type=operation_type, messages=[TestMessage], operation_name="test-operation"
106+
channel_id=channel_id,
107+
operation_type=operation_type,
108+
messages=[SomeTestMessage],
109+
operation_name="test-operation",
107110
)
108111

109112
schema = get_schema()
110113
assert "test-operation" in schema.operations
111114
assert schema.operations["test-operation"].action == operation_type
112115
assert schema.operations["test-operation"].channel.ref == f"#/channels/{channel_id}"
113-
assert TestMessage.__name__ in schema.components.schemas
116+
assert SomeTestMessage.__name__ in schema.components.schemas
114117

115118

116119
def test_register_channel_operation_invalid_channel(reset_asyncapi_state):
117120
"""Test channel operation registration with invalid channel"""
118121
with pytest.raises(ValueError, match="Channel non-existent does not exist"):
119-
register_channel_operation(channel_id="non-existent", operation_type="receive", messages=[TestMessage])
122+
register_channel_operation(channel_id="non-existent", operation_type="receive", messages=[SomeTestMessage])
120123

121124

122125
def test_multiple_messages_registration(reset_asyncapi_state):
123126
"""Test registration of multiple messages for an operation"""
124127
channel_id = "test-channel"
125128

126129
register_channel(address="test/topic", id=channel_id)
127-
register_channel_operation(channel_id=channel_id, operation_type="send", messages=[TestMessage, AnotherTestMessage])
130+
register_channel_operation(
131+
channel_id=channel_id, operation_type="send", messages=[SomeTestMessage, AnotherTestMessage]
132+
)
128133

129134
schema = get_schema()
130-
assert TestMessage.__name__ in schema.components.schemas
135+
assert SomeTestMessage.__name__ in schema.components.schemas
131136
assert AnotherTestMessage.__name__ in schema.components.schemas
132-
assert TestMessage.__name__ in schema.channels[channel_id].messages
137+
assert SomeTestMessage.__name__ in schema.channels[channel_id].messages
133138
assert AnotherTestMessage.__name__ in schema.channels[channel_id].messages

tests/common/test_tracing.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ def add_nums(a, b):
4343
mock_span.set_attribute.assert_any_call("function.result", "5")
4444

4545

46-
@pytest.mark.asyncio
4746
async def test_async_function_default_params(mock_tracer):
4847
"""
4948
Test an asynchronous function with default decorator parameters.
@@ -129,7 +128,6 @@ def sync_func(a, b):
129128
assert call("function.result") not in mock_span.set_attribute.call_args_list
130129

131130

132-
@pytest.mark.asyncio
133131
async def test_disable_result_in_span(mock_tracer):
134132
"""
135133
Test an asynchronous function with `add_result_to_span` set to False.

tests/http_app/routes/ws/test_chat.py

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from unittest.mock import patch
2+
13
import pytest
24
from fastapi.testclient import TestClient
35

@@ -15,44 +17,49 @@ def connection_manager():
1517

1618

1719
def test_websocket_connection(test_client):
18-
with test_client.websocket_connect("/ws/chat/1") as websocket:
19-
websocket.send_text("Hello!")
20-
data = websocket.receive_text()
20+
manager = ConnectionManager()
21+
with patch("http_app.routes.ws.chat.manager", manager):
22+
with test_client.websocket_connect("/ws/chat/1") as websocket:
23+
websocket.send_text("Hello!")
24+
data = websocket.receive_text()
2125

22-
assert data == "You wrote: Hello!"
23-
broadcast = websocket.receive_text()
24-
assert broadcast == "Client #1 says: Hello!"
26+
assert data == "You wrote: Hello!"
27+
broadcast = websocket.receive_text()
28+
assert broadcast == "Client #1 says: Hello!"
2529

2630

2731
def test_multiple_clients(test_client):
28-
with test_client.websocket_connect("/ws/chat/1") as websocket1:
29-
with test_client.websocket_connect("/ws/chat/2") as websocket2:
30-
# Client 1 sends message
31-
websocket1.send_text("Hello from client 1")
32+
manager = ConnectionManager()
33+
with patch("http_app.routes.ws.chat.manager", manager):
34+
with test_client.websocket_connect("/ws/chat/1") as websocket1:
35+
with test_client.websocket_connect("/ws/chat/2") as websocket2:
36+
# Client 1 sends message
37+
websocket1.send_text("Hello from client 1")
3238

33-
# Client 1 receives personal message
34-
data1 = websocket1.receive_text()
35-
assert data1 == "You wrote: Hello from client 1"
39+
# Client 1 receives personal message
40+
data1 = websocket1.receive_text()
41+
assert data1 == "You wrote: Hello from client 1"
3642

37-
# Both clients receive broadcast
38-
broadcast1 = websocket1.receive_text()
39-
broadcast2 = websocket2.receive_text()
40-
assert broadcast1 == "Client #1 says: Hello from client 1"
41-
assert broadcast2 == "Client #1 says: Hello from client 1"
43+
# Both clients receive broadcast
44+
broadcast1 = websocket1.receive_text()
45+
broadcast2 = websocket2.receive_text()
46+
assert broadcast1 == "Client #1 says: Hello from client 1"
47+
assert broadcast2 == "Client #1 says: Hello from client 1"
4248

4349

4450
def test_client_disconnect(test_client):
45-
with test_client.websocket_connect("/ws/chat/1") as websocket1:
46-
with test_client.websocket_connect("/ws/chat/2") as websocket2:
47-
# Close first client
48-
websocket1.close()
51+
manager = ConnectionManager()
52+
with patch("http_app.routes.ws.chat.manager", manager):
53+
with test_client.websocket_connect("/ws/chat/1") as websocket1:
54+
with test_client.websocket_connect("/ws/chat/2") as websocket2:
55+
# Close first client
56+
websocket1.close()
4957

50-
# Second client should receive disconnect message
51-
disconnect_message = websocket2.receive_text()
52-
assert disconnect_message == "Client #1 left the chat"
58+
# Second client should receive disconnect message
59+
disconnect_message = websocket2.receive_text()
60+
assert disconnect_message == "Client #1 left the chat"
5361

5462

55-
@pytest.mark.asyncio
5663
async def test_connection_manager():
5764
manager = ConnectionManager()
5865

0 commit comments

Comments
 (0)