Add plugin enhancements: PluginStatus, PluginError, subscribe_plugin, config validation

- New: fmfuncs/plugin_status.py (9 states)
- New: fmfuncs/plugin_error.py (6 exception classes)
- Enhanced: bridges/plugin_bridge.py (subscribe_plugin)
- Enhanced: bridges/plugin_network_bridge.py (setup_data_transfer, send_data)
- Enhanced: services/plugin_service.py (config validation + status tracking)
- Tests: 15/15 passing (10 original + 5 new)
This commit is contained in:
2026-06-10 13:02:33 +08:00
parent 79f7fb86fe
commit 1cbe52174d
5 changed files with 118 additions and 1 deletions
+40
View File
@@ -0,0 +1,40 @@
"""Plugin system enhancement tests"""
import pytest, asyncio, os, sys
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
from fmfuncs.plugin_status import PluginStatus
from fmfuncs.plugin_error import (
PluginError, PluginLoadError, PluginConfigError,
PluginPermissionError, PluginCommandError
)
class TestPluginStatus:
def test_all_statuses(self):
assert PluginStatus.UNLOADED == "unloaded"
assert PluginStatus.RUNNING == "running"
assert PluginStatus.ERROR == "error"
assert len(list(PluginStatus)) >= 8
class TestPluginError:
def test_base_error(self):
e = PluginError("test message", "test_plugin")
assert "test_plugin" in str(e)
assert "test message" in str(e)
def test_error_without_plugin_name(self):
e = PluginError("generic error")
assert "unknown" in str(e)
def test_subclass_errors(self):
for cls in [PluginLoadError, PluginConfigError, PluginPermissionError, PluginCommandError]:
e = cls("msg", "p")
assert isinstance(e, PluginError)
class TestPluginBridgeEnhancements:
def test_subscribe_plugin_registers_handler(self):
from bridges.plugin_bridge import PluginBridge
from bridges.core_bridge import CoreBridge
cb = CoreBridge()
pb = PluginBridge(cb)
pb.subscribe_plugin("test.topic", lambda msg: None, "test_plugin")
assert "test.topic" in pb.plugin_subscribers