Completes the isinstance/cast narrowing + Optional-field assert pattern across the last batch of test files. custom_components and tests are now both fully clean under ruff check, ruff format --check, and ty check.
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
"""Write-handler unit tests for laundry-family capabilities."""
|
|
|
|
from custom_components.localthings.registry.capabilities import laundry
|
|
from custom_components.localthings.registry.capabilities.operational import OPERATIONAL_STATE
|
|
from custom_components.localthings.registry.entities import ButtonDesc, SelectDesc, SwitchDesc
|
|
|
|
|
|
def test_start_button_writes_run():
|
|
btn = next(
|
|
e for e in OPERATIONAL_STATE.entities if e.key == "start" and isinstance(e, ButtonDesc)
|
|
)
|
|
assert btn.write_fn is not None
|
|
assert btn.write_fn("Run", {}) == (
|
|
["operational", "state", "vs", "0"],
|
|
{"x.com.samsung.da.state": "Run"},
|
|
)
|
|
|
|
|
|
def test_pause_button_writes_pause():
|
|
btn = next(
|
|
e for e in OPERATIONAL_STATE.entities if e.key == "pause" and isinstance(e, ButtonDesc)
|
|
)
|
|
assert btn.write_fn is not None
|
|
assert btn.write_fn("Pause", {}) == (
|
|
["operational", "state", "vs", "0"],
|
|
{"x.com.samsung.da.state": "Pause"},
|
|
)
|
|
|
|
|
|
def test_stop_button_writes_ready():
|
|
btn = next(
|
|
e for e in OPERATIONAL_STATE.entities if e.key == "stop" and isinstance(e, ButtonDesc)
|
|
)
|
|
assert btn.write_fn is not None
|
|
assert btn.write_fn("Ready", {}) == (
|
|
["operational", "state", "vs", "0"],
|
|
{"x.com.samsung.da.state": "Ready"},
|
|
)
|
|
|
|
|
|
def test_sound_mode_write_valid():
|
|
desc = next(
|
|
e
|
|
for e in laundry.SOUND_MODE.entities
|
|
if e.key == "sound_mode" and isinstance(e, SelectDesc)
|
|
)
|
|
assert desc.write_fn is not None
|
|
assert desc.write_fn("mute", {}) == (
|
|
["settings", "sound", "mode", "vs", "0"],
|
|
{"mode": "mute"},
|
|
)
|
|
assert desc.write_fn("invalid", {}) is None
|
|
|
|
|
|
def test_led_brightness_write_valid():
|
|
desc = next(
|
|
e
|
|
for e in laundry.DOOR_LED.entities
|
|
if e.key == "led_brightness" and isinstance(e, SelectDesc)
|
|
)
|
|
assert desc.write_fn is not None
|
|
assert desc.write_fn("Low", {}) == (
|
|
["doorled", "light", "vs", "0"],
|
|
{"setBrightness": "Low"},
|
|
)
|
|
assert desc.write_fn("Medium", {}) is None
|
|
|
|
|
|
def test_led_night_light_write_valid():
|
|
desc = next(
|
|
e
|
|
for e in laundry.DOOR_LED.entities
|
|
if e.key == "led_night_light" and isinstance(e, SwitchDesc)
|
|
)
|
|
assert desc.write_fn is not None
|
|
assert desc.write_fn("On", {}) == (
|
|
["doorled", "light", "vs", "0"],
|
|
{"setNightLight": "On"},
|
|
)
|
|
assert desc.write_fn("Off", {}) == (
|
|
["doorled", "light", "vs", "0"],
|
|
{"setNightLight": "Off"},
|
|
)
|
|
assert desc.write_fn("invalid", {}) is None
|