Files
yaris-obd/tests/test_app_network.py
T
Mathieu Moran 81c7ee25fd test: align suite with shipped behavior (WiFi swap, BUG-10 guard, odometer_baseline)
- test_app_trip + test_trip_sql: mock was_car_ever_connected() so trip
  building runs (BUG-10 guard suppresses trips until car ECU reached)
- test_app_settings: include odometer_baseline in valid payload + assert save
- test_yaris_uplink: Hotspot -> Hotspot-local; restore_fallback no longer
  activates AP (reports no_connection); wait timeout writes fallback_restored
- test_app_network: local_hotspot mode removed by WiFi swap -> wifi/no-internet
2026-08-12 19:14:07 -04:00

75 lines
2.5 KiB
Python

import json
import unittest
from unittest.mock import MagicMock, mock_open, patch
from modules import app_network
class AppNetworkTest(unittest.TestCase):
@patch("modules.app_network.subprocess.run")
@patch(
"modules.app_network._helper_command",
return_value=["sudo", "helper", "configure"],
)
def test_configuration_secret_is_sent_only_over_stdin(
self,
_helper_command,
run,
):
run.return_value = MagicMock(returncode=0, stdout="", stderr="")
app_network.configure_phone_hotspot("My Phone", "private-password")
command = run.call_args.args[0]
self.assertNotIn("private-password", command)
self.assertEqual(
json.loads(run.call_args.kwargs["input"]),
{"ssid": "My Phone", "password": "private-password"},
)
@patch("modules.app_network.subprocess.run")
def test_connection_request_is_nonblocking(self, run):
run.return_value = MagicMock(returncode=0, stdout="", stderr="")
app_network.request_phone_connection()
self.assertIn("--no-block", run.call_args.args[0])
self.assertIn("yaris-uplink-wait.service", run.call_args.args[0])
self.assertEqual(run.call_args.kwargs["timeout"], 5)
@patch("modules.app_network._phone_ssid", return_value="My Phone")
@patch(
"modules.app_network._nmcli",
return_value="phone-hotspot\n100 (connected)\n4 (full)\n172.20.10.2/28",
)
def test_status_reports_phone_uplink_without_secret(self, _nmcli, _ssid):
with patch("builtins.open", mock_open(read_data='{"action":"connected_phone"}')):
status = app_network.get_status()
self.assertEqual(status["mode"], "phone")
self.assertEqual(status["phone_ssid"], "My Phone")
self.assertTrue(status["internet_reachable"])
self.assertTrue(status["large_upload_allowed"])
self.assertNotIn("password", status)
@patch("modules.app_network._phone_ssid", return_value="")
@patch(
"modules.app_network._nmcli",
return_value="home-wifi\n100 (connected)\n2 (portal)\n192.168.50.220/24",
)
def test_no_internet_blocks_large_uploads(
self,
_nmcli,
_ssid,
):
with patch("builtins.open", side_effect=FileNotFoundError):
status = app_network.get_status()
self.assertEqual(status["mode"], "wifi")
self.assertFalse(status["internet_reachable"])
self.assertFalse(status["large_upload_allowed"])
if __name__ == "__main__":
unittest.main()