@@ -768,3 +768,62 @@ async def test_bug_1220(hass: HomeAssistant, skip_hass_states_is_state):
768768 # No changes on hvac_mode (but only on temperature or hvac_action)
769769 assert vtherm .hvac_mode == HVACMode .OFF
770770 assert vtherm .vtherm_hvac_mode == VThermHvacMode_OFF
771+
772+
773+ async def test_bug_1379 (
774+ hass : HomeAssistant ,
775+ skip_hass_states_is_state ,
776+ skip_turn_on_off_heater ,
777+ skip_send_event ,
778+ ):
779+ """Test that switching from preset mode to no preset mode conserve the last target temperature set manually"""
780+
781+ tz = get_tz (hass ) # pylint: disable=invalid-name
782+ now : datetime = datetime .now (tz = tz )
783+
784+ entry = MockConfigEntry (
785+ domain = DOMAIN ,
786+ title = "TheOverClimateMockName" ,
787+ unique_id = "uniqueId" ,
788+ # default value are min 15°, max 30°, step 0.1
789+ data = PARTIAL_CLIMATE_CONFIG , # 5 minutes security delay
790+ )
791+
792+ # Min_temp is 15 and max_temp is 19
793+ fake_underlying_climate = MagicMockClimate ()
794+
795+ # fmt:off
796+ with patch ("custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event" ), \
797+ patch ("custom_components.versatile_thermostat.underlyings.UnderlyingClimate.find_underlying_climate" , return_value = fake_underlying_climate ):
798+ # fmt:on
799+ entity = await create_thermostat (hass , entry , "climate.theoverclimatemockname" , temps = default_temperatures )
800+ assert entity
801+
802+ assert entity .name == "TheOverClimateMockName"
803+ assert entity .is_over_climate is True
804+ assert entity .vtherm_hvac_mode is VThermHvacMode_OFF
805+
806+ # 1. Set a manual temperature first (no preset)
807+ await entity .async_set_temperature (temperature = 17.5 )
808+
809+ # check that the requested temperature is set
810+ assert entity .target_temperature == 17.5
811+ assert entity .requested_state .target_temperature == 17.5
812+
813+ # 2. Set preset to Comfort
814+ await entity .async_set_preset_mode (VThermPreset .COMFORT )
815+ assert entity .preset_mode == VThermPreset .COMFORT
816+ # target temperature should be the comfort temperature
817+ assert entity .target_temperature == 19
818+ assert entity .requested_state .target_temperature == 17.5
819+ assert entity .current_state .target_temperature == 19
820+
821+ # 3. set back to manual mode (no preset)
822+ await entity .async_set_preset_mode (VThermPreset .NONE )
823+ assert entity .preset_mode == VThermPreset .NONE
824+ # target temperature should be the last manual temperature
825+ assert entity .target_temperature == 17.5
826+ assert entity .requested_state .target_temperature == 17.5
827+ assert entity .current_state .target_temperature == 17.5
828+
829+ entity .remove_thermostat ()
0 commit comments