Adds [tool.ruff] and [tool.ty] config to pyproject.toml with a curated ruff rule set (E, F, W, I, UP, B, C4, SIM, RUF, ASYNC, LOG, G, PIE, RET, PERF, N), pins ruff/ty in requirements-dev.txt, reformats the whole tree with `ruff format`, and fixes the pre-existing lint and type-check debt those tools surfaced so both run clean. Production-code type fixes include: HA's ConfigFlowResult vs. the generic FlowResult in config_flow.py, narrowing BoundEntity.desc to its platform-specific subclass (SelectDesc/NumberDesc/SensorDesc/etc.) via cast() instead of an unchecked annotation, converting HA device_class strings to their proper enum types, a resolve_registry callback typed as `object` instead of `DeviceRegistry | None`, and a couple of other narrow correctness fixes (CA key type validation, an index-out-of-bounds false positive from an empty-tuple fallback, a bool/dict argument swap). Test-file fixes are mechanical: narrowing SamsungEntityDescription to the correct subclass via isinstance()/cast() before accessing subclass-only fields, and asserting Optional write_fn/unit_fn fields are set before calling them.
21 lines
650 B
Python
21 lines
650 B
Python
"""Tests for the CAPABILITIES registry."""
|
|
|
|
from custom_components.localthings.registry.registry import CAPABILITIES
|
|
|
|
|
|
def test_registry_is_keyed_by_href():
|
|
"""Registry keys should match capability hrefs for all caps in the group."""
|
|
for href, caps in CAPABILITIES.items():
|
|
for cap in caps:
|
|
assert cap.href == href
|
|
|
|
|
|
def test_registry_has_no_duplicate_href():
|
|
"""Building succeeded => no duplicates raised at import."""
|
|
assert len(CAPABILITIES) >= 7
|
|
|
|
|
|
def test_operational_state_present():
|
|
"""At least one capability should have 'state' in its href."""
|
|
assert any("state" in href for href in CAPABILITIES)
|