diff --git a/tests/__snapshots__/test_supported_features.ambr b/tests/__snapshots__/test_supported_features.ambr new file mode 100644 index 00000000..196190d5 --- /dev/null +++ b/tests/__snapshots__/test_supported_features.ambr @@ -0,0 +1,1585 @@ +# serializer version: 1 +# name: test_device_features_from_home_data[home_data_device_pearls.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': True, + 'is_auto_collection_2_supported': True, + 'is_auto_delivery_field_in_global_status_supported': True, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': True, + 'is_avoid_collision_supported': True, + 'is_back_charge_auto_wash_supported': True, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': True, + 'is_carpet_custom_clean_supported': True, + 'is_carpet_deep_clean_supported': True, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': True, + 'is_carpet_supported': True, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': True, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': True, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': True, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': True, + 'is_custom_clean_mode_count_supported': True, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': True, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': True, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': True, + 'is_dynamically_add_clean_zones_supported': True, + 'is_dynamically_skip_clean_zone_supported': True, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': True, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': True, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': True, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': True, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': True, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': True, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': True, + 'is_map_carpet_add_support': True, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': True, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': True, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': True, + 'is_new_ai_recognition_supported': True, + 'is_new_data_for_clean_history': True, + 'is_new_data_for_clean_history_detail': True, + 'is_new_endpoint_supported': True, + 'is_new_remote_view_supported': False, + 'is_no_need_carpet_press_set_supported': True, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': True, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': True, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': True, + 'is_record_allowed': True, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': True, + 'is_rpc_retry_supported': True, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': True, + 'is_setting_carpet_first_supported': True, + 'is_shake_mop_set_supported': True, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': True, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': True, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': True, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': True, + 'is_support_clean_estimate': True, + 'is_support_cliff_zone': True, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': True, + 'is_support_custom_door_sill': True, + 'is_support_custom_mode_in_cleaning': True, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': True, + 'is_support_floor_edit': True, + 'is_support_furniture': True, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': True, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': True, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': True, + 'is_support_set_switch_map_mode': True, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': True, + 'is_support_smart_global_clean_with_custom_mode': True, + 'is_support_smart_scene': True, + 'is_support_stuck_zone': True, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': True, + 'is_supported_drying': True, + 'is_supported_valley_electricity': True, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': True, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': True, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': True, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': True, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': True, + 'is_wifi_manage_supported': True, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_q10.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': False, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': False, + 'is_back_charge_auto_wash_supported': False, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': False, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': False, + 'is_carpet_supported': False, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': False, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': False, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': False, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': False, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': False, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': False, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': False, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': False, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': False, + 'is_map_carpet_add_support': False, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': False, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': False, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': False, + 'is_new_data_for_clean_history_detail': False, + 'is_new_endpoint_supported': False, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': False, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': False, + 'is_record_allowed': False, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': False, + 'is_rpc_retry_supported': False, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': False, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': False, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': False, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': False, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': False, + 'is_support_clean_estimate': False, + 'is_support_cliff_zone': False, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': False, + 'is_support_custom_door_sill': False, + 'is_support_custom_mode_in_cleaning': False, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': False, + 'is_support_floor_edit': False, + 'is_support_furniture': False, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': False, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': False, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': False, + 'is_support_set_switch_map_mode': False, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': False, + 'is_support_smart_global_clean_with_custom_mode': False, + 'is_support_smart_scene': False, + 'is_support_stuck_zone': False, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': False, + 'is_supported_drying': False, + 'is_supported_valley_electricity': False, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': False, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': False, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': False, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': False, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': False, + 'is_wifi_manage_supported': False, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_q5_max.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': True, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': False, + 'is_back_charge_auto_wash_supported': True, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': True, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': True, + 'is_carpet_supported': False, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': True, + 'is_clean_route_setting_supported': False, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': True, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': False, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': True, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': True, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': True, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': True, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': True, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': True, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': True, + 'is_map_carpet_add_support': False, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': False, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': False, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': True, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': True, + 'is_new_data_for_clean_history_detail': True, + 'is_new_endpoint_supported': True, + 'is_new_remote_view_supported': False, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': True, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': True, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': True, + 'is_record_allowed': True, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': True, + 'is_rpc_retry_supported': True, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': True, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': True, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': True, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': True, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': True, + 'is_support_clean_estimate': True, + 'is_support_cliff_zone': True, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': True, + 'is_support_custom_door_sill': True, + 'is_support_custom_mode_in_cleaning': True, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': True, + 'is_support_floor_edit': True, + 'is_support_furniture': True, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': True, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': True, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': True, + 'is_support_set_switch_map_mode': True, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': True, + 'is_support_smart_global_clean_with_custom_mode': True, + 'is_support_smart_scene': True, + 'is_support_stuck_zone': True, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': True, + 'is_supported_drying': False, + 'is_supported_valley_electricity': True, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': True, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': True, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': True, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': True, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': True, + 'is_wifi_manage_supported': True, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_q7.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': False, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': False, + 'is_back_charge_auto_wash_supported': False, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': False, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': False, + 'is_carpet_supported': False, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': False, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': False, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': False, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': False, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': False, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': False, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': False, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': False, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': False, + 'is_map_carpet_add_support': False, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': False, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': False, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': False, + 'is_new_data_for_clean_history_detail': False, + 'is_new_endpoint_supported': False, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': False, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': False, + 'is_record_allowed': False, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': False, + 'is_rpc_retry_supported': False, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': False, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': False, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': False, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': False, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': False, + 'is_support_clean_estimate': False, + 'is_support_cliff_zone': False, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': False, + 'is_support_custom_door_sill': False, + 'is_support_custom_mode_in_cleaning': False, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': False, + 'is_support_floor_edit': False, + 'is_support_furniture': False, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': False, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': False, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': False, + 'is_support_set_switch_map_mode': False, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': False, + 'is_support_smart_global_clean_with_custom_mode': False, + 'is_support_smart_scene': False, + 'is_support_stuck_zone': False, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': False, + 'is_supported_drying': False, + 'is_supported_valley_electricity': False, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': False, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': False, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': False, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': False, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': False, + 'is_wifi_manage_supported': False, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_s5e.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': False, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': False, + 'is_back_charge_auto_wash_supported': False, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': False, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': False, + 'is_carpet_supported': False, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': False, + 'is_clean_route_setting_supported': False, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': False, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': False, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': False, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': False, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': False, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': False, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': False, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': False, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': False, + 'is_map_carpet_add_support': False, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': False, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': True, + 'is_mop_path_supported': False, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': False, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': False, + 'is_new_data_for_clean_history_detail': False, + 'is_new_endpoint_supported': False, + 'is_new_remote_view_supported': False, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': False, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': False, + 'is_re_segment_supported': False, + 'is_record_allowed': False, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': False, + 'is_rpc_retry_supported': False, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': False, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': False, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': False, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': False, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': False, + 'is_support_clean_estimate': False, + 'is_support_cliff_zone': False, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': False, + 'is_support_custom_door_sill': False, + 'is_support_custom_mode_in_cleaning': False, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': False, + 'is_support_floor_edit': False, + 'is_support_furniture': False, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': False, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': False, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': False, + 'is_support_set_switch_map_mode': False, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': False, + 'is_support_smart_global_clean_with_custom_mode': False, + 'is_support_smart_scene': False, + 'is_support_stuck_zone': False, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': False, + 'is_supported_drying': False, + 'is_supported_valley_electricity': False, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': False, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': False, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': False, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': False, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': False, + 'is_wifi_manage_supported': False, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_s7_maxv.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': True, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': True, + 'is_back_charge_auto_wash_supported': False, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': True, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': False, + 'is_carpet_supported': True, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': False, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': True, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': False, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': True, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': True, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': True, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': True, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': False, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': True, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': False, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': True, + 'is_map_carpet_add_support': True, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': True, + 'is_mop_path_supported': True, + 'is_mop_shake_module_supported': True, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': True, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': True, + 'is_new_data_for_clean_history_detail': True, + 'is_new_endpoint_supported': False, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': False, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': True, + 'is_record_allowed': True, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': True, + 'is_rpc_retry_supported': True, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': True, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': True, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': True, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': False, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': True, + 'is_support_clean_estimate': False, + 'is_support_cliff_zone': False, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': False, + 'is_support_custom_door_sill': False, + 'is_support_custom_mode_in_cleaning': True, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': False, + 'is_support_floor_edit': True, + 'is_support_furniture': True, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': False, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': True, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': True, + 'is_support_set_switch_map_mode': True, + 'is_support_set_volume_in_call': True, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': False, + 'is_support_smart_global_clean_with_custom_mode': True, + 'is_support_smart_scene': True, + 'is_support_stuck_zone': False, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': True, + 'is_supported_drying': True, + 'is_supported_valley_electricity': True, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': True, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': True, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': True, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': True, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': False, + 'is_wifi_manage_supported': False, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_saros.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': True, + 'is_auto_collection_2_supported': True, + 'is_auto_delivery_field_in_global_status_supported': True, + 'is_auto_tear_down_mop_supported': True, + 'is_avoid_collision_mode_supported': True, + 'is_avoid_collision_supported': True, + 'is_back_charge_auto_wash_supported': True, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': True, + 'is_carpet_custom_clean_supported': True, + 'is_carpet_deep_clean_supported': True, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': True, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': True, + 'is_carpet_supported': True, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': True, + 'is_clean_direct_status_supported': True, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': True, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': True, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': True, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': True, + 'is_custom_clean_mode_count_supported': True, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': True, + 'is_dirty_replenish_clean_supported': True, + 'is_dry_interval_timer_supported': True, + 'is_dss_believable': True, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': True, + 'is_dynamically_add_clean_zones_supported': True, + 'is_dynamically_skip_clean_zone_supported': True, + 'is_egg_dance_mode_supported': True, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': True, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': True, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': True, + 'is_gap_deep_clean_supported': True, + 'is_goto_pure_clean_path_supported': True, + 'is_hot_wash_towel_supported': True, + 'is_identify_room_supported': True, + 'is_ignore_unknown_map_object_supported': True, + 'is_lds_lifting_supported': True, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': True, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': True, + 'is_map_beautify_internal_debug_supported': True, + 'is_map_carpet_add_support': True, + 'is_map_eraser_supported': True, + 'is_matter_supported': True, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': True, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': True, + 'is_min_battery_15_to_clean_task_supported': True, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': True, + 'is_mop_shake_module_supported': True, + 'is_mop_shake_water_max_supported': True, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': True, + 'is_new_ai_recognition_supported': True, + 'is_new_data_for_clean_history': True, + 'is_new_data_for_clean_history_detail': True, + 'is_new_endpoint_supported': True, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': True, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': True, + 'is_offline_map_supported': True, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': True, + 'is_pet_supplies_deep_clean_supported': True, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': True, + 'is_record_allowed': True, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': True, + 'is_room_name_supported': True, + 'is_rpc_retry_supported': True, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': True, + 'is_setting_carpet_first_supported': True, + 'is_shake_mop_set_supported': True, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': True, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': True, + 'is_smart_clean_mode_set_supported': True, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': True, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': True, + 'is_support_clean_estimate': True, + 'is_support_cliff_zone': True, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': True, + 'is_support_custom_door_sill': True, + 'is_support_custom_mode_in_cleaning': True, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': True, + 'is_support_floor_edit': True, + 'is_support_furniture': True, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': True, + 'is_support_main_brush_up_down_supported': True, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': True, + 'is_support_remote_control_in_call': True, + 'is_support_room_tag': True, + 'is_support_set_switch_map_mode': True, + 'is_support_set_volume_in_call': True, + 'is_support_side_brush_up_down_supported': True, + 'is_support_smart_door_sill': True, + 'is_support_smart_global_clean_with_custom_mode': True, + 'is_support_smart_scene': True, + 'is_support_stuck_zone': True, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': True, + 'is_supported_drying': True, + 'is_supported_valley_electricity': True, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': True, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': True, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': True, + 'is_video_patrol_supported': True, + 'is_video_setting_supported': True, + 'is_voice_control_led_supported': True, + 'is_voice_control_supported': True, + 'is_wash_then_charge_cmd_supported': True, + 'is_water_leak_check_supported': True, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': True, + 'is_wifi_manage_supported': True, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_saros_10r.json] + dict({ + 'is_activate_video_charging_and_standby_supported': True, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': True, + 'is_auto_collection_2_supported': True, + 'is_auto_delivery_field_in_global_status_supported': True, + 'is_auto_tear_down_mop_supported': True, + 'is_avoid_collision_mode_supported': True, + 'is_avoid_collision_supported': True, + 'is_back_charge_auto_wash_supported': True, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': True, + 'is_carpet_custom_clean_supported': True, + 'is_carpet_deep_clean_supported': True, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': True, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': True, + 'is_carpet_supported': True, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': True, + 'is_clean_direct_status_supported': True, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': True, + 'is_clean_history_time_line_supported': True, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': True, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': True, + 'is_clean_time_line_supported': True, + 'is_collect_dust_count_show_supported': True, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': True, + 'is_ctm_with_repeat_supported': True, + 'is_current_map_restore_enabled': True, + 'is_custom_clean_mode_count_supported': True, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': True, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': True, + 'is_dirty_object_detect_supported': True, + 'is_dirty_replenish_clean_supported': True, + 'is_dry_interval_timer_supported': True, + 'is_dss_believable': True, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': True, + 'is_dynamically_add_clean_zones_supported': True, + 'is_dynamically_skip_clean_zone_supported': True, + 'is_egg_dance_mode_supported': True, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': True, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': True, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': True, + 'is_gap_deep_clean_supported': True, + 'is_goto_pure_clean_path_supported': True, + 'is_hot_wash_towel_supported': True, + 'is_identify_room_supported': True, + 'is_ignore_unknown_map_object_supported': True, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': True, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': True, + 'is_map_beautify_internal_debug_supported': True, + 'is_map_carpet_add_support': True, + 'is_map_eraser_supported': True, + 'is_matter_supported': True, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': True, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': True, + 'is_min_battery_15_to_clean_task_supported': True, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': True, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': True, + 'is_new_ai_recognition_supported': True, + 'is_new_data_for_clean_history': True, + 'is_new_data_for_clean_history_detail': True, + 'is_new_endpoint_supported': True, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': True, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': True, + 'is_offline_map_supported': True, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': True, + 'is_pet_snapshot_supported': True, + 'is_pet_supplies_deep_clean_supported': True, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': True, + 'is_record_allowed': True, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': True, + 'is_room_name_supported': True, + 'is_rpc_retry_supported': True, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': True, + 'is_setting_carpet_first_supported': True, + 'is_shake_mop_set_supported': True, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': True, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': True, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': True, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': True, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': True, + 'is_support_clean_estimate': True, + 'is_support_cliff_zone': True, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': True, + 'is_support_custom_door_sill': True, + 'is_support_custom_mode_in_cleaning': True, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': True, + 'is_support_floor_edit': True, + 'is_support_furniture': True, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': True, + 'is_support_main_brush_up_down_supported': True, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': True, + 'is_support_remote_control_in_call': True, + 'is_support_room_tag': True, + 'is_support_set_switch_map_mode': True, + 'is_support_set_volume_in_call': True, + 'is_support_side_brush_up_down_supported': True, + 'is_support_smart_door_sill': True, + 'is_support_smart_global_clean_with_custom_mode': True, + 'is_support_smart_scene': True, + 'is_support_stuck_zone': True, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': True, + 'is_supported_drying': True, + 'is_supported_valley_electricity': True, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': True, + 'is_two_key_rtv_in_charging_supported': True, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': True, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': True, + 'is_video_patrol_supported': True, + 'is_video_setting_supported': True, + 'is_voice_control_led_supported': True, + 'is_voice_control_supported': True, + 'is_wash_then_charge_cmd_supported': True, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': True, + 'is_water_up_down_drain_supported': True, + 'is_wifi_manage_supported': True, + 'is_workday_holiday_supported': False, + }) +# --- +# name: test_device_features_from_home_data[home_data_device_zeo_one.json] + dict({ + 'is_activate_video_charging_and_standby_supported': False, + 'is_analysis_supported': False, + 'is_any_state_transit_goto_supported': False, + 'is_auto_collection_2_supported': False, + 'is_auto_delivery_field_in_global_status_supported': False, + 'is_auto_tear_down_mop_supported': False, + 'is_avoid_collision_mode_supported': False, + 'is_avoid_collision_supported': False, + 'is_back_charge_auto_wash_supported': False, + 'is_back_wash_new_smart_supported': False, + 'is_careful_slow_mop_supported': False, + 'is_carpet_custom_clean_supported': False, + 'is_carpet_deep_clean_supported': False, + 'is_carpet_long_haired_ex_supported': False, + 'is_carpet_long_haired_supported': False, + 'is_carpet_pressure_use_origin_paras_supported': False, + 'is_carpet_shape_type_supported': False, + 'is_carpet_show_on_map': False, + 'is_carpet_supported': False, + 'is_ces_2022_supported': False, + 'is_clean_count_setting_supported': False, + 'is_clean_direct_status_supported': False, + 'is_clean_efficiency_supported': False, + 'is_clean_fluid_delivery_supported': False, + 'is_clean_history_time_line_supported': False, + 'is_clean_route_deep_slow_plus_supported': False, + 'is_clean_route_fast_mode_supported': False, + 'is_clean_route_setting_supported': True, + 'is_clean_then_mop_mode_supported': False, + 'is_clean_time_line_supported': False, + 'is_collect_dust_count_show_supported': False, + 'is_collect_dust_mode_supported': True, + 'is_corner_clean_mode_supported': False, + 'is_corner_mop_stretch_supported': False, + 'is_ctm_with_repeat_supported': False, + 'is_current_map_restore_enabled': False, + 'is_custom_clean_mode_count_supported': False, + 'is_custom_mode_supported': True, + 'is_custom_water_box_distance_supported': False, + 'is_customized_clean_supported': True, + 'is_detect_wire_carpet_supported': False, + 'is_dirty_object_detect_supported': False, + 'is_dirty_replenish_clean_supported': False, + 'is_dry_interval_timer_supported': False, + 'is_dss_believable': False, + 'is_dual_band_wi_fi_supported': False, + 'is_dust_collection_setting_supported': False, + 'is_dynamically_add_clean_zones_supported': False, + 'is_dynamically_skip_clean_zone_supported': False, + 'is_egg_dance_mode_supported': False, + 'is_egg_mode_supported_from_new_features': False, + 'is_exact_custom_mode_supported': False, + 'is_exhibition_function_supported': False, + 'is_floor_dir_clean_any_time_supported': False, + 'is_flow_led_setting_supported': False, + 'is_follow_low_obs_supported': False, + 'is_full_duples_switch_supported': False, + 'is_fw_filter_obstacle_supported': False, + 'is_gap_deep_clean_supported': False, + 'is_goto_pure_clean_path_supported': False, + 'is_hot_wash_towel_supported': False, + 'is_identify_room_supported': False, + 'is_ignore_unknown_map_object_supported': False, + 'is_lds_lifting_supported': False, + 'is_led_status_switch_supported': False, + 'is_left_water_drain_supported': False, + 'is_low_area_access_supported': False, + 'is_main_brush_up_down_supported_from_str': False, + 'is_map_beautify_internal_debug_supported': False, + 'is_map_carpet_add_support': False, + 'is_map_eraser_supported': False, + 'is_matter_supported': False, + 'is_max_plus_mode_supported': True, + 'is_max_zone_opened_supported': False, + 'is_mechanical_arm_mode_supported': False, + 'is_midway_back_to_dock_supported': False, + 'is_min_battery_15_to_clean_task_supported': False, + 'is_mop_forbidden_supported': False, + 'is_mop_path_supported': False, + 'is_mop_shake_module_supported': False, + 'is_mop_shake_water_max_supported': False, + 'is_multi_floor_supported': False, + 'is_multi_map_segment_timer_supported': False, + 'is_new_ai_recognition_supported': False, + 'is_new_data_for_clean_history': False, + 'is_new_data_for_clean_history_detail': False, + 'is_new_endpoint_supported': False, + 'is_new_remote_view_supported': True, + 'is_no_need_carpet_press_set_supported': False, + 'is_none_pure_clean_mop_with_max_plus': False, + 'is_object_detect_check_supported': False, + 'is_offline_map_supported': False, + 'is_optimize_battery_supported': False, + 'is_order_clean_supported': False, + 'is_over_sea_ctm_supported': False, + 'is_pet_snapshot_supported': False, + 'is_pet_supplies_deep_clean_supported': False, + 'is_program_mode_supported': False, + 'is_pumping_water_supported': False, + 'is_pure_clean_mop_supported': True, + 'is_re_segment_supported': False, + 'is_record_allowed': False, + 'is_remote_supported': False, + 'is_right_brush_stretch_supported': False, + 'is_room_name_supported': False, + 'is_rpc_retry_supported': False, + 'is_rubber_brush_carpet_supported': False, + 'is_set_child_supported': False, + 'is_setting_carpet_first_supported': False, + 'is_shake_mop_set_supported': False, + 'is_should_show_arm_over_load_supported': False, + 'is_show_clean_finish_reason_supported': False, + 'is_show_general_obstacle_supported': False, + 'is_show_obstacle_photo_supported': False, + 'is_side_brush_lift_carpet_supported': False, + 'is_small_side_mop_supported': False, + 'is_smart_clean_mode_set_supported': False, + 'is_soak_and_wash_supported': False, + 'is_soft_clean_mode_supported': False, + 'is_sr_map_supported': False, + 'is_super_deep_wash_supported': False, + 'is_support_api_app_stop_grasp_supported': False, + 'is_support_backup_map': False, + 'is_support_clean_estimate': False, + 'is_support_cliff_zone': False, + 'is_support_custom_carpet': False, + 'is_support_custom_dnd': False, + 'is_support_custom_door_sill': False, + 'is_support_custom_mode_in_cleaning': False, + 'is_support_fetch_timer_summary': False, + 'is_support_floor_direction': False, + 'is_support_floor_edit': False, + 'is_support_furniture': False, + 'is_support_get_particular_status_supported': False, + 'is_support_incremental_map': False, + 'is_support_main_brush_up_down_supported': False, + 'is_support_mop_back_pwm_set': False, + 'is_support_quick_map_builder': False, + 'is_support_remote_control_in_call': False, + 'is_support_room_tag': False, + 'is_support_set_switch_map_mode': False, + 'is_support_set_volume_in_call': False, + 'is_support_side_brush_up_down_supported': False, + 'is_support_smart_door_sill': False, + 'is_support_smart_global_clean_with_custom_mode': False, + 'is_support_smart_scene': False, + 'is_support_stuck_zone': False, + 'is_support_voice_control_debug': False, + 'is_support_water_mode': True, + 'is_supported_download_test_voice': False, + 'is_supported_drying': False, + 'is_supported_valley_electricity': False, + 'is_sync_server_name_supported': False, + 'is_three_d_mapping_inner_test_supported': False, + 'is_tidyup_zones_supported': False, + 'is_two_gears_no_collision_supported': False, + 'is_two_key_real_time_video_supported': False, + 'is_two_key_rtv_in_charging_supported': False, + 'is_type_identify_supported': False, + 'is_unsave_map_reason_supported': False, + 'is_uvc_sterilize_supported': False, + 'is_video_monitor_supported': False, + 'is_video_patrol_supported': False, + 'is_video_setting_supported': False, + 'is_voice_control_led_supported': False, + 'is_voice_control_supported': False, + 'is_wash_then_charge_cmd_supported': False, + 'is_water_leak_check_supported': False, + 'is_water_slide_mode_supported': False, + 'is_water_up_down_drain_supported': False, + 'is_wifi_manage_supported': False, + 'is_workday_holiday_supported': False, + }) +# --- diff --git a/tests/devices/traits/v1/__snapshots__/test_device_features.ambr b/tests/devices/traits/v1/__snapshots__/test_device_features.ambr index 71313f0a..c803498d 100644 --- a/tests/devices/traits/v1/__snapshots__/test_device_features.ambr +++ b/tests/devices/traits/v1/__snapshots__/test_device_features.ambr @@ -1,4 +1,26 @@ # serializer version: 1 +# name: test_is_attribute_supported[home_data_device_pearls.json] + dict({ + 'battery': True, + 'charge_status': True, + 'dry_status': True, + 'error_code': True, + 'fan_power': True, + 'state': True, + 'water_box_mode': True, + }) +# --- +# name: test_is_attribute_supported[home_data_device_q5_max.json] + dict({ + 'battery': True, + 'charge_status': True, + 'dry_status': True, + 'error_code': True, + 'fan_power': True, + 'state': True, + 'water_box_mode': True, + }) +# --- # name: test_is_attribute_supported[home_data_device_s5e.json] dict({ 'battery': True, @@ -21,6 +43,17 @@ 'water_box_mode': True, }) # --- +# name: test_is_attribute_supported[home_data_device_saros.json] + dict({ + 'battery': True, + 'charge_status': True, + 'dry_status': True, + 'error_code': True, + 'fan_power': True, + 'state': True, + 'water_box_mode': True, + }) +# --- # name: test_is_attribute_supported[home_data_device_saros_10r.json] dict({ 'battery': True, @@ -32,6 +65,20 @@ 'water_box_mode': True, }) # --- +# name: test_is_consumable_field_supported[home_data_device_pearls.json] + dict({ + 'filter_work_time': True, + 'main_brush_work_time': True, + 'side_brush_work_time': True, + }) +# --- +# name: test_is_consumable_field_supported[home_data_device_q5_max.json] + dict({ + 'filter_work_time': True, + 'main_brush_work_time': True, + 'side_brush_work_time': True, + }) +# --- # name: test_is_consumable_field_supported[home_data_device_s5e.json] dict({ 'filter_work_time': True, @@ -46,6 +93,13 @@ 'side_brush_work_time': True, }) # --- +# name: test_is_consumable_field_supported[home_data_device_saros.json] + dict({ + 'filter_work_time': True, + 'main_brush_work_time': True, + 'side_brush_work_time': True, + }) +# --- # name: test_is_consumable_field_supported[home_data_device_saros_10r.json] dict({ 'filter_work_time': True, diff --git a/tests/mock_data.py b/tests/mock_data.py index 73292c3b..226a417a 100644 --- a/tests/mock_data.py +++ b/tests/mock_data.py @@ -5,6 +5,8 @@ import pathlib from typing import Any +from roborock.data.containers import HomeDataDevice, HomeDataProduct + # All data is based on a U.S. customer with a Roborock S7 MaxV Ultra USER_EMAIL = "user@domain.com" @@ -124,8 +126,12 @@ TESTDATA = pathlib.Path("tests/testdata") -PRODUCTS = {file.name: json.load(file.open(encoding="utf-8")) for file in TESTDATA.glob("home_data_product_*.json")} -DEVICES = {file.name: json.load(file.open(encoding="utf-8")) for file in TESTDATA.glob("home_data_device_*.json")} +PRODUCTS = { + file.name: json.load(file.open(encoding="utf-8")) for file in sorted(TESTDATA.glob("home_data_product_*.json")) +} +DEVICES = { + file.name: json.load(file.open(encoding="utf-8")) for file in sorted(TESTDATA.glob("home_data_device_*.json")) +} # Products A27_PRODUCT_DATA = PRODUCTS["home_data_product_a27.json"] @@ -135,12 +141,26 @@ A114_PRODUCT_DATA = PRODUCTS["home_data_product_a114.json"] # Devices -S7_DEVICE_DATA = DEVICES["home_data_device_s7_maxv.json"] +S7_MAXV_DEVICE_DATA = DEVICES["home_data_device_s7_maxv.json"] Q7_DEVICE_DATA = DEVICES["home_data_device_q7.json"] Q10_DEVICE_DATA = DEVICES["home_data_device_q10.json"] ZEO_ONE_DEVICE_DATA = DEVICES["home_data_device_zeo_one.json"] SAROS_10R_DEVICE_DATA = DEVICES["home_data_device_saros_10r.json"] +# All testdata devices joined with their matching product (keyed by device filename). +# Devices whose productId has no corresponding product file are omitted. +_PRODUCTS_BY_ID: dict[str, HomeDataProduct] = { + p.id: p for p in (HomeDataProduct.from_dict(v) for v in PRODUCTS.values()) +} +_DEVICES_BY_FILENAME: dict[str, HomeDataDevice] = { + filename: HomeDataDevice.from_dict(device_data) for filename, device_data in DEVICES.items() +} +DEVICE_PRODUCT_PAIRS: dict[str, tuple[HomeDataDevice, HomeDataProduct]] = { + filename: (device, product) + for filename, device in _DEVICES_BY_FILENAME.items() + if (product := _PRODUCTS_BY_ID.get(device.product_id)) is not None +} + HOME_DATA_RAW: dict[str, Any] = { "id": 123456, @@ -152,7 +172,7 @@ A27_PRODUCT_DATA, ], "devices": [ - S7_DEVICE_DATA, + S7_MAXV_DEVICE_DATA, ], "receivedDevices": [], "rooms": [ diff --git a/tests/test_supported_features.py b/tests/test_supported_features.py index 240856a1..8f3aa853 100644 --- a/tests/test_supported_features.py +++ b/tests/test_supported_features.py @@ -1,8 +1,12 @@ +from dataclasses import asdict + +import pytest from syrupy import SnapshotAssertion from roborock import SHORT_MODEL_TO_ENUM from roborock.data.code_mappings import RoborockProductNickname from roborock.device_features import DeviceFeatures +from tests import mock_data def test_supported_features_qrevo_maxv(): @@ -73,3 +77,29 @@ def test_new_feature_str_missing(): 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 + + +@pytest.mark.parametrize( + ("device_filename"), + list(mock_data.DEVICE_PRODUCT_PAIRS.keys()), +) +def test_device_features_from_home_data( + device_filename: str, + snapshot: SnapshotAssertion, +) -> None: + """Test DeviceFeatures constructed from real testdata devices and products. + + For each paired device+product in testdata, construct DeviceFeatures from the + featureSet/newFeatureSet home data fields and assert the full feature dict + matches the snapshot. This catches regressions in feature-flag decoding + across all real device samples. + """ + device, product = mock_data.DEVICE_PRODUCT_PAIRS[device_filename] + device_features = DeviceFeatures.from_feature_flags( + new_feature_info=int(device.feature_set or "0"), + new_feature_info_str=device.new_feature_set or "", + feature_info=[], + product_nickname=product.product_nickname, + ) + feature_dict = {k: v for k, v in asdict(device_features).items() if isinstance(v, bool)} + assert feature_dict == snapshot diff --git a/tests/testdata/home_data_device_pearls.json b/tests/testdata/home_data_device_pearls.json new file mode 100644 index 00000000..badf268a --- /dev/null +++ b/tests/testdata/home_data_device_pearls.json @@ -0,0 +1,33 @@ +{ + "duid": "device-id-a123", + "name": "Roborock PearlS Lite", + "localKey": "key123key123key1", + "productId": "product-id-a123", + "fv": "02.03.28", + "activeTime": 1742574271, + "timeZoneId": "America/Los_Angeles", + "iconUrl": "", + "share": false, + "online": true, + "pv": "1.0", + "tuyaMigrated": false, + "extra": "{}", + "sn": "A123SAMPLESNTEST", + "featureSet": "2247397454282751", + "newFeatureSet": "42BA8D587EDAFFFE", + "deviceStatus": { + "121": 8, + "122": 100, + "123": 110, + "124": 209, + "125": 0, + "126": 22, + "127": 0, + "128": 0, + "133": 1, + "120": 0, + "134": 0 + }, + "silentOtaSwitch": true, + "f": false +} diff --git a/tests/testdata/home_data_device_q5_max.json b/tests/testdata/home_data_device_q5_max.json new file mode 100644 index 00000000..ea5f2574 --- /dev/null +++ b/tests/testdata/home_data_device_q5_max.json @@ -0,0 +1,32 @@ +{ + "duid": "device-id-a125", + "name": "Roborock Q5 Max+", + "localKey": "key123key123key1", + "productId": "product-id-a125", + "fv": "02.01.24", + "activeTime": 1765325043, + "timeZoneId": "America/Chicago", + "iconUrl": "", + "share": false, + "online": true, + "pv": "1.0", + "tuyaMigrated": false, + "extra": "{}", + "sn": "A125SAMPLESNTEST", + "featureSet": "2097860516935167", + "newFeatureSet": "00000040385AFFF6", + "deviceStatus": { + "121": 8, + "122": 100, + "123": 106, + "125": 11, + "126": 0, + "127": 0, + "128": 0, + "133": 1, + "120": 0, + "124": 204 + }, + "silentOtaSwitch": true, + "f": false +} diff --git a/tests/testdata/home_data_device_saros.json b/tests/testdata/home_data_device_saros.json new file mode 100644 index 00000000..76d41b5d --- /dev/null +++ b/tests/testdata/home_data_device_saros.json @@ -0,0 +1,36 @@ +{ + "duid": "device-id-saros-10", + "name": "Saros 10", + "localKey": "key123key123key1", + "productId": "product-saros-10", + "fv": "02.33.20", + "activeTime": 1672364449, + "timeZoneId": "Europe/Stockholm", + "iconUrl": "", + "share": false, + "online": true, + "pv": "1.0", + "tuyaMigrated": false, + "extra": "{}", + "sn": "device-saros-10-sn", + "featureSet": "4499195120484351", + "newFeatureSet": "0000000008EFBCDDDFFFAE7E7EFEFFFF", + "deviceStatus": { + "121": 8, + "122": 93, + "123": 102, + "124": 200, + "125": 100, + "126": 98, + "127": 100, + "128": 0, + "133": 1, + "135": 0, + "120": 0, + "134": 0 + }, + "silentOtaSwitch": false, + "f": false, + "createTime": 1766246477, + "cid": "" +} diff --git a/tests/testdata/home_data_product_a123.json b/tests/testdata/home_data_product_a123.json new file mode 100644 index 00000000..5186f4b0 --- /dev/null +++ b/tests/testdata/home_data_product_a123.json @@ -0,0 +1,136 @@ +{ + "id": "product-id-a123", + "name": "Roborock PearlS Lite", + "model": "roborock.vacuum.a123", + "category": "robot.vacuum.cleaner", + "capability": 0, + "schema": [ + { + "id": 101, + "name": "rpc_request", + "code": "rpc_request", + "mode": "rw", + "type": "RAW" + }, + { + "id": 102, + "name": "rpc_response", + "code": "rpc_response", + "mode": "rw", + "type": "RAW" + }, + { + "id": 120, + "name": "\u9519\u8bef\u4ee3\u7801", + "code": "error_code", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 121, + "name": "\u8bbe\u5907\u72b6\u6001", + "code": "state", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 122, + "name": "\u8bbe\u5907\u7535\u91cf", + "code": "battery", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 123, + "name": "\u6e05\u626b\u6a21\u5f0f", + "code": "fan_power", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 124, + "name": "\u62d6\u5730\u6a21\u5f0f", + "code": "water_box_mode", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 125, + "name": "\u4e3b\u5237\u5bff\u547d", + "code": "main_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 126, + "name": "\u8fb9\u5237\u5bff\u547d", + "code": "side_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 127, + "name": "\u6ee4\u7f51\u5bff\u547d", + "code": "filter_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 128, + "name": "\u989d\u5916\u72b6\u6001", + "code": "additional_props", + "mode": "ro", + "type": "RAW" + }, + { + "id": 130, + "name": "\u5b8c\u6210\u4e8b\u4ef6", + "code": "task_complete", + "mode": "ro", + "type": "RAW" + }, + { + "id": 131, + "name": "\u7535\u91cf\u4e0d\u8db3\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_low_power", + "mode": "ro", + "type": "RAW" + }, + { + "id": 132, + "name": "\u8fd0\u52a8\u4e2d\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_in_motion", + "mode": "ro", + "type": "RAW" + }, + { + "id": 133, + "name": "\u5145\u7535\u72b6\u6001", + "code": "charge_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 134, + "name": "\u70d8\u5e72\u72b6\u6001", + "code": "drying_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 135, + "name": "\u79bb\u7ebf\u539f\u56e0\u7ec6\u5206", + "code": "offline_status", + "mode": "ro", + "type": "RAW" + } + ] +} diff --git a/tests/testdata/home_data_product_a125.json b/tests/testdata/home_data_product_a125.json new file mode 100644 index 00000000..b6114790 --- /dev/null +++ b/tests/testdata/home_data_product_a125.json @@ -0,0 +1,136 @@ +{ + "id": "product-id-a125", + "name": "Roborock Q5 Max+", + "model": "roborock.vacuum.a125", + "category": "robot.vacuum.cleaner", + "capability": 0, + "schema": [ + { + "id": 101, + "name": "rpc_request", + "code": "rpc_request", + "mode": "rw", + "type": "RAW" + }, + { + "id": 102, + "name": "rpc_response", + "code": "rpc_response", + "mode": "rw", + "type": "RAW" + }, + { + "id": 120, + "name": "\u9519\u8bef\u4ee3\u7801", + "code": "error_code", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 121, + "name": "\u8bbe\u5907\u72b6\u6001", + "code": "state", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 122, + "name": "\u8bbe\u5907\u7535\u91cf", + "code": "battery", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 123, + "name": "\u6e05\u626b\u6a21\u5f0f", + "code": "fan_power", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 124, + "name": "\u62d6\u5730\u6a21\u5f0f", + "code": "water_box_mode", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 125, + "name": "\u4e3b\u5237\u5bff\u547d", + "code": "main_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 126, + "name": "\u8fb9\u5237\u5bff\u547d", + "code": "side_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 127, + "name": "\u6ee4\u7f51\u5bff\u547d", + "code": "filter_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 128, + "name": "\u989d\u5916\u72b6\u6001", + "code": "additional_props", + "mode": "ro", + "type": "RAW" + }, + { + "id": 130, + "name": "\u5b8c\u6210\u4e8b\u4ef6", + "code": "task_complete", + "mode": "ro", + "type": "RAW" + }, + { + "id": 131, + "name": "\u7535\u91cf\u4e0d\u8db3\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_low_power", + "mode": "ro", + "type": "RAW" + }, + { + "id": 132, + "name": "\u8fd0\u52a8\u4e2d\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_in_motion", + "mode": "ro", + "type": "RAW" + }, + { + "id": 133, + "name": "\u5145\u7535\u72b6\u6001", + "code": "charge_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 134, + "name": "\u70d8\u5e72\u72b6\u6001", + "code": "drying_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 135, + "name": "\u79bb\u7ebf\u539f\u56e0\u7ec6\u5206", + "code": "offline_status", + "mode": "ro", + "type": "RAW" + } + ] +} diff --git a/tests/testdata/home_data_product_a147.json b/tests/testdata/home_data_product_a147.json new file mode 100644 index 00000000..c190f854 --- /dev/null +++ b/tests/testdata/home_data_product_a147.json @@ -0,0 +1,143 @@ +{ + "id": "product-saros-10", + "name": "Saros 10", + "model": "roborock.vacuum.a147", + "category": "robot.vacuum.cleaner", + "capability": 0, + "schema": [ + { + "id": 101, + "name": "rpc_request", + "code": "rpc_request", + "mode": "rw", + "type": "RAW" + }, + { + "id": 102, + "name": "rpc_response", + "code": "rpc_response", + "mode": "rw", + "type": "RAW" + }, + { + "id": 120, + "name": "\u9519\u8bef\u4ee3\u7801", + "code": "error_code", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 121, + "name": "\u8bbe\u5907\u72b6\u6001", + "code": "state", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 122, + "name": "\u8bbe\u5907\u7535\u91cf", + "code": "battery", + "mode": "ro", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 123, + "name": "\u6e05\u626b\u6a21\u5f0f", + "code": "fan_power", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 124, + "name": "\u62d6\u5730\u6a21\u5f0f", + "code": "water_box_mode", + "mode": "rw", + "type": "ENUM", + "property": "{\"range\": [\"\"]}" + }, + { + "id": 125, + "name": "\u4e3b\u5237\u5bff\u547d", + "code": "main_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 126, + "name": "\u8fb9\u5237\u5bff\u547d", + "code": "side_brush_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 127, + "name": "\u6ee4\u7f51\u5bff\u547d", + "code": "filter_life", + "mode": "rw", + "type": "VALUE", + "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}" + }, + { + "id": 128, + "name": "\u989d\u5916\u72b6\u6001", + "code": "additional_props", + "mode": "ro", + "type": "RAW" + }, + { + "id": 130, + "name": "\u5b8c\u6210\u4e8b\u4ef6", + "code": "task_complete", + "mode": "ro", + "type": "RAW" + }, + { + "id": 131, + "name": "\u7535\u91cf\u4e0d\u8db3\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_low_power", + "mode": "ro", + "type": "RAW" + }, + { + "id": 132, + "name": "\u8fd0\u52a8\u4e2d\u4efb\u52a1\u53d6\u6d88", + "code": "task_cancel_in_motion", + "mode": "ro", + "type": "RAW" + }, + { + "id": 133, + "name": "\u5145\u7535\u72b6\u6001", + "code": "charge_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 134, + "name": "\u70d8\u5e72\u72b6\u6001", + "code": "drying_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 135, + "name": "\u79bb\u7ebf\u539f\u56e0\u7ec6\u5206", + "code": "offline_status", + "mode": "ro", + "type": "RAW" + }, + { + "id": 139, + "name": "\u56de\u57fa\u7ad9\u76ee\u7684", + "code": "back_type", + "mode": "ro", + "type": "RAW" + } + ] +}