mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 11:10:18 +00:00
18d960eb7a
PR #1342's rewrite introduced `del sys.modules['api.config']`, 'api.profiles']` anti-pattern that breaks tests/test_live_models_ttl_cache.py::test_live_models_cache_is_profile_scoped (v0.50.252) when run after test_issue1195_*. The pattern is explicitly banned per ~/WebUI/docs/agent-memory/pytest-isolation.md — sibling tests that import api.profiles later see the wrong (re-imported) module. Master's version of this test passes 5/5 and uses no del sys.modules calls. The PR's core /branch feature does NOT depend on this test rewrite — reverting it loses no coverage of the branching feature.
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
|