Spaces:
Sleeping
Sleeping
| import os | |
| from unittest.mock import MagicMock, patch | |
| import pytest | |
| from ComponentLoader import _env_value, resolve_db_cfg, load_components | |
| from Persistence.Persist import DBConfig, LibsqlConfig | |
| def test_env_value(): | |
| with patch.dict(os.environ, {"TEST_KEY": " test_value "}): | |
| assert _env_value("TEST_KEY") == "test_value" | |
| assert _env_value("NONEXISTENT") == "" | |
| def test_resolve_db_cfg_libsql_success(): | |
| with patch.dict(os.environ, { | |
| "DB_PROVIDER": "libsql", | |
| "DATABASE_URL": "sqlite:///:memory:", | |
| "DB_AUTH_TOKEN": "token", | |
| "LIBSQL_TABLE": "my_table", | |
| "LIBSQL_FTS_TABLE": "my_fts_table" | |
| }): | |
| cfg = resolve_db_cfg() | |
| assert isinstance(cfg, LibsqlConfig) | |
| assert cfg.provider == "libsql" | |
| assert cfg.url == "sqlite:///:memory:" | |
| assert cfg.auth_token == "token" | |
| assert cfg.table == "my_table" | |
| assert cfg.fts_table == "my_fts_table" | |
| def test_resolve_db_cfg_libsql_fallback_turso(): | |
| with patch.dict(os.environ, { | |
| "TURSO_DATABASE_URL": "libsql://test.turso.io", | |
| "TURSO_AUTH_TOKEN": "turso_token" | |
| }, clear=True): | |
| cfg = resolve_db_cfg() | |
| assert isinstance(cfg, LibsqlConfig) | |
| assert cfg.url == "libsql://test.turso.io" | |
| assert cfg.auth_token == "turso_token" | |
| def test_resolve_db_cfg_libsql_missing_url(): | |
| with patch.dict(os.environ, {}, clear=True): | |
| with pytest.raises(RuntimeError, match="TURSO_DATABASE_URL for libsql"): | |
| resolve_db_cfg() | |
| def test_resolve_db_cfg_postgres(): | |
| with patch.dict(os.environ, { | |
| "DB_PROVIDER": "postgres", | |
| "DATABASE_URL": "postgresql://user:pass@localhost/db" | |
| }, clear=True): | |
| cfg = resolve_db_cfg() | |
| assert not isinstance(cfg, LibsqlConfig) | |
| assert isinstance(cfg, DBConfig) | |
| assert cfg.provider == "postgres" | |
| assert cfg.url == "postgresql://user:pass@localhost/db" | |
| def test_resolve_db_cfg_postgres_missing_url(): | |
| with patch.dict(os.environ, {"DB_PROVIDER": "postgres"}, clear=True): | |
| with pytest.raises(RuntimeError, match="DATABASE_URL is required"): | |
| resolve_db_cfg() | |
| def test_load_components(mock_resolve, mock_create_persist, mock_calc_class): | |
| mock_calc = mock_calc_class.return_value | |
| mock_calc.dimensions = 1024 | |
| mock_cfg = MagicMock() | |
| mock_cfg.provider = "postgres" | |
| mock_resolve.return_value = mock_cfg | |
| mock_persist = mock_create_persist.return_value | |
| calc, persist = load_components() | |
| assert calc == mock_calc | |
| assert persist == mock_persist | |
| mock_create_persist.assert_called_once_with("postgres", cfg=mock_cfg, dim=1024) | |