73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
"""`boards.py` filter and enumeration correctness.
|
|
|
|
Runs against the real `pio project config` output of this firmware repo -
|
|
validates that filter predicates match expected envs and don't drift if
|
|
variants get reorganized.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
from meshtastic_mcp import boards
|
|
|
|
|
|
def test_list_boards_returns_many() -> None:
|
|
all_boards = boards.list_boards()
|
|
assert len(all_boards) >= 50, "expected at least 50 PlatformIO envs"
|
|
|
|
|
|
def test_tbeam_is_canonical_esp32() -> None:
|
|
"""The default env in platformio.ini is `tbeam`; it must always be present
|
|
and flagged as esp32."""
|
|
rec = boards.get_board("tbeam")
|
|
assert rec["architecture"] == "esp32"
|
|
assert rec["hw_model_slug"] == "TBEAM"
|
|
assert rec["actively_supported"] is True
|
|
assert rec["board"] == "ttgo-tbeam"
|
|
|
|
|
|
def test_filter_by_architecture() -> None:
|
|
esp32s3 = boards.list_boards(architecture="esp32s3")
|
|
assert len(esp32s3) >= 1
|
|
assert all(b["architecture"] == "esp32s3" for b in esp32s3)
|
|
|
|
|
|
def test_filter_by_actively_supported() -> None:
|
|
supported = boards.list_boards(actively_supported_only=True)
|
|
unsupported = [b for b in boards.list_boards() if not b["actively_supported"]]
|
|
assert supported, "at least one board should be actively supported"
|
|
assert all(b["actively_supported"] for b in supported)
|
|
# Quick sanity: the set difference is non-empty in this repo (there are
|
|
# boards marked actively_supported=false).
|
|
assert unsupported, "expected at least one actively_supported=false board"
|
|
|
|
|
|
def test_filter_by_query_substring_matches_display_name() -> None:
|
|
heltec = boards.list_boards(query="heltec")
|
|
assert heltec, "expected at least one Heltec env"
|
|
# Case-insensitive across display_name, env name, or hw_model_slug
|
|
for b in heltec:
|
|
blob = " ".join(
|
|
filter(
|
|
None,
|
|
[
|
|
b.get("display_name") or "",
|
|
b["env"],
|
|
b.get("hw_model_slug") or "",
|
|
],
|
|
)
|
|
).lower()
|
|
assert "heltec" in blob
|
|
|
|
|
|
def test_get_board_unknown_env_raises() -> None:
|
|
with pytest.raises(KeyError, match="Unknown env"):
|
|
boards.get_board("definitely-not-a-real-env")
|
|
|
|
|
|
def test_get_board_surfaces_raw_config() -> None:
|
|
rec = boards.get_board("tbeam")
|
|
assert "raw_config" in rec
|
|
assert "custom_meshtastic_architecture" in rec["raw_config"]
|
|
assert rec["raw_config"]["custom_meshtastic_architecture"] == "esp32"
|