Implement story 1.5: provisioning execution tile download cache validation wifi kill

Add tiles.py, airspace.py, wifi.join_home_wifi, portal /submit route, and rewire
provision.py main loop; all tasks and quality gates pass (56 tests, ruff clean).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Edholm
2026-04-22 22:54:34 -04:00
parent a6a6a2796d
commit 4aeeefb488
11 changed files with 455 additions and 81 deletions
+22
View File
@@ -0,0 +1,22 @@
from unittest.mock import MagicMock, patch
import pytest
from planemapper.provisioning import ProvisioningError
from planemapper.provisioning.wifi import join_home_wifi
def test_join_home_wifi_success() -> None:
mock_result = MagicMock()
mock_result.returncode = 0
with patch("planemapper.provisioning.wifi.subprocess.run", return_value=mock_result):
join_home_wifi("MySSID", "MyPass")
def test_join_home_wifi_failure() -> None:
mock_result = MagicMock()
mock_result.returncode = 1
mock_result.stderr = b"Error: connection failed"
with patch("planemapper.provisioning.wifi.subprocess.run", return_value=mock_result):
with pytest.raises(ProvisioningError, match="nmcli failed"):
join_home_wifi("MySSID", "wrongpassword")