@@ -37,6 +37,21 @@ def post(self, url, data=None, files=None):
3737 }
3838 )
3939
40+ def get (self , url , params = None , follow_redirects = False ):
41+ assert url .endswith ("/extensions/list" )
42+ return _FakeResponse (
43+ {
44+ "extensions" : [
45+ {
46+ "id" : "ext_list_sync" ,
47+ "name" : "list-extension" ,
48+ "createdAt" : "2026-01-01T00:00:00Z" ,
49+ "updatedAt" : "2026-01-01T00:00:00Z" ,
50+ }
51+ ]
52+ }
53+ )
54+
4055
4156class _AsyncTransport :
4257 def __init__ (self ):
@@ -58,6 +73,21 @@ async def post(self, url, data=None, files=None):
5873 }
5974 )
6075
76+ async def get (self , url , params = None , follow_redirects = False ):
77+ assert url .endswith ("/extensions/list" )
78+ return _FakeResponse (
79+ {
80+ "extensions" : [
81+ {
82+ "id" : "ext_list_async" ,
83+ "name" : "list-extension" ,
84+ "createdAt" : "2026-01-01T00:00:00Z" ,
85+ "updatedAt" : "2026-01-01T00:00:00Z" ,
86+ }
87+ ]
88+ }
89+ )
90+
6191
6292class _FakeClient :
6393 def __init__ (self , transport ):
@@ -150,3 +180,51 @@ async def run():
150180 await manager .create (params )
151181
152182 asyncio .run (run ())
183+
184+
185+ def test_sync_extension_list_returns_parsed_extensions ():
186+ manager = SyncExtensionManager (_FakeClient (_SyncTransport ()))
187+
188+ extensions = manager .list ()
189+
190+ assert len (extensions ) == 1
191+ assert extensions [0 ].id == "ext_list_sync"
192+
193+
194+ def test_async_extension_list_returns_parsed_extensions ():
195+ manager = AsyncExtensionManager (_FakeClient (_AsyncTransport ()))
196+
197+ async def run ():
198+ return await manager .list ()
199+
200+ extensions = asyncio .run (run ())
201+
202+ assert len (extensions ) == 1
203+ assert extensions [0 ].id == "ext_list_async"
204+
205+
206+ def test_sync_extension_list_raises_for_invalid_payload_shape ():
207+ class _InvalidSyncTransport :
208+ def get (self , url , params = None , follow_redirects = False ):
209+ return _FakeResponse ({"extensions" : "not-a-list" })
210+
211+ manager = SyncExtensionManager (_FakeClient (_InvalidSyncTransport ()))
212+
213+ with pytest .raises (HyperbrowserError , match = "Expected list in 'extensions' key" ):
214+ manager .list ()
215+
216+
217+ def test_async_extension_list_raises_for_invalid_payload_shape ():
218+ class _InvalidAsyncTransport :
219+ async def get (self , url , params = None , follow_redirects = False ):
220+ return _FakeResponse ({"extensions" : "not-a-list" })
221+
222+ manager = AsyncExtensionManager (_FakeClient (_InvalidAsyncTransport ()))
223+
224+ async def run ():
225+ with pytest .raises (
226+ HyperbrowserError , match = "Expected list in 'extensions' key"
227+ ):
228+ await manager .list ()
229+
230+ asyncio .run (run ())
0 commit comments