Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion roborock/data/v1/v1_containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,7 @@ class AppInitStatus(RoborockBase):
local_info: AppInitStatusLocalInfo
feature_info: list[int]
new_feature_info: int
new_feature_info_str: str
new_feature_info_str: str | None = None
Comment thread
allenporter marked this conversation as resolved.
Outdated
new_feature_info_2: int | None = None
carriage_type: int | None = None
dsp_version: str | None = None
Expand Down
2 changes: 1 addition & 1 deletion roborock/devices/traits/v1/device_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def _parse_response(self, response: common.V1ResponseData) -> DeviceFeatures:
app_status = AppInitStatus.from_dict(response[0])
return DeviceFeatures.from_feature_flags(
new_feature_info=app_status.new_feature_info,
new_feature_info_str=app_status.new_feature_info_str,
new_feature_info_str=app_status.new_feature_info_str or "",
feature_info=app_status.feature_info,
product_nickname=self._nickname,
)
67 changes: 67 additions & 0 deletions tests/protocols/__snapshots__/test_v1_protocol.ambr
Original file line number Diff line number Diff line change
@@ -1,4 +1,71 @@
# serializer version: 1
# name: test_decode_rpc_payload[app_get_init_status2]
23607
# ---
# name: test_decode_rpc_payload[app_get_init_status2].1
'''
[
{
"local_info": {
"name": "custom_A.03.0096_FCC",
"bom": "A.03.0096",
"location": "us",
"language": "en",
"wifiplan": "US",
"timezone": "US/Pacific",
"logserver": "awsusor0.fds.api.xiaomi.com",
"featureset": 1
},
"feature_info": [
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
],
"new_feature_info": 10738169343,
"status_info": {
"state": 8,
"battery": 100,
"clean_time": 251,
"clean_area": 3847500,
"error_code": 0,
"in_cleaning": 0,
"in_returning": 0,
"in_fresh_state": 1,
"lab_status": 3,
"water_box_status": 0,
"map_status": 7,
"is_locating": 0,
"lock_status": 0,
"water_box_mode": 203,
"distance_off": 0,
"water_box_carriage_status": 0,
"mop_forbidden_enable": 0,
"camera_status": 3495,
"is_exploring": 0,
"home_sec_status": 0,
"home_sec_enable_password": 1,
"adbumper_status": [
0,
0,
0
]
}
}
]
'''
# ---
# name: test_decode_rpc_payload[app_get_init_status]
20001
# ---
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"t":1765918422,"dps":{"102":"{\"id\":23607,\"result\":[{\"local_info\":{\"name\":\"custom_A.03.0096_FCC\",\"bom\":\"A.03.0096\",\"location\":\"us\",\"language\":\"en\",\"wifiplan\":\"US\",\"timezone\":\"US/Pacific\",\"logserver\":\"awsusor0.fds.api.xiaomi.com\",\"featureset\":1},\"feature_info\":[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125],\"new_feature_info\":10738169343,\"status_info\":{\"state\":8,\"battery\":100,\"clean_time\":251,\"clean_area\":3847500,\"error_code\":0,\"in_cleaning\":0,\"in_returning\":0,\"in_fresh_state\":1,\"lab_status\":3,\"water_box_status\":0,\"map_status\":7,\"is_locating\":0,\"lock_status\":0,\"water_box_mode\":203,\"distance_off\":0,\"water_box_carriage_status\":0,\"mop_forbidden_enable\":0,\"camera_status\":3495,\"is_exploring\":0,\"home_sec_status\":0,\"home_sec_enable_password\":1,\"adbumper_status\":[0,0,0]}}]}"}}
48 changes: 47 additions & 1 deletion tests/test_containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from syrupy import SnapshotAssertion

from roborock import CleanRecord, CleanSummary, Consumable, DnDTimer, HomeData, S7MaxVStatus, UserData
from roborock.data import HomeDataDevice, RoborockBase, RoborockCategory
from roborock.data import AppInitStatus, HomeDataDevice, RoborockBase, RoborockCategory
from roborock.data.b01_q7 import (
B01Fault,
B01Props,
Expand Down Expand Up @@ -600,3 +600,49 @@ def test_offline_device() -> None:
assert device.time_zone_id == "Europe/Moscow"
assert not device.online
assert device.fv is None


def test_partial_app_init_status() -> None:
"""Test that a partial AppInitStatus response is handled correctly."""
app_init_status = AppInitStatus.from_dict(
{
"local_info": {
"name": "custom_A.03.0096_FCC",
"bom": "A.03.0096",
"location": "us",
"language": "en",
"wifiplan": "US",
"timezone": "US/Pacific",
"logserver": "awsusor0.fds.api.xiaomi.com",
"featureset": 1,
},
"feature_info": [111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125],
"new_feature_info": 10738169343,
"status_info": {
"state": 8,
"battery": 100,
"clean_time": 251,
"clean_area": 3847500,
"error_code": 0,
"in_cleaning": 0,
"in_returning": 0,
"in_fresh_state": 1,
"lab_status": 3,
"water_box_status": 0,
"map_status": 7,
"is_locating": 0,
"lock_status": 0,
"water_box_mode": 203,
"distance_off": 0,
"water_box_carriage_status": 0,
"mop_forbidden_enable": 0,
"camera_status": 3495,
"is_exploring": 0,
"home_sec_status": 0,
"home_sec_enable_password": 1,
"adbumper_status": [0, 0, 0],
},
}
)
assert app_init_status.local_info.name == "custom_A.03.0096_FCC"
assert app_init_status.feature_info == [111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125]
Comment thread
allenporter marked this conversation as resolved.
14 changes: 14 additions & 0 deletions tests/test_supported_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,17 @@ def test_device_feature_serialization(snapshot: SnapshotAssertion) -> None:
serialized = device_features.as_dict()
deserialized = DeviceFeatures.from_dict(serialized)
assert deserialized == device_features


def test_new_feature_str_missing():
"""Ensure that DeviceFeatures missing fields can still be created."""
device_features = DeviceFeatures.from_feature_flags(
new_feature_info=0,
new_feature_info_str="",
feature_info=[],
product_nickname=None,
)
# Check arbitrary fields that are false by default
assert not device_features.is_dust_collection_setting_supported
assert not device_features.is_hot_wash_towel_supported
assert not device_features.is_show_clean_finish_reason_supported