44
55import pytest
66
7- from roborock .data import RoborockDockTypeCode , RoborockDockWashTowelModeCode
7+ from roborock .data import (
8+ RoborockDockTypeCode ,
9+ WashTowelModes ,
10+ )
811from roborock .devices .device import RoborockDevice
912from roborock .devices .traits .v1 .wash_towel_mode import WashTowelModeTrait
1013from roborock .roborock_typing import RoborockCommand
1114
12- WASH_TOWEL_MODE_DATA = [ {"wash_mode" : RoborockDockWashTowelModeCode . smart }]
15+ WASH_TOWEL_MODE_DATA = {"wash_mode" : WashTowelModes . SMART . code }
1316
1417
1518@pytest .fixture (name = "wash_towel_mode" )
@@ -31,7 +34,7 @@ def wash_towel_mode_trait(
3134 ],
3235)
3336async def test_wash_towel_mode_available (
34- wash_towel_mode : WashTowelModeTrait | None ,
37+ wash_towel_mode : WashTowelModeTrait ,
3538 mock_rpc_channel : AsyncMock ,
3639 dock_type_code : RoborockDockTypeCode ,
3740) -> None :
@@ -50,7 +53,7 @@ async def test_wash_towel_mode_available(
5053 ]
5154 )
5255
53- assert wash_towel_mode .wash_mode == RoborockDockWashTowelModeCode . smart
56+ assert wash_towel_mode .wash_mode == WashTowelModes . SMART
5457
5558
5659@pytest .mark .parametrize (
@@ -65,3 +68,130 @@ async def test_unsupported_wash_towel_mode(
6568) -> None :
6669 """Test that the trait is not available for unsupported dock types."""
6770 assert wash_towel_mode is None
71+
72+
73+ @pytest .mark .parametrize (
74+ ("dock_type_code" ),
75+ [(RoborockDockTypeCode .s8_dock )],
76+ )
77+ @pytest .mark .parametrize (
78+ ("wash_mode" ),
79+ [
80+ (WashTowelModes .SMART ),
81+ (WashTowelModes .LIGHT ),
82+ ],
83+ )
84+ async def test_set_wash_towel_mode (
85+ wash_towel_mode : WashTowelModeTrait ,
86+ mock_rpc_channel : AsyncMock ,
87+ wash_mode : WashTowelModes ,
88+ dock_type_code : RoborockDockTypeCode ,
89+ ) -> None :
90+ """Test setting the wash towel mode."""
91+ assert wash_towel_mode is not None
92+
93+ await wash_towel_mode .set_wash_towel_mode (wash_mode )
94+
95+ mock_rpc_channel .send_command .assert_called_with (
96+ RoborockCommand .SET_WASH_TOWEL_MODE , params = {"wash_mode" : wash_mode .code }
97+ )
98+
99+
100+ @pytest .mark .parametrize (
101+ ("dock_type_code" ),
102+ [(RoborockDockTypeCode .s8_dock )],
103+ )
104+ async def test_start_wash (
105+ wash_towel_mode : WashTowelModeTrait ,
106+ mock_rpc_channel : AsyncMock ,
107+ dock_type_code : RoborockDockTypeCode ,
108+ ) -> None :
109+ """Test starting the wash."""
110+ assert wash_towel_mode is not None
111+
112+ await wash_towel_mode .start_wash ()
113+
114+ mock_rpc_channel .send_command .assert_called_with (RoborockCommand .APP_START_WASH )
115+
116+
117+ @pytest .mark .parametrize (
118+ ("dock_type_code" ),
119+ [(RoborockDockTypeCode .s8_dock )],
120+ )
121+ async def test_stop_wash (
122+ wash_towel_mode : WashTowelModeTrait ,
123+ mock_rpc_channel : AsyncMock ,
124+ dock_type_code : RoborockDockTypeCode ,
125+ ) -> None :
126+ """Test stopping the wash."""
127+ assert wash_towel_mode is not None
128+
129+ await wash_towel_mode .stop_wash ()
130+
131+ mock_rpc_channel .send_command .assert_called_with (RoborockCommand .APP_STOP_WASH )
132+
133+
134+ @pytest .mark .parametrize (
135+ ("dock_type_code" ),
136+ [(RoborockDockTypeCode .s8_dock )],
137+ )
138+ @pytest .mark .parametrize (
139+ (
140+ "is_super_deep_wash_supported" ,
141+ "is_dirty_replenish_clean_supported" ,
142+ "expected_modes" ,
143+ ),
144+ [
145+ (
146+ False ,
147+ False ,
148+ [WashTowelModes .LIGHT , WashTowelModes .BALANCED , WashTowelModes .DEEP ],
149+ ),
150+ (
151+ True ,
152+ False ,
153+ [
154+ WashTowelModes .LIGHT ,
155+ WashTowelModes .BALANCED ,
156+ WashTowelModes .DEEP ,
157+ WashTowelModes .SUPER_DEEP ,
158+ ],
159+ ),
160+ (
161+ False ,
162+ True ,
163+ [
164+ WashTowelModes .LIGHT ,
165+ WashTowelModes .BALANCED ,
166+ WashTowelModes .DEEP ,
167+ WashTowelModes .SMART ,
168+ ],
169+ ),
170+ (
171+ True ,
172+ True ,
173+ [
174+ WashTowelModes .LIGHT ,
175+ WashTowelModes .BALANCED ,
176+ WashTowelModes .DEEP ,
177+ WashTowelModes .SMART ,
178+ ],
179+ ),
180+ ],
181+ )
182+ async def test_wash_towel_mode_options (
183+ wash_towel_mode : WashTowelModeTrait ,
184+ dock_type_code : RoborockDockTypeCode ,
185+ is_super_deep_wash_supported : bool ,
186+ is_dirty_replenish_clean_supported : bool ,
187+ expected_modes : list [WashTowelModes ],
188+ ) -> None :
189+ """Test what modes are available based on device features."""
190+ assert wash_towel_mode is not None
191+
192+ # Mock the device features
193+ assert wash_towel_mode .device_feature_trait is not None
194+ wash_towel_mode .device_feature_trait .is_super_deep_wash_supported = is_super_deep_wash_supported
195+ wash_towel_mode .device_feature_trait .is_dirty_replenish_clean_supported = is_dirty_replenish_clean_supported
196+
197+ assert wash_towel_mode .wash_towel_mode_options == expected_modes
0 commit comments