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.
15 lines
826 B
Python
15 lines
826 B
Python
def test_dishwasher_resources_loaded(dishwasher_resources):
|
|
assert dishwasher_resources, "no resources loaded"
|
|
# Resources are sourced from the /device/0 batch; rt is not present in
|
|
# batch responses (OCF carries rt at the collection-entry level only).
|
|
# Verify the fixture contains dict values (including empty reps which are
|
|
# valid batch entries for resources that temporarily have no state).
|
|
non_dicts = [h for h, rep in dishwasher_resources.items() if not isinstance(rep, dict)]
|
|
assert not non_dicts, f"resources with non-dict rep: {non_dicts}"
|
|
|
|
|
|
def test_fridge_has_autofill(fridge_resources):
|
|
assert "/autofill/vs/0" in fridge_resources
|
|
# Batch reps do not carry 'rt'; check for the actual autofill field.
|
|
assert "x.com.samsung.da.autofill" in fridge_resources["/autofill/vs/0"]
|