Files
cmbot/tests/test_file_service.py
T
adminandClaude Opus 4.8 3d01bed98c feat: get_data_dir() three-tier fallback (env -> ~/.cmbot -> dev root)
Packaged builds now resolve the data root to ~/.cmbot (%USERPROFILE%\.cmbot)
instead of the program dir, so user config/templates/output stay writable and
per-user regardless of where the program is installed or whether it is launched
via Launcher.exe (docs/10-lan-update.md §5). CMBOT_DATA_DIR still overrides.

- tests/test_file_service.py: 5 tests covering env override, frozen->~/.cmbot,
  dev->project root, blank-env handling

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:39:52 +08:00

57 lines
1.8 KiB
Python

"""Tests for services.file_service path resolution — no GUI dependency."""
import os
import sys
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
import services.file_service as fs
class TestGetDataDir(unittest.TestCase):
"""get_data_dir() three-tier fallback (docs/10-lan-update.md §5)."""
def setUp(self):
self._env = os.environ.get("CMBOT_DATA_DIR")
self._frozen = getattr(sys, "frozen", None)
os.environ.pop("CMBOT_DATA_DIR", None)
if hasattr(sys, "frozen"):
del sys.frozen
def tearDown(self):
if self._env is None:
os.environ.pop("CMBOT_DATA_DIR", None)
else:
os.environ["CMBOT_DATA_DIR"] = self._env
if self._frozen is None:
if hasattr(sys, "frozen"):
del sys.frozen
else:
sys.frozen = self._frozen
def test_env_override_wins(self):
os.environ["CMBOT_DATA_DIR"] = r"X:\custom\data"
self.assertEqual(fs.get_data_dir(), Path(r"X:\custom\data"))
def test_env_override_wins_even_when_frozen(self):
sys.frozen = True
os.environ["CMBOT_DATA_DIR"] = r"X:\custom\data"
self.assertEqual(fs.get_data_dir(), Path(r"X:\custom\data"))
def test_packaged_uses_home_dotcmbot(self):
sys.frozen = True
self.assertEqual(fs.get_data_dir(), Path.home() / ".cmbot")
def test_dev_uses_project_root(self):
# not frozen, no env -> same as program/app dir (project root in dev)
self.assertEqual(fs.get_data_dir(), fs.get_app_dir())
def test_blank_env_is_ignored(self):
os.environ["CMBOT_DATA_DIR"] = " "
self.assertEqual(fs.get_data_dir(), fs.get_app_dir())
if __name__ == "__main__":
unittest.main()