mirror of
https://github.com/esphome/esphome.git
synced 2026-09-17 18:18:43 +00:00
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
"""Power-user fields are marked as advanced on the shared schemas.
|
|
|
|
``filters``, ``manual_ip`` and the GPIO switch interlock options are knobs
|
|
whose defaults suit nearly every user, so a schema-aware editor should keep
|
|
them behind its "advanced settings" disclosure rather than on the main form.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import importlib
|
|
|
|
import pytest
|
|
|
|
from esphome.components import binary_sensor, ethernet, sensor, text_sensor, wifi
|
|
import esphome.config_validation as cv
|
|
|
|
|
|
def _markers(schema: cv.Schema) -> dict[str, object]:
|
|
s = schema
|
|
if hasattr(s, "validators"):
|
|
# cv.All -> the schema is the first validator.
|
|
s = s.validators[0]
|
|
return {str(k): k for k in s.schema}
|
|
|
|
|
|
def _gpio_switch_schema() -> cv.Schema:
|
|
return importlib.import_module("esphome.components.gpio.switch").CONFIG_SCHEMA
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("label", "schema_factory", "fields"),
|
|
[
|
|
("sensor", sensor.sensor_schema, ["filters"]),
|
|
("binary_sensor", binary_sensor.binary_sensor_schema, ["filters"]),
|
|
("text_sensor", text_sensor.text_sensor_schema, ["filters"]),
|
|
("wifi_network", lambda: wifi.WIFI_NETWORK_BASE, ["manual_ip"]),
|
|
("wifi", lambda: wifi.CONFIG_SCHEMA, ["manual_ip"]),
|
|
("ethernet", lambda: ethernet.BASE_SCHEMA, ["manual_ip"]),
|
|
("gpio_switch", _gpio_switch_schema, ["interlock", "interlock_wait_time"]),
|
|
],
|
|
)
|
|
def test_power_user_fields_are_advanced(
|
|
label: str, schema_factory, fields: list[str]
|
|
) -> None:
|
|
markers = _markers(schema_factory())
|
|
for field in fields:
|
|
assert markers[field].visibility is cv.Visibility.ADVANCED, f"{label}.{field}"
|
|
|
|
|
|
def test_interlock_wait_time_keeps_its_default() -> None:
|
|
"""Marking the field advanced must not drop its default."""
|
|
markers = _markers(_gpio_switch_schema())
|
|
assert markers["interlock_wait_time"].default() == "0ms"
|