"""Desktop system and filesystem RPC functions over HTTP.""" import os import platform import shutil from pathlib import Path from django.test import LiveServerTestCase from tests.live_http import LiveRPCMixin class SystemInfoTests(LiveRPCMixin, LiveServerTestCase): def setUp(self): self.session_init() def test_system_info_returns_os_data(self): result = self.result("system_info") self.assertEqual(result["os_name"], platform.system()) self.assertEqual(result["hostname"], platform.node()) self.assertGreater(result["cpu_count"], 0) def test_system_info_returns_paths(self): result = self.result("system_info") self.assertEqual(result["home_dir"], str(Path.home())) self.assertEqual(result["cwd"], os.getcwd()) def test_disk_usage(self): result = self.result("disk_usage", {"path": "/"}) self.assertGreater(result["total_gb"], 0) self.assertGreater(result["free_gb"], 0) self.assertGreaterEqual(result["percent_used"], 0) self.assertLessEqual(result["percent_used"], 100) def test_app_info(self): result = self.result("app_info") self.assertEqual(result["app_name"], "mizan Desktop") self.assertGreater(result["uptime_seconds"], 0) class FileSystemTests(LiveRPCMixin, LiveServerTestCase): def setUp(self): self.session_init() self.test_dir = Path.home() / ".mizan-test" self.test_dir.mkdir(exist_ok=True) def tearDown(self): if self.test_dir.exists(): shutil.rmtree(self.test_dir) def test_list_files_home(self): result = self.result("list_files", {"directory": "~"}) self.assertEqual(result["directory"], str(Path.home())) self.assertIsInstance(result["entries"], list) def test_list_files_root_has_no_parent(self): result = self.result("list_files", {"directory": "/"}) self.assertIsNone(result["parent"]) def test_write_and_read_file(self): test_path = str(self.test_dir / "test-note.txt") test_content = "Hello from an HTTP integration test!" written = self.result("write_file", {"path": test_path, "content": test_content}) self.assertEqual(written["path"], test_path) read_back = self.result("read_file", {"path": test_path}) self.assertEqual(read_back["content"], test_content) def test_write_outside_home_rejected(self): reply = self.call("write_file", {"path": "/tmp/escape.txt", "content": "nope"}) self.assertEqual(reply.status, 403) self.assertEqual(reply.body["code"], "FORBIDDEN") def test_delete_file(self): test_path = str(self.test_dir / "to-delete.txt") (self.test_dir / "to-delete.txt").write_text("delete me") result = self.result("delete_file", {"path": test_path}) self.assertTrue(result["deleted"]) self.assertFalse(Path(test_path).exists()) def test_file_entries_have_metadata(self): (self.test_dir / "metadata-test.txt").write_text("hello") result = self.result("list_files", {"directory": str(self.test_dir)}) self.assertGreater(len(result["entries"]), 0) entry = result["entries"][0] self.assertIn("name", entry) self.assertIn("path", entry) self.assertIn("is_dir", entry) self.assertIn("size", entry) self.assertIn("modified", entry)