ForcePilot/backend/test/unit/channel/infrastructure/plugin/test_snapshot.py

115 lines
4.0 KiB
Python
Raw Normal View History

from __future__ import annotations
import pytest
from yuxi.channel.domain.model.plugin_registry.plugin_manifest import PluginManifest
from yuxi.channel.domain.model.plugin_registry.plugin_record import PluginRecord, PluginRecordId
from yuxi.channel.domain.model.plugin_registry.plugin_registry import PluginRegistry, RegistrySnapshot
from yuxi.channel.domain.model.plugin_registry.plugin_source import PluginOrigin, PluginSource
from yuxi.channel.domain.model.plugin_registry.plugin_status import PluginStatus
from yuxi.channel.domain.model.shared.channel_capabilities import ChannelCapabilities
from yuxi.channel.infrastructure.plugin.snapshot import restore_snapshot, take_snapshot
class FakeAdapter:
def __init__(self, **kwargs) -> None:
pass
async def open(self) -> None:
pass
async def close(self) -> None:
pass
class TestSnapshot:
def test_take_snapshot(self):
registry = PluginRegistry()
record = PluginRecord(
record_id=PluginRecordId.generate(),
plugin_id="test",
name="Test",
version="1.0.0",
channel_type="test",
source=PluginSource(
origin=PluginOrigin.BUNDLED,
root_dir="channels/test",
entry_file="channels/test/adapter.py",
),
manifest=PluginManifest(
id="test",
name="Test",
version="1.0.0",
channel_type="test",
capabilities=ChannelCapabilities(),
),
capabilities=ChannelCapabilities(),
)
registry.register_builtin(record)
result = take_snapshot(registry)
assert result.plugin_count == 1
assert result.adapter_count == 0
assert isinstance(result.snapshot, RegistrySnapshot)
def test_restore_snapshot(self):
registry = PluginRegistry()
record = PluginRecord(
record_id=PluginRecordId.generate(),
plugin_id="test",
name="Test",
version="1.0.0",
channel_type="test",
source=PluginSource(
origin=PluginOrigin.BUNDLED,
root_dir="channels/test",
entry_file="channels/test/adapter.py",
),
manifest=PluginManifest(
id="test",
name="Test",
version="1.0.0",
channel_type="test",
capabilities=ChannelCapabilities(),
),
capabilities=ChannelCapabilities(),
)
registry.register_builtin(record)
snap = take_snapshot(registry)
registry.register_builtin(
PluginRecord(
record_id=PluginRecordId.generate(),
plugin_id="extra",
name="Extra",
version="1.0.0",
channel_type="extra",
source=PluginSource(
origin=PluginOrigin.BUNDLED,
root_dir="channels/extra",
entry_file="channels/extra/adapter.py",
),
manifest=PluginManifest(
id="extra",
name="Extra",
version="1.0.0",
channel_type="extra",
capabilities=ChannelCapabilities(),
),
capabilities=ChannelCapabilities(),
)
)
assert len(registry.list_records()) == 2
restore_snapshot(registry, snap.snapshot)
assert len(registry.list_records()) == 1
assert registry.get_record("test") is not None
def test_take_snapshot_invalid_type_raises(self):
with pytest.raises(TypeError, match="registry must be PluginRegistry"):
take_snapshot(object())
def test_restore_snapshot_invalid_type_raises(self):
with pytest.raises(TypeError, match="registry must be PluginRegistry"):
restore_snapshot(object(), RegistrySnapshot(plugins={}, adapters={}))