Address opus review: Fahrenheit setpoint bounds, OVEN_SPEC coverage, docstring
- NumberDesc gains native_min_fn/native_max_fn/step_fn hooks (mirroring the existing unit_fn pattern) so an entity's slider bounds can track the live rep instead of staying pinned to whatever unit the descriptor was written against. Oven setpoint was hardcoded to Celsius bounds (30-270), which silently capped issue #44's Fahrenheit range at 270F -- below a normal 350F bake temp. Verified Fahrenheit bounds (175-550, step 5) come from that dump's /mode/vs/0 Bake modeSpec. - Wire oven.OVEN_SPEC into the oven registry, not just range -- it was only reachable from range before, so a standalone oven reporting /oven/spec/vs/0 would have false-tripped the coverage-gap repair. - Fix a docstring in test_golden_regression.py left over from the cooktop.py -> range.py rename.
This commit is contained in:
6 files changed
+92
-6
No files matched your search
@@ -203,7 +203,7 @@ def test_registry_reproduces_golden_state_keys_for_range():
|
||||
"""Range/cooktop-oven combo (model TP1X_DA-KS-RANGE-0102X, issue #44) --
|
||||
reports no oneUiVersion; resolved via the '-RANGE-' modelNum token
|
||||
fallback in for_device_by_model. Reuses the oven family's cavity/
|
||||
setpoint/mode/operational-state capabilities and adds cooktop.py's
|
||||
setpoint/mode/operational-state capabilities and adds range.py's
|
||||
per-burner capabilities for the 4 burners this dump reports."""
|
||||
from tests.conftest import _load_device
|
||||
resources = _load_device('range')
|
||||
|
||||
@@ -53,6 +53,46 @@ def test_oven_setpoint_rejects_missing_items():
|
||||
assert desc.write_fn(200, {}) is None
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# OVEN_SETPOINT — Fahrenheit bounds (issue #44 range dump reports
|
||||
# unit="Fahrenheit"; bounds/step must track the live unit, not stay pinned
|
||||
# to the Celsius defaults)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def _fahrenheit_rep(desired='0'):
|
||||
return {'x.com.samsung.da.items': [{
|
||||
'x.com.samsung.da.desired': desired,
|
||||
'x.com.samsung.da.unit': 'Fahrenheit',
|
||||
}]}
|
||||
|
||||
|
||||
def test_oven_setpoint_write_uses_fahrenheit_bounds():
|
||||
desc = oven.OVEN_SETPOINT.entities[0]
|
||||
rep = _fahrenheit_rep()
|
||||
# 350 is within F bounds (175-550) but above the C max (270) --
|
||||
# confirms the write path isn't silently still clamping to Celsius.
|
||||
_, body = desc.write_fn(350, rep)
|
||||
assert body['x.com.samsung.da.items'][0]['x.com.samsung.da.desired'] == '350'
|
||||
|
||||
|
||||
def test_oven_setpoint_rejects_out_of_range_fahrenheit():
|
||||
desc = oven.OVEN_SETPOINT.entities[0]
|
||||
rep = _fahrenheit_rep()
|
||||
assert desc.write_fn(100, rep) is None # below F min (175)
|
||||
assert desc.write_fn(600, rep) is None # above F max (550)
|
||||
|
||||
|
||||
def test_oven_setpoint_native_bounds_track_live_unit():
|
||||
desc = oven.OVEN_SETPOINT.entities[0]
|
||||
celsius_rep = {'x.com.samsung.da.items': [{'x.com.samsung.da.unit': 'Celsius'}]}
|
||||
assert desc.native_min_fn(celsius_rep) == 30.0
|
||||
assert desc.native_max_fn(celsius_rep) == 270.0
|
||||
fahrenheit_rep = _fahrenheit_rep()
|
||||
assert desc.native_min_fn(fahrenheit_rep) == 175.0
|
||||
assert desc.native_max_fn(fahrenheit_rep) == 550.0
|
||||
assert desc.step_fn(fahrenheit_rep) == 5.0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# OVEN_MODE — SelectDesc with non-empty options
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in new issue
Block a user