@@ -56,6 +56,11 @@ def __init__(self, is_local: bool = False):
5656 # channel.publish.side_effect = RoborockException("timeout")
5757 self .publish = AsyncMock (side_effect = self ._publish )
5858
59+ # AsyncMock wrapping _subscribe. Callers can replace side_effect to
60+ # simulate subscription failures, e.g.:
61+ # channel.subscribe.side_effect = RoborockException("sub failed")
62+ self .subscribe = AsyncMock (side_effect = self ._subscribe ) # type: ignore[assignment]
63+
5964 # AsyncMock wrapping _connect. Callers can replace side_effect to
6065 # simulate connection failures, e.g.:
6166 # channel.connect.side_effect = RoborockException("refused")
@@ -100,10 +105,10 @@ async def _publish(self, message: RoborockMessage) -> None:
100105 response = self .response_queue .pop (0 )
101106 self .notify_subscribers (response )
102107
103- async def subscribe (self , callback : Callable [[RoborockMessage ], None ]) -> Callable [[], None ]:
104- """Register a callback and return an unsubscribe function .
108+ async def _subscribe (self , callback : Callable [[RoborockMessage ], None ]) -> Callable [[], None ]:
109+ """Default subscribe implementation .
105110
106- This is a real method implementing the Channel protocol, not a mock .
111+ Registers the callback and returns an unsubscribe function .
107112 """
108113 self .subscribers .append (callback )
109114 return lambda : self .subscribers .remove (callback )
0 commit comments