diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 4298a4f11e6..655b868a4f5 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -214,6 +214,9 @@ async def async_setup_platform( host, ) custom_effects = device_config.get(CONF_CUSTOM_EFFECT, {}) + custom_effect_colors = None + if CONF_COLORS in custom_effects: + custom_effect_colors = str(custom_effects[CONF_COLORS]) hass.async_create_task( hass.config_entries.flow.async_init( DOMAIN, @@ -224,7 +227,7 @@ async def async_setup_platform( CONF_NAME: device_config[CONF_NAME], CONF_PROTOCOL: device_config.get(CONF_PROTOCOL), CONF_MODE: device_config.get(ATTR_MODE, MODE_AUTO), - CONF_CUSTOM_EFFECT_COLORS: str(custom_effects.get(CONF_COLORS)), + CONF_CUSTOM_EFFECT_COLORS: custom_effect_colors, CONF_CUSTOM_EFFECT_SPEED_PCT: custom_effects.get( CONF_SPEED_PCT, DEFAULT_EFFECT_SPEED ), diff --git a/tests/components/flux_led/test_light.py b/tests/components/flux_led/test_light.py index afca4956055..a3f381b0c1d 100644 --- a/tests/components/flux_led/test_light.py +++ b/tests/components/flux_led/test_light.py @@ -741,18 +741,23 @@ async def test_rgb_light_custom_effects(hass: HomeAssistant) -> None: assert attributes[ATTR_EFFECT] == "custom" -async def test_rgb_light_custom_effects_invalid_colors(hass: HomeAssistant) -> None: +@pytest.mark.parametrize("effect_colors", [":: CANNOT BE PARSED ::", None]) +async def test_rgb_light_custom_effects_invalid_colors( + hass: HomeAssistant, effect_colors: str +) -> None: """Test an rgb light with a invalid effect.""" + options = { + CONF_MODE: MODE_AUTO, + CONF_CUSTOM_EFFECT_SPEED_PCT: 88, + CONF_CUSTOM_EFFECT_TRANSITION: TRANSITION_JUMP, + } + if effect_colors: + options[CONF_CUSTOM_EFFECT_COLORS] = effect_colors config_entry = MockConfigEntry( domain=DOMAIN, data={CONF_HOST: IP_ADDRESS, CONF_NAME: DEFAULT_ENTRY_TITLE}, + options=options, unique_id=MAC_ADDRESS, - options={ - CONF_MODE: MODE_AUTO, - CONF_CUSTOM_EFFECT_COLORS: ":: CANNOT BE PARSED ::", - CONF_CUSTOM_EFFECT_SPEED_PCT: 88, - CONF_CUSTOM_EFFECT_TRANSITION: TRANSITION_JUMP, - }, ) config_entry.add_to_hass(hass) bulb = _mocked_bulb() @@ -827,7 +832,7 @@ async def test_rgb_light_custom_effect_via_service( bulb.async_set_custom_pattern.reset_mock() -async def test_migrate_from_yaml(hass: HomeAssistant) -> None: +async def test_migrate_from_yaml_with_custom_effect(hass: HomeAssistant) -> None: """Test migrate from yaml.""" config = { LIGHT_DOMAIN: [ @@ -876,6 +881,50 @@ async def test_migrate_from_yaml(hass: HomeAssistant) -> None: } +async def test_migrate_from_yaml_no_custom_effect(hass: HomeAssistant) -> None: + """Test migrate from yaml.""" + config = { + LIGHT_DOMAIN: [ + { + CONF_PLATFORM: DOMAIN, + CONF_DEVICES: { + IP_ADDRESS: { + CONF_NAME: "flux_lamppost", + CONF_PROTOCOL: "ledenet", + } + }, + } + ], + } + with _patch_discovery(), _patch_wifibulb(): + await async_setup_component(hass, LIGHT_DOMAIN, config) + await hass.async_block_till_done() + await hass.async_block_till_done() + await hass.async_block_till_done() + + entries = hass.config_entries.async_entries(DOMAIN) + assert entries + + migrated_entry = None + for entry in entries: + if entry.unique_id == MAC_ADDRESS: + migrated_entry = entry + break + + assert migrated_entry is not None + assert migrated_entry.data == { + CONF_HOST: IP_ADDRESS, + CONF_NAME: "flux_lamppost", + CONF_PROTOCOL: "ledenet", + } + assert migrated_entry.options == { + CONF_MODE: "auto", + CONF_CUSTOM_EFFECT_COLORS: None, + CONF_CUSTOM_EFFECT_SPEED_PCT: 50, + CONF_CUSTOM_EFFECT_TRANSITION: "gradual", + } + + async def test_addressable_light(hass: HomeAssistant) -> None: """Test an addressable light.""" config_entry = MockConfigEntry(