82 lines
3.4 KiB
Python
82 lines
3.4 KiB
Python
|
|
"""Tests for issue #1195: sessions must route to the correct profile directory
|
||
|
|
even when that profile directory does not exist yet on disk."""
|
||
|
|
|
||
|
|
import os
|
||
|
|
import tempfile
|
||
|
|
from pathlib import Path
|
||
|
|
from unittest.mock import patch
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
|
||
|
|
# ── helpers ──────────────────────────────────────────────────────────────────
|
||
|
|
|
||
|
|
def _make_hermes_home(base: Path, profile_name: str | None = None) -> Path:
|
||
|
|
"""Create a temp HERMES_HOME (with optional profile dir) and return it."""
|
||
|
|
hermes_home = base / ".hermes"
|
||
|
|
hermes_home.mkdir(parents=True, exist_ok=True)
|
||
|
|
if profile_name:
|
||
|
|
(hermes_home / "profiles" / profile_name).mkdir(parents=True, exist_ok=True)
|
||
|
|
return hermes_home
|
||
|
|
|
||
|
|
|
||
|
|
# ── tests ────────────────────────────────────────────────────────────────────
|
||
|
|
|
||
|
|
class TestGetHermesHomeForProfile:
|
||
|
|
"""get_hermes_home_for_profile() must return the profile path regardless of
|
||
|
|
whether the directory already exists on disk (#1195)."""
|
||
|
|
|
||
|
|
@pytest.fixture(autouse=True)
|
||
|
|
def _patch_default_home(self, tmp_path):
|
||
|
|
"""Patch _DEFAULT_HERMES_HOME to a temp directory for isolation."""
|
||
|
|
from api.profiles import _DEFAULT_HERMES_HOME as real_default
|
||
|
|
|
||
|
|
fake_home = tmp_path / ".hermes"
|
||
|
|
fake_home.mkdir(parents=True)
|
||
|
|
with patch("api.profiles._DEFAULT_HERMES_HOME", fake_home):
|
||
|
|
yield fake_home, real_default
|
||
|
|
|
||
|
|
def test_existing_profile_returns_profile_dir(self, _patch_default_home):
|
||
|
|
fake_home, _ = _patch_default_home
|
||
|
|
from api.profiles import get_hermes_home_for_profile
|
||
|
|
|
||
|
|
# Create an existing profile directory
|
||
|
|
profile_dir = fake_home / "profiles" / "ayan"
|
||
|
|
profile_dir.mkdir(parents=True)
|
||
|
|
|
||
|
|
result = get_hermes_home_for_profile("ayan")
|
||
|
|
assert result == profile_dir
|
||
|
|
|
||
|
|
def test_nonexistent_profile_still_returns_profile_path(self, _patch_default_home):
|
||
|
|
"""Core bug fix: profile dir doesn't exist yet but should still route there."""
|
||
|
|
fake_home, _ = _patch_default_home
|
||
|
|
from api.profiles import get_hermes_home_for_profile
|
||
|
|
|
||
|
|
# Do NOT create the profile directory
|
||
|
|
expected = fake_home / "profiles" / "newprofile"
|
||
|
|
assert not expected.exists() # confirm it doesn't exist
|
||
|
|
|
||
|
|
result = get_hermes_home_for_profile("newprofile")
|
||
|
|
assert result == expected, "Should route to profile path even when dir missing"
|
||
|
|
|
||
|
|
def test_none_returns_default(self, _patch_default_home):
|
||
|
|
fake_home, _ = _patch_default_home
|
||
|
|
from api.profiles import get_hermes_home_for_profile
|
||
|
|
|
||
|
|
result = get_hermes_home_for_profile(None)
|
||
|
|
assert result == fake_home
|
||
|
|
|
||
|
|
def test_empty_string_returns_default(self, _patch_default_home):
|
||
|
|
fake_home, _ = _patch_default_home
|
||
|
|
from api.profiles import get_hermes_home_for_profile
|
||
|
|
|
||
|
|
result = get_hermes_home_for_profile("")
|
||
|
|
assert result == fake_home
|
||
|
|
|
||
|
|
def test_default_string_returns_default(self, _patch_default_home):
|
||
|
|
fake_home, _ = _patch_default_home
|
||
|
|
from api.profiles import get_hermes_home_for_profile
|
||
|
|
|
||
|
|
result = get_hermes_home_for_profile("default")
|
||
|
|
assert result == fake_home
|