@@ -100,3 +100,82 @@ def event_handler(event: Event):
100100 session .publish_object ("io.xconn.object" , String ("hello" ))
101101
102102 session .leave ()
103+
104+
105+ def test_register_object_one_param_with_return_type ():
106+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
107+ session .set_payload_codec (ProtobufCodec ())
108+
109+ def create_profile_handler (prof : ProfileCreate ) -> ProfileGet :
110+ return ProfileGet (
111+ id = "356" ,
112+ username = prof .username ,
113+ email = prof .email ,
114+ age = prof .age ,
115+ created_at = "2025-10-30T17:00:00Z" ,
116+ )
117+
118+ session .register_object ("io.xconn.profile.create" , create_profile_handler )
119+
120+ profile_create = ProfileCreate (
username = "john" ,
email = "[email protected] " ,
age = 25 )
121+ result = session .call ("io.xconn.profile.create" , [profile_create .SerializeToString ()])
122+
123+ profile = ProfileGet ()
124+ profile .ParseFromString (result .args [0 ])
125+
126+ assert profile .id == "356"
127+ assert profile .username == "john"
128+ assert profile .
email == "[email protected] " 129+ assert profile .age == 25
130+ assert profile .created_at == "2025-10-30T17:00:00Z"
131+
132+ session .leave ()
133+
134+
135+ def test_register_object_no_param ():
136+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
137+ session .set_payload_codec (ProtobufCodec ())
138+
139+ options = {"flag" : False }
140+
141+ def invocation_handler () -> None :
142+ options ["flag" ] = True
143+
144+ session .register_object ("io.xconn.param.none" , invocation_handler )
145+
146+ result = session .call ("io.xconn.param.none" )
147+
148+ assert options ["flag" ] is True
149+ assert result .args is None
150+ assert result .kwargs is None
151+
152+ session .leave ()
153+
154+
155+ def test_register_object_no_param_with_return ():
156+ session = connect_anonymous ("ws://localhost:8080/ws" , "realm1" )
157+ session .set_payload_codec (ProtobufCodec ())
158+
159+ def get_profile_handler () -> ProfileGet :
160+ return ProfileGet (
161+ id = "636" ,
162+ username = "admin" ,
163+ 164+ age = 30 ,
165+ created_at = "2025-10-30T17:00:00Z" ,
166+ )
167+
168+ session .register_object ("io.xconn.profile.get" , get_profile_handler )
169+
170+ result = session .call ("io.xconn.profile.get" )
171+
172+ profile = ProfileGet ()
173+ profile .ParseFromString (result .args [0 ])
174+
175+ assert profile .id == "636"
176+ assert profile .username == "admin"
177+ assert profile .
email == "[email protected] " 178+ assert profile .age == 30
179+ assert profile .created_at == "2025-10-30T17:00:00Z"
180+
181+ session .leave ()
0 commit comments