@@ -181,6 +181,43 @@ async def test_set_end_time_success(dnd_trait: DoNotDisturbTrait, mock_rpc_chann
181181 assert dnd_trait .end_time == datetime .time (9 , 45 )
182182
183183
184+ async def test_set_end_time_when_start_time_not_set (dnd_trait : DoNotDisturbTrait , mock_rpc_channel : AsyncMock ) -> None :
185+ """Test setting end time when start time is not set."""
186+ mock_rpc_channel .send_command .side_effect = [
187+ # Response for SET_DND_TIMER
188+ {},
189+ # Response for GET_DND_TIMER after updating
190+ {
191+ "startHour" : None ,
192+ "startMinute" : None ,
193+ "endHour" : 9 ,
194+ "endMinute" : 45 ,
195+ "enabled" : 1 ,
196+ },
197+ ]
198+
199+ # Set up initial trait state so it does NOT have a start time
200+ dnd_trait .start_hour = None
201+ dnd_trait .start_minute = None
202+ dnd_trait .end_hour = None
203+ dnd_trait .end_minute = None
204+
205+ await dnd_trait .set_end_time (datetime .time (9 , 45 ))
206+
207+ expected_params = [None , None , 9 , 45 ]
208+ assert mock_rpc_channel .send_command .mock_calls == [
209+ call (RoborockCommand .SET_DND_TIMER , params = expected_params ),
210+ call (RoborockCommand .GET_DND_TIMER ),
211+ ]
212+
213+ assert dnd_trait .start_hour is None
214+ assert dnd_trait .start_minute is None
215+ assert dnd_trait .end_hour == 9
216+ assert dnd_trait .end_minute == 45
217+ assert dnd_trait .end_time == datetime .time (9 , 45 )
218+ assert dnd_trait .start_time is None
219+
220+
184221async def test_clear_dnd_timer_success (dnd_trait : DoNotDisturbTrait , mock_rpc_channel : AsyncMock ) -> None :
185222 """Test successfully clearing DnD timer settings."""
186223 mock_rpc_channel .send_command .side_effect = [
0 commit comments