1+ import contextlib
2+
13import pytest
24from unittest .mock import AsyncMock , patch , MagicMock
35
68from getstream .video .rtc .pb .stream .video .sfu .models import models_pb2
79
810
9- @pytest .fixture
10- def connection_manager (request ):
11- """Create a ConnectionManager with mocked heavy dependencies.
12-
13- Accepts max_join_retries via indirect parametrize, defaults to 3.
14- """
15- max_join_retries = getattr (request , "param" , 3 )
11+ @contextlib .contextmanager
12+ def patched_dependencies ():
13+ """Patch heavy ConnectionManager dependencies for unit testing."""
1614 with (
1715 patch ("getstream.video.rtc.connection_manager.PeerConnectionManager" ),
1816 patch ("getstream.video.rtc.connection_manager.NetworkMonitor" ),
@@ -26,6 +24,17 @@ def connection_manager(request):
2624 new_callable = AsyncMock ,
2725 ),
2826 ):
27+ yield
28+
29+
30+ @pytest .fixture
31+ def connection_manager (request ):
32+ """Create a ConnectionManager with mocked heavy dependencies.
33+
34+ Accepts max_join_retries via indirect parametrize, defaults to 3.
35+ """
36+ max_join_retries = getattr (request , "param" , 3 )
37+ with patched_dependencies ():
2938 mock_call = MagicMock ()
3039 mock_call .call_type = "default"
3140 mock_call .id = "test_call"
@@ -153,3 +162,11 @@ async def mock_connect_internal(migrating_from_list=None, **kwargs):
153162 assert call_count == 2
154163 first_ws_client .close .assert_called_once ()
155164 assert cm ._ws_client is None
165+
166+ def test_rejects_negative_max_join_retries (self ):
167+ """max_join_retries must be >= 0."""
168+ with (
169+ patched_dependencies (),
170+ pytest .raises (ValueError , match = "max_join_retries must be >= 0" ),
171+ ):
172+ ConnectionManager (call = MagicMock (), user_id = "user1" , max_join_retries = - 1 )
0 commit comments