fleet-memory/hindsight-embed/tests/test_embed_manager.py
Nicolò Boschi 66cbdda3cb
test: add regression tests for #874 and #894 (#901)
Add tests for None event_date in fact extraction (AttributeError fix)
and for _register_profile skipping .env overwrite with short config keys.
2026-04-07 09:43:25 +02:00

96 lines
3.6 KiB
Python

"""Tests for EmbedManager interface."""
from unittest.mock import MagicMock
from hindsight_embed import get_embed_manager
from hindsight_embed.daemon_embed_manager import DaemonEmbedManager
def test_sanitize_profile_name_via_db_url():
"""Test profile name sanitization through database URL generation."""
manager = get_embed_manager()
# Test None defaults to "default"
assert manager.get_database_url(None) == "pg0://hindsight-embed-default"
# Test simple alphanumeric names
assert manager.get_database_url("myapp") == "pg0://hindsight-embed-myapp"
assert manager.get_database_url("my-app") == "pg0://hindsight-embed-my-app"
assert manager.get_database_url("my_app") == "pg0://hindsight-embed-my_app"
assert manager.get_database_url("app123") == "pg0://hindsight-embed-app123"
# Test special characters get replaced with dashes
assert manager.get_database_url("my app") == "pg0://hindsight-embed-my-app"
assert manager.get_database_url("my.app") == "pg0://hindsight-embed-my-app"
assert manager.get_database_url("my@app!") == "pg0://hindsight-embed-my-app-"
assert manager.get_database_url("My App 2.0!") == "pg0://hindsight-embed-My-App-2-0-"
def test_get_database_url_default():
"""Test database URL generation with default pg0."""
manager = get_embed_manager()
assert manager.get_database_url("myapp") == "pg0://hindsight-embed-myapp"
assert manager.get_database_url("myapp", None) == "pg0://hindsight-embed-myapp"
assert manager.get_database_url("myapp", "pg0") == "pg0://hindsight-embed-myapp"
def test_get_database_url_custom():
"""Test database URL generation with custom database."""
manager = get_embed_manager()
custom_url = "postgresql://user:pass@localhost/db"
assert manager.get_database_url("myapp", custom_url) == custom_url
assert manager.get_database_url("any-profile", custom_url) == custom_url
def test_manager_singleton():
"""Test that get_embed_manager returns functional instances."""
manager1 = get_embed_manager()
manager2 = get_embed_manager()
# They should be independent instances but same type
assert type(manager1) == type(manager2)
# They should produce the same results
assert manager1.get_database_url("test") == manager2.get_database_url("test")
def test_register_profile_skips_when_no_api_keys():
"""
When config contains only short keys (no HINDSIGHT_API_* prefix),
_register_profile should not call create_profile, preserving any
existing profile .env file.
Regression test for https://github.com/vectorize-io/hindsight/issues/894
"""
manager = DaemonEmbedManager()
manager._profile_manager = MagicMock()
# Config with short keys (as passed from cli.py's get_config())
config = {"llm_api_key": "sk-123", "llm_provider": "openai", "llm_model": "gpt-4o"}
manager._register_profile("myprofile", 8100, config)
manager._profile_manager.create_profile.assert_not_called()
def test_register_profile_calls_create_when_api_keys_present():
"""
When config contains HINDSIGHT_API_* keys, _register_profile should
forward them to create_profile.
"""
manager = DaemonEmbedManager()
manager._profile_manager = MagicMock()
config = {
"HINDSIGHT_API_LLM_PROVIDER": "openai",
"HINDSIGHT_API_LLM_API_KEY": "sk-123",
"some_internal_key": "ignored",
}
manager._register_profile("myprofile", 8100, config)
manager._profile_manager.create_profile.assert_called_once_with(
"myprofile",
8100,
{"HINDSIGHT_API_LLM_PROVIDER": "openai", "HINDSIGHT_API_LLM_API_KEY": "sk-123"},
)