Skip to content

Commit e5883f4

Browse files
committed
tests
1 parent 5587a29 commit e5883f4

5 files changed

Lines changed: 178 additions & 79 deletions

File tree

src/tests/test_async_namespace.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,52 @@ def test_emit_method(self) -> None:
2626
assert hasattr(mod.AsyncNamespace, "emit")
2727
sig = inspect.signature(mod.AsyncNamespace.emit)
2828
params = list(sig.parameters.keys())
29-
assert "event" in params
30-
assert "data" in params
31-
assert "to" in params
32-
assert "room" in params
33-
assert "skip_sid" in params
34-
assert "namespace" in params
35-
assert "callback" in params
36-
assert "ignore_queue" in params
29+
# Exact match to catch stub/runtime mismatches
30+
assert params == [
31+
"self",
32+
"event",
33+
"data",
34+
"to",
35+
"room",
36+
"skip_sid",
37+
"namespace",
38+
"callback",
39+
"ignore_queue",
40+
]
3741

3842
def test_send_method(self) -> None:
3943
assert hasattr(mod.AsyncNamespace, "send")
40-
assert callable(mod.AsyncNamespace.send)
44+
sig = inspect.signature(mod.AsyncNamespace.send)
45+
params = list(sig.parameters.keys())
46+
# Exact match to catch stub/runtime mismatches
47+
assert params == [
48+
"self",
49+
"data",
50+
"to",
51+
"room",
52+
"skip_sid",
53+
"namespace",
54+
"callback",
55+
"ignore_queue",
56+
]
4157

4258
def test_call_method(self) -> None:
4359
assert hasattr(mod.AsyncNamespace, "call")
44-
assert callable(mod.AsyncNamespace.call)
60+
sig = inspect.signature(mod.AsyncNamespace.call)
61+
params = list(sig.parameters.keys())
62+
# Exact match to catch stub/runtime mismatches
63+
assert params == [
64+
"self",
65+
"event",
66+
"data",
67+
"to",
68+
"sid",
69+
"namespace",
70+
"timeout",
71+
"ignore_queue",
72+
]
73+
# Verify timeout default is None (not int)
74+
assert sig.parameters["timeout"].default is None
4575

4676
def test_enter_room_method(self) -> None:
4777
assert hasattr(mod.AsyncNamespace, "enter_room")
@@ -90,18 +120,24 @@ def test_emit_method(self) -> None:
90120
assert hasattr(mod.AsyncClientNamespace, "emit")
91121
sig = inspect.signature(mod.AsyncClientNamespace.emit)
92122
params = list(sig.parameters.keys())
93-
assert "event" in params
94-
assert "data" in params
95-
assert "namespace" in params
96-
assert "callback" in params
123+
# Exact match to catch stub/runtime mismatches
124+
assert params == ["self", "event", "data", "namespace", "callback"]
97125

98126
def test_send_method(self) -> None:
99127
assert hasattr(mod.AsyncClientNamespace, "send")
100-
assert callable(mod.AsyncClientNamespace.send)
128+
sig = inspect.signature(mod.AsyncClientNamespace.send)
129+
params = list(sig.parameters.keys())
130+
# Exact match to catch stub/runtime mismatches
131+
assert params == ["self", "data", "namespace", "callback"]
101132

102133
def test_call_method(self) -> None:
103134
assert hasattr(mod.AsyncClientNamespace, "call")
104-
assert callable(mod.AsyncClientNamespace.call)
135+
sig = inspect.signature(mod.AsyncClientNamespace.call)
136+
params = list(sig.parameters.keys())
137+
# Exact match to catch stub/runtime mismatches
138+
assert params == ["self", "event", "data", "namespace", "timeout"]
139+
# Verify timeout default is None (not int)
140+
assert sig.parameters["timeout"].default is None
105141

106142
def test_disconnect_method(self) -> None:
107143
assert hasattr(mod.AsyncClientNamespace, "disconnect")

src/tests/test_async_pubsub_manager.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ def test_inherits_async_manager(self) -> None:
2121
def test_init_signature(self) -> None:
2222
sig = inspect.signature(mod.AsyncPubSubManager.__init__)
2323
params = list(sig.parameters.keys())
24-
assert "self" in params
25-
assert "channel" in params
26-
assert "write_only" in params
27-
assert "logger" in params
24+
# Exact match to catch stub/runtime mismatches
25+
assert params == ["self", "channel", "write_only", "logger"]
2826

2927
def test_name_attribute(self) -> None:
3028
assert hasattr(mod.AsyncPubSubManager, "name")
@@ -47,21 +45,35 @@ def test_emit_method(self) -> None:
4745
assert hasattr(mod.AsyncPubSubManager, "emit")
4846
sig = inspect.signature(mod.AsyncPubSubManager.emit)
4947
params = list(sig.parameters.keys())
50-
assert "event" in params
51-
assert "data" in params
52-
assert "namespace" in params
53-
assert "room" in params
54-
assert "skip_sid" in params
55-
assert "callback" in params
56-
assert "to" in params
48+
# Exact match to catch stub/runtime mismatches
49+
assert params == [
50+
"self",
51+
"event",
52+
"data",
53+
"namespace",
54+
"room",
55+
"skip_sid",
56+
"callback",
57+
"to",
58+
"kwargs",
59+
]
5760

5861
def test_can_disconnect_method(self) -> None:
5962
assert hasattr(mod.AsyncPubSubManager, "can_disconnect")
60-
assert callable(mod.AsyncPubSubManager.can_disconnect)
63+
sig = inspect.signature(mod.AsyncPubSubManager.can_disconnect)
64+
params = list(sig.parameters.keys())
65+
# Exact match to catch stub/runtime mismatches
66+
assert params == ["self", "sid", "namespace"]
6167

6268
def test_disconnect_method(self) -> None:
6369
assert hasattr(mod.AsyncPubSubManager, "disconnect")
64-
assert callable(mod.AsyncPubSubManager.disconnect)
70+
sig = inspect.signature(mod.AsyncPubSubManager.disconnect)
71+
params = list(sig.parameters.keys())
72+
# Exact match to catch stub/runtime mismatches
73+
# namespace is required (no default), not optional
74+
assert params == ["self", "sid", "namespace", "kwargs"]
75+
# Verify namespace has no default (is required)
76+
assert sig.parameters["namespace"].default is inspect.Parameter.empty
6577

6678
def test_enter_room_method(self) -> None:
6779
assert hasattr(mod.AsyncPubSubManager, "enter_room")

src/tests/test_async_server.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ def test_inherits_base_server(self) -> None:
3333
def test_init_signature(self) -> None:
3434
sig = inspect.signature(mod.AsyncServer.__init__)
3535
params = list(sig.parameters.keys())
36-
assert "self" in params
37-
assert "client_manager" in params
38-
assert "logger" in params
39-
assert "json" in params
40-
assert "async_handlers" in params
41-
assert "namespaces" in params
42-
# serializer, always_connect, async_mode and engineio options may be in kwargs
43-
assert "kwargs" in params or any(
44-
sig.parameters[p].kind == inspect.Parameter.VAR_KEYWORD for p in params
45-
)
36+
# Exact match to catch stub/runtime mismatches
37+
assert params == [
38+
"self",
39+
"client_manager",
40+
"logger",
41+
"json",
42+
"async_handlers",
43+
"namespaces",
44+
"kwargs",
45+
]
4646

4747
def test_attach_method(self) -> None:
4848
assert hasattr(mod.AsyncServer, "attach")
@@ -52,14 +52,18 @@ def test_emit_method(self) -> None:
5252
assert hasattr(mod.AsyncServer, "emit")
5353
sig = inspect.signature(mod.AsyncServer.emit)
5454
params = list(sig.parameters.keys())
55-
assert "event" in params
56-
assert "data" in params
57-
assert "to" in params
58-
assert "room" in params
59-
assert "skip_sid" in params
60-
assert "namespace" in params
61-
assert "callback" in params
62-
assert "ignore_queue" in params
55+
# Exact match to catch stub/runtime mismatches
56+
assert params == [
57+
"self",
58+
"event",
59+
"data",
60+
"to",
61+
"room",
62+
"skip_sid",
63+
"namespace",
64+
"callback",
65+
"ignore_queue",
66+
]
6367

6468
def test_send_method(self) -> None:
6569
assert hasattr(mod.AsyncServer, "send")

src/tests/test_async_simple_client.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,32 @@ def test_client_class_class_var(self) -> None:
2424
def test_init_accepts_any_args(self) -> None:
2525
sig = inspect.signature(mod.AsyncSimpleClient.__init__)
2626
params = list(sig.parameters.keys())
27-
assert "self" in params
28-
assert "args" in params
29-
assert "kwargs" in params
27+
# Exact match to catch stub/runtime mismatches
28+
assert params == ["self", "args", "kwargs"]
29+
30+
def test_client_attribute_type(self) -> None:
31+
"""Verify client attribute is AsyncClient | None, not Client | None."""
32+
client = mod.AsyncSimpleClient()
33+
assert hasattr(client, "client")
34+
# Should be None initially (before connect)
35+
assert_type(client.client, async_client_mod.AsyncClient | None)
36+
assert client.client is None
3037

3138
def test_connect_method(self) -> None:
3239
assert hasattr(mod.AsyncSimpleClient, "connect")
3340
sig = inspect.signature(mod.AsyncSimpleClient.connect)
3441
params = list(sig.parameters.keys())
35-
assert "url" in params
36-
assert "headers" in params
37-
assert "auth" in params
38-
assert "transports" in params
39-
assert "namespace" in params
40-
assert "socketio_path" in params
41-
assert "wait_timeout" in params
42+
# Exact match to catch stub/runtime mismatches
43+
assert params == [
44+
"self",
45+
"url",
46+
"headers",
47+
"auth",
48+
"transports",
49+
"namespace",
50+
"socketio_path",
51+
"wait_timeout",
52+
]
4253

4354
def test_sid_property(self) -> None:
4455
assert hasattr(mod.AsyncSimpleClient, "sid")
@@ -50,22 +61,22 @@ def test_emit_method(self) -> None:
5061
assert hasattr(mod.AsyncSimpleClient, "emit")
5162
sig = inspect.signature(mod.AsyncSimpleClient.emit)
5263
params = list(sig.parameters.keys())
53-
assert "event" in params
54-
assert "data" in params
64+
# Exact match to catch stub/runtime mismatches
65+
assert params == ["self", "event", "data"]
5566

5667
def test_call_method(self) -> None:
5768
assert hasattr(mod.AsyncSimpleClient, "call")
5869
sig = inspect.signature(mod.AsyncSimpleClient.call)
5970
params = list(sig.parameters.keys())
60-
assert "event" in params
61-
assert "data" in params
62-
assert "timeout" in params
71+
# Exact match to catch stub/runtime mismatches
72+
assert params == ["self", "event", "data", "timeout"]
6373

6474
def test_receive_method(self) -> None:
6575
assert hasattr(mod.AsyncSimpleClient, "receive")
6676
sig = inspect.signature(mod.AsyncSimpleClient.receive)
6777
params = list(sig.parameters.keys())
68-
assert "timeout" in params
78+
# Exact match to catch stub/runtime mismatches
79+
assert params == ["self", "timeout"]
6980

7081
def test_disconnect_method(self) -> None:
7182
assert hasattr(mod.AsyncSimpleClient, "disconnect")

src/tests/test_namespace.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,52 @@ def test_emit_method(self) -> None:
2626
assert hasattr(mod.Namespace, "emit")
2727
sig = inspect.signature(mod.Namespace.emit)
2828
params = list(sig.parameters.keys())
29-
assert "event" in params
30-
assert "data" in params
31-
assert "to" in params
32-
assert "room" in params
33-
assert "skip_sid" in params
34-
assert "namespace" in params
35-
assert "callback" in params
36-
assert "ignore_queue" in params
29+
# Exact match to catch stub/runtime mismatches
30+
assert params == [
31+
"self",
32+
"event",
33+
"data",
34+
"to",
35+
"room",
36+
"skip_sid",
37+
"namespace",
38+
"callback",
39+
"ignore_queue",
40+
]
3741

3842
def test_send_method(self) -> None:
3943
assert hasattr(mod.Namespace, "send")
40-
assert callable(mod.Namespace.send)
44+
sig = inspect.signature(mod.Namespace.send)
45+
params = list(sig.parameters.keys())
46+
# Exact match to catch stub/runtime mismatches
47+
assert params == [
48+
"self",
49+
"data",
50+
"to",
51+
"room",
52+
"skip_sid",
53+
"namespace",
54+
"callback",
55+
"ignore_queue",
56+
]
4157

4258
def test_call_method(self) -> None:
4359
assert hasattr(mod.Namespace, "call")
44-
assert callable(mod.Namespace.call)
60+
sig = inspect.signature(mod.Namespace.call)
61+
params = list(sig.parameters.keys())
62+
# Exact match to catch stub/runtime mismatches
63+
assert params == [
64+
"self",
65+
"event",
66+
"data",
67+
"to",
68+
"sid",
69+
"namespace",
70+
"timeout",
71+
"ignore_queue",
72+
]
73+
# Verify timeout default is None (not int)
74+
assert sig.parameters["timeout"].default is None
4575

4676
def test_enter_room_method(self) -> None:
4777
assert hasattr(mod.Namespace, "enter_room")
@@ -90,18 +120,24 @@ def test_emit_method(self) -> None:
90120
assert hasattr(mod.ClientNamespace, "emit")
91121
sig = inspect.signature(mod.ClientNamespace.emit)
92122
params = list(sig.parameters.keys())
93-
assert "event" in params
94-
assert "data" in params
95-
assert "namespace" in params
96-
assert "callback" in params
123+
# Exact match to catch stub/runtime mismatches
124+
assert params == ["self", "event", "data", "namespace", "callback"]
97125

98126
def test_send_method(self) -> None:
99127
assert hasattr(mod.ClientNamespace, "send")
100-
assert callable(mod.ClientNamespace.send)
128+
sig = inspect.signature(mod.ClientNamespace.send)
129+
params = list(sig.parameters.keys())
130+
# Exact match to catch stub/runtime mismatches
131+
assert params == ["self", "data", "room", "namespace", "callback"]
101132

102133
def test_call_method(self) -> None:
103134
assert hasattr(mod.ClientNamespace, "call")
104-
assert callable(mod.ClientNamespace.call)
135+
sig = inspect.signature(mod.ClientNamespace.call)
136+
params = list(sig.parameters.keys())
137+
# Exact match to catch stub/runtime mismatches
138+
assert params == ["self", "event", "data", "namespace", "timeout"]
139+
# Verify timeout default is None (not int)
140+
assert sig.parameters["timeout"].default is None
105141

106142
def test_disconnect_method(self) -> None:
107143
assert hasattr(mod.ClientNamespace, "disconnect")

0 commit comments

Comments
 (0)