|
3 | 3 | from dataclasses import dataclass |
4 | 4 | from typing import Any |
5 | 5 |
|
6 | | -from roborock import CleanRecord, CleanSummary, Consumable, DnDTimer, HomeData, S7MaxVStatus, SimpleObject, UserData |
| 6 | +from roborock import CleanRecord, CleanSummary, Consumable, DnDTimer, HomeData, S7MaxVStatus, UserData |
7 | 7 | from roborock.code_mappings import ( |
8 | 8 | RoborockCategory, |
9 | 9 | RoborockDockErrorCode, |
|
29 | 29 | ) |
30 | 30 |
|
31 | 31 |
|
| 32 | +@dataclass |
| 33 | +class SimpleObject(RoborockBase): |
| 34 | + """Simple object for testing serialization.""" |
| 35 | + |
| 36 | + name: str | None = None |
| 37 | + value: int | None = None |
| 38 | + |
| 39 | + |
32 | 40 | @dataclass |
33 | 41 | class ComplexObject(RoborockBase): |
34 | 42 | """Complex object for testing serialization.""" |
@@ -97,6 +105,23 @@ def test_complex_object() -> None: |
97 | 105 | assert deserialized.any == "This can be anything" |
98 | 106 |
|
99 | 107 |
|
| 108 | + |
| 109 | +def test_ignore_unknown_keys() -> None: |
| 110 | + """Test that we don't fail on unknown keys.""" |
| 111 | + data = { |
| 112 | + "ignored_key": "This key should be ignored", |
| 113 | + "simple": {"name": "Nested", "value": 100}, |
| 114 | + "items": ["item1", "item2"], |
| 115 | + |
| 116 | + } |
| 117 | + deserialized = ComplexObject.from_dict(data) |
| 118 | + assert deserialized.simple.name == "Nested" |
| 119 | + assert deserialized.simple.value == 100 |
| 120 | + assert deserialized.items == ["item1", "item2"] |
| 121 | + assert deserialized.value is None |
| 122 | + assert deserialized.any is None |
| 123 | + |
| 124 | + |
100 | 125 | def test_user_data(): |
101 | 126 | ud = UserData.from_dict(USER_DATA) |
102 | 127 | assert ud.uid == 123456 |
|
0 commit comments