Skip to content

Commit d883807

Browse files
Expand extension manager list response regression coverage
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent d220d54 commit d883807

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

tests/test_extension_manager.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4156
class _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

6292
class _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

Comments
 (0)