"""Admin 存储快照的配额、回收站与物理合计口径。""" from __future__ import annotations import sys import unittest from datetime import datetime, timezone from pathlib import Path from unittest.mock import MagicMock, patch from uuid import uuid4 sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from web.admin import _storage_page class AdminStorageTests(unittest.TestCase): def test_storage_page_exposes_trash_and_physical_total(self) -> None: uid = uuid4() scanned = datetime(2026, 8, 28, tzinfo=timezone.utc) totals_result = MagicMock() totals_result.one.return_value = (1, 100, 40, 2, 1) rows_result = MagicMock() rows_result.all.return_value = [ (uid, "user@example.com", "测试用户", "tester", 100, 2, 40, 1, scanned) ] session = MagicMock() session.execute.side_effect = [totals_result, rows_result] with patch("core.agent_builder.load_config", return_value={"quotas": {}}): page = _storage_page(session, 0, 20) row = page["rows"][0] self.assertEqual(row["bytes_used"], 100) self.assertEqual(row["trash_bytes"], 40) self.assertEqual(row["trash_file_count"], 1) self.assertEqual(row["physical_bytes"], 140) self.assertEqual(page["total"], 1) self.assertEqual(page["totals"], { "bytes_used": 100, "trash_bytes": 40, "physical_bytes": 140, "file_count": 2, "trash_file_count": 1, }) if __name__ == "__main__": unittest.main()