mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
5947f04bd3
Signed-off-by: phernandez <paul@basicmachines.co> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
"""Tests for CLI container composition root."""
|
|
|
|
import pytest
|
|
|
|
from basic_memory.cli.container import (
|
|
CliContainer,
|
|
get_container,
|
|
set_container,
|
|
get_or_create_container,
|
|
)
|
|
from basic_memory.runtime import RuntimeMode
|
|
|
|
|
|
class TestCliContainer:
|
|
"""Tests for CliContainer."""
|
|
|
|
def test_create_from_config(self, app_config):
|
|
"""Container can be created from config."""
|
|
container = CliContainer(config=app_config, mode=RuntimeMode.LOCAL)
|
|
assert container.config == app_config
|
|
assert container.mode == RuntimeMode.LOCAL
|
|
|
|
def test_is_cloud_mode_when_cloud(self, app_config):
|
|
"""is_cloud_mode returns True in cloud mode."""
|
|
container = CliContainer(config=app_config, mode=RuntimeMode.CLOUD)
|
|
assert container.is_cloud_mode is True
|
|
|
|
def test_is_cloud_mode_when_local(self, app_config):
|
|
"""is_cloud_mode returns False in local mode."""
|
|
container = CliContainer(config=app_config, mode=RuntimeMode.LOCAL)
|
|
assert container.is_cloud_mode is False
|
|
|
|
def test_is_cloud_mode_when_test(self, app_config):
|
|
"""is_cloud_mode returns False in test mode."""
|
|
container = CliContainer(config=app_config, mode=RuntimeMode.TEST)
|
|
assert container.is_cloud_mode is False
|
|
|
|
|
|
class TestContainerAccessors:
|
|
"""Tests for container get/set functions."""
|
|
|
|
def test_get_container_raises_when_not_set(self, monkeypatch):
|
|
"""get_container raises RuntimeError when container not initialized."""
|
|
import basic_memory.cli.container as container_module
|
|
|
|
monkeypatch.setattr(container_module, "_container", None)
|
|
|
|
with pytest.raises(RuntimeError, match="CLI container not initialized"):
|
|
get_container()
|
|
|
|
def test_set_and_get_container(self, app_config, monkeypatch):
|
|
"""set_container allows get_container to return the container."""
|
|
import basic_memory.cli.container as container_module
|
|
|
|
container = CliContainer(config=app_config, mode=RuntimeMode.LOCAL)
|
|
monkeypatch.setattr(container_module, "_container", None)
|
|
|
|
set_container(container)
|
|
assert get_container() is container
|
|
|
|
|
|
class TestGetOrCreateContainer:
|
|
"""Tests for get_or_create_container - unique to CLI container."""
|
|
|
|
def test_creates_new_when_none_exists(self, monkeypatch):
|
|
"""get_or_create_container creates a new container when none exists."""
|
|
import basic_memory.cli.container as container_module
|
|
|
|
monkeypatch.setattr(container_module, "_container", None)
|
|
|
|
container = get_or_create_container()
|
|
assert container is not None
|
|
assert isinstance(container, CliContainer)
|
|
|
|
def test_returns_existing_when_set(self, app_config, monkeypatch):
|
|
"""get_or_create_container returns existing container if already set."""
|
|
import basic_memory.cli.container as container_module
|
|
|
|
existing = CliContainer(config=app_config, mode=RuntimeMode.LOCAL)
|
|
monkeypatch.setattr(container_module, "_container", existing)
|
|
|
|
result = get_or_create_container()
|
|
assert result is existing
|
|
|
|
def test_sets_module_level_container(self, monkeypatch):
|
|
"""get_or_create_container sets the module-level container."""
|
|
import basic_memory.cli.container as container_module
|
|
|
|
monkeypatch.setattr(container_module, "_container", None)
|
|
|
|
container = get_or_create_container()
|
|
|
|
# Verify it was set at module level
|
|
assert container_module._container is container
|
|
# Verify get_container now works
|
|
assert get_container() is container
|