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()