disagreement/tests/test_extension_loader.py
Slipstream 84b4e49c6a
Add extension reload helper (#9)
* Add reload_extension helper

* Removes unused message reaction event handling

Eliminates dead code for message reaction events that were not being processed or utilized by the application.

Cleans up the event dispatcher by removing the unused parser method and event mappings for reaction add/remove events.
2025-06-10 15:37:33 -06:00

78 lines
2.0 KiB
Python

import sys
import types
import pytest
from disagreement.ext import loader
def create_dummy_module(name):
mod = types.ModuleType(name)
called = {"setup": False, "teardown": False}
def setup():
called["setup"] = True
def teardown():
called["teardown"] = True
mod.setup = setup
mod.teardown = teardown
sys.modules[name] = mod
return called
def test_load_and_unload_extension():
called = create_dummy_module("dummy_ext")
module = loader.load_extension("dummy_ext")
assert module is sys.modules["dummy_ext"]
assert called["setup"] is True
loader.unload_extension("dummy_ext")
assert called["teardown"] is True
assert "dummy_ext" not in loader._loaded_extensions
assert "dummy_ext" not in sys.modules
def test_load_extension_twice_raises():
called = create_dummy_module("repeat_ext")
loader.load_extension("repeat_ext")
with pytest.raises(ValueError):
loader.load_extension("repeat_ext")
loader.unload_extension("repeat_ext")
assert called["teardown"] is True
def test_reload_extension(monkeypatch):
called_first = create_dummy_module("reload_ext")
loader.load_extension("reload_ext")
called_second = {"setup": False, "teardown": False}
module_second = types.ModuleType("reload_ext")
def setup_second():
called_second["setup"] = True
def teardown_second():
called_second["teardown"] = True
module_second.setup = setup_second
module_second.teardown = teardown_second
def import_stub(name):
assert name == "reload_ext"
sys.modules[name] = module_second
return module_second
monkeypatch.setattr(loader, "import_module", import_stub)
loader.reload_extension("reload_ext")
assert called_first["teardown"] is True
assert called_second["setup"] is True
assert loader._loaded_extensions["reload_ext"] is module_second
loader.unload_extension("reload_ext")
assert called_second["teardown"] is True