lnbits/tests/unit/test_app_extensions.py
2026-07-27 12:27:29 +03:00

71 lines
2.3 KiB
Python

import json
from pathlib import Path
import pytest
from pytest_mock.plugin import MockerFixture
from lnbits.app import build_all_installed_extensions_list
from lnbits.settings import Settings
@pytest.mark.anyio
async def test_wasm_extension_discovery_uses_configured_directory(
tmp_path: Path,
settings: Settings,
mocker: MockerFixture,
):
discovered_id = "discovered_wasm"
original_extensions_path = settings.lnbits_extensions_path
original_wasm_extensions_path = settings.lnbits_wasm_extensions_path
original_installed_ids = set(settings.lnbits_installed_extensions_ids)
settings.lnbits_extensions_path = str(tmp_path / "code")
settings.lnbits_wasm_extensions_path = str(tmp_path / "wasm_extensions")
Path(settings.lnbits_extensions_path, "extensions").mkdir(parents=True)
_write_wasm_config(settings.wasm_extensions_dir / discovered_id, discovered_id)
mocker.patch(
"lnbits.app.get_installed_extensions",
mocker.AsyncMock(return_value=[]),
)
create_mock = mocker.patch(
"lnbits.app.create_installed_extension",
mocker.AsyncMock(),
)
mocker.patch(
"lnbits.app.get_db_version",
mocker.AsyncMock(return_value=None),
)
migrate_mock = mocker.patch(
"lnbits.app.migrate_extension_database",
mocker.AsyncMock(),
)
try:
installed = await build_all_installed_extensions_list()
finally:
settings.lnbits_extensions_path = original_extensions_path
settings.lnbits_wasm_extensions_path = original_wasm_extensions_path
settings.lnbits_installed_extensions_ids = original_installed_ids
assert [extension.id for extension in installed] == [discovered_id]
create_mock.assert_awaited_once()
assert create_mock.await_args is not None
assert create_mock.await_args.args[0].id == discovered_id
migrate_mock.assert_awaited_once()
def _write_wasm_config(ext_dir: Path, ext_id: str) -> None:
ext_dir.mkdir(parents=True)
(ext_dir / "config.json").write_text(
json.dumps(
{
"id": ext_id,
"name": ext_id,
"version": "1.0.0",
"extension_type": "wasm",
"wasm": {"module": "extension.wasm"},
}
),
encoding="utf-8",
)