67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
||
"""Tests for nmcli Wi‑Fi scan parsing."""
|
||
|
||
from __future__ import annotations
|
||
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
sys.path.insert(0, str(ROOT / "src"))
|
||
|
||
from util.pi_wifi import _unescape_nmcli # noqa: E402
|
||
|
||
|
||
def test_unescape_nmcli():
|
||
assert _unescape_nmcli("bridge\\:abc") == "bridge:abc"
|
||
assert _unescape_nmcli("plain") == "plain"
|
||
|
||
|
||
def test_interface_display_name_fallback(monkeypatch):
|
||
from util import pi_wifi
|
||
|
||
monkeypatch.setattr(
|
||
pi_wifi,
|
||
"_interface_display_name",
|
||
lambda device: "Test Wi‑Fi" if device == "wlan0" else device,
|
||
)
|
||
import subprocess
|
||
|
||
def fake_run(*args, **kwargs):
|
||
class _R:
|
||
stdout = "wlan0:wifi:connected:HomeNet\neth0:ethernet:connected:\n"
|
||
|
||
return _R()
|
||
|
||
monkeypatch.setattr(subprocess, "run", fake_run)
|
||
ifaces = pi_wifi.list_wifi_interfaces()
|
||
assert len(ifaces) == 1
|
||
assert ifaces[0]["device"] == "wlan0"
|
||
assert ifaces[0]["label"] == "Test Wi‑Fi"
|
||
assert ifaces[0]["connection"] == "HomeNet"
|
||
|
||
|
||
def test_scan_wifi_parses_terse_nmcli(monkeypatch):
|
||
import asyncio
|
||
|
||
from util import pi_wifi
|
||
|
||
sample = "\n".join(
|
||
[
|
||
"bridge-588c81a2fc18:84:",
|
||
"My Network:72:WPA2",
|
||
":50:WPA2",
|
||
"led:100:WPA2",
|
||
]
|
||
)
|
||
|
||
async def fake_run(*args, **kwargs):
|
||
return 0, sample, ""
|
||
|
||
monkeypatch.setattr(pi_wifi, "_run_nmcli", fake_run)
|
||
|
||
networks = asyncio.run(pi_wifi.scan_wifi("wlan0"))
|
||
ssids = [n["ssid"] for n in networks]
|
||
assert ssids == ["led", "bridge-588c81a2fc18", "My Network"]
|
||
assert networks[0]["signal"] == 100
|