44from typing import Type , TypeVar , Any
55
66import capnp
7+ import pytest
78from google .protobuf .message import Message
89
910from xconn .client import connect_anonymous
1011from xconn import codec
11- from xconn .types import Event
1212from tests .schemas .profile_pb2 import ProfileCreate , ProfileGet
1313
1414
@@ -82,12 +82,63 @@ def test_pubsub_object():
8282 session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
8383 session .set_payload_codec (Base64Codec ())
8484
85- def event_handler (event : Event ):
86- assert event . args [ 0 ] == "hello"
85+ def event_handler (data : String ):
86+ assert data == "hello"
8787
88- session .subscribe_object ("io.xconn.object" , event_handler , String )
88+ session .subscribe_object ("io.xconn.object" , event_handler )
8989
90- session .publish_object ("io.xconn.object" , String ("hello" ))
90+ session .publish_object ("io.xconn.object" , String ("hello" ), {"acknowledge" : True })
91+
92+ session .leave ()
93+
94+
95+ def test_subscribe_object_without_codec ():
96+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
97+
98+ def event_handler (user : ProfileCreate ):
99+ pass
100+
101+ with pytest .raises (ValueError , match = "no payload codec set" ):
102+ session .subscribe_object ("io.xconn.object" , event_handler )
103+
104+ session .leave ()
105+
106+
107+ def test_subscribe_object_without_args ():
108+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
109+ session .set_payload_codec (Base64Codec ())
110+
111+ def event_handler ():
112+ pass
113+
114+ with pytest .raises (ValueError , match = "event handler must accept 1 argument" ):
115+ session .subscribe_object ("io.xconn.object" , event_handler )
116+
117+ session .leave ()
118+
119+
120+ def test_subscribe_object_with_multiple_args ():
121+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
122+ session .set_payload_codec (ProtobufCodec ())
123+
124+ def event_handler (user : ProfileCreate , a ):
125+ pass
126+
127+ with pytest .raises (ValueError , match = "event handler must accept 1 argument" ):
128+ session .subscribe_object ("io.xconn.object" , event_handler )
129+
130+ session .leave ()
131+
132+
133+ def test_subscribe_object_without_annotation ():
134+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
135+ session .set_payload_codec (ProtobufCodec ())
136+
137+ def event_handler (user ):
138+ pass
139+
140+ with pytest .raises (TypeError , match = "event handler parameter must have a type annotation" ):
141+ session .subscribe_object ("io.xconn.object" , event_handler )
91142
92143 session .leave ()
93144
@@ -96,16 +147,15 @@ def test_pubsub_protobuf():
96147 session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
97148 session .set_payload_codec (ProtobufCodec ())
98149
99- def event_handler (event : Event ):
100- user : ProfileCreate = event .args [0 ]
150+ def event_handler (user : ProfileCreate ):
101151 assert user .username == "john"
102152 assert user .
email == "[email protected] " 103153 assert user .age == 25
104154
105- session .subscribe_object ("io.xconn.object" , event_handler , ProfileCreate )
155+ session .subscribe_object ("io.xconn.object" , event_handler )
106156
107157 create_msg = ProfileCreate (
username = "john" ,
email = "[email protected] " ,
age = 25 )
108- session .publish_object ("io.xconn.object" , create_msg )
158+ session .publish_object ("io.xconn.object" , create_msg , { "acknowledge" : True } )
109159
110160 session .leave ()
111161
@@ -239,19 +289,18 @@ def test_pubsub_capnproto():
239289 session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
240290 session .set_payload_codec (CapnpProtoCodec ())
241291
242- def event_handler (event : Event ):
243- user : UserCreate = event .args [0 ]
292+ def event_handler (user : UserCreate ):
244293 assert user .name == "alice"
245294 assert user .
email == "[email protected] " 246295 assert user .age == 21
247296
248- session .subscribe_object ("io.xconn.object" , event_handler , UserCreate )
297+ session .subscribe_object ("io.xconn.object" , event_handler )
249298
250299 new_user = UserCreate .new_message ()
251300 new_user .name = "alice"
252301 new_user .
email = "[email protected] " 253302 new_user .age = 21
254303
255- session .publish_object ("io.xconn.object" , new_user )
304+ session .publish_object ("io.xconn.object" , new_user , { "acknowledge" : True } )
256305
257306 session .leave ()
0 commit comments