|
1 | 1 | import pytest |
| 2 | +from types import MappingProxyType |
2 | 3 |
|
3 | 4 | from hyperbrowser.client.managers import extension_utils |
4 | 5 | from hyperbrowser.client.managers.extension_utils import ( |
@@ -26,12 +27,14 @@ def test_parse_extension_list_response_data_parses_extensions(): |
26 | 27 |
|
27 | 28 |
|
28 | 29 | def test_parse_extension_list_response_data_rejects_non_dict_payload(): |
29 | | - with pytest.raises(HyperbrowserError, match="Expected dict response"): |
| 30 | + with pytest.raises(HyperbrowserError, match="Expected mapping response"): |
30 | 31 | parse_extension_list_response_data(["not-a-dict"]) # type: ignore[arg-type] |
31 | 32 |
|
32 | 33 |
|
33 | 34 | def test_parse_extension_list_response_data_rejects_missing_extensions_key(): |
34 | | - with pytest.raises(HyperbrowserError, match="Expected 'extensions' key"): |
| 35 | + with pytest.raises( |
| 36 | + HyperbrowserError, match="Expected 'extensions' key in response but got \\[\\] keys" |
| 37 | + ): |
35 | 38 | parse_extension_list_response_data({}) |
36 | 39 |
|
37 | 40 |
|
@@ -77,3 +80,38 @@ def __init__(self, **kwargs): |
77 | 80 | parse_extension_list_response_data({"extensions": [{"id": "ext_1"}]}) |
78 | 81 |
|
79 | 82 | assert exc_info.value.original_error is None |
| 83 | + |
| 84 | + |
| 85 | +def test_parse_extension_list_response_data_accepts_mapping_proxy_payload(): |
| 86 | + extension_mapping = MappingProxyType( |
| 87 | + { |
| 88 | + "id": "ext_123", |
| 89 | + "name": "my-extension", |
| 90 | + "createdAt": "2026-01-01T00:00:00Z", |
| 91 | + "updatedAt": "2026-01-01T00:00:00Z", |
| 92 | + } |
| 93 | + ) |
| 94 | + payload = MappingProxyType({"extensions": [extension_mapping]}) |
| 95 | + |
| 96 | + parsed = parse_extension_list_response_data(payload) |
| 97 | + |
| 98 | + assert len(parsed) == 1 |
| 99 | + assert parsed[0].id == "ext_123" |
| 100 | + |
| 101 | + |
| 102 | +def test_parse_extension_list_response_data_missing_key_lists_available_keys(): |
| 103 | + with pytest.raises( |
| 104 | + HyperbrowserError, |
| 105 | + match=( |
| 106 | + "Expected 'extensions' key in response but got " |
| 107 | + "\\[createdAt, id, name, updatedAt\\] keys" |
| 108 | + ), |
| 109 | + ): |
| 110 | + parse_extension_list_response_data( |
| 111 | + { |
| 112 | + "id": "ext_123", |
| 113 | + "name": "my-extension", |
| 114 | + "createdAt": "2026-01-01T00:00:00Z", |
| 115 | + "updatedAt": "2026-01-01T00:00:00Z", |
| 116 | + } |
| 117 | + ) |
0 commit comments