nanobot/tests/extensions/test_market.py

60 lines
1.5 KiB
Python

import json
import subprocess
import pytest
from nanobot.extensions.market import ExtensionMarketplace
def test_market_search_normalizes_npm_packages(monkeypatch) -> None:
payload = [
{
"name": "pi-example",
"version": "1.2.3",
"description": "Example",
"keywords": ["pi-package"],
"publisher": {"username": "alice"},
"links": {"repository": "https://example.com/repo"},
}
]
def run(*_args, **_kwargs):
return subprocess.CompletedProcess([], 0, json.dumps(payload), "")
monkeypatch.setattr(subprocess, "run", run)
package = ExtensionMarketplace().search("example", ecosystem="pi")[0]
assert package.name == "pi-example"
assert package.ecosystem == "pi"
assert package.publisher == "alice"
assert package.repository == "https://example.com/repo"
def test_market_rejects_unknown_ecosystem() -> None:
with pytest.raises(ValueError, match="unknown extension ecosystem"):
ExtensionMarketplace().search(ecosystem="other")
def test_market_ignores_fuzzy_npm_results(monkeypatch) -> None:
payload = [
{
"name": "unrelated",
"version": "1.0.0",
"keywords": ["pi"],
}
]
monkeypatch.setattr(
subprocess,
"run",
lambda *_args, **_kwargs: subprocess.CompletedProcess(
[],
0,
json.dumps(payload),
"",
),
)
assert ExtensionMarketplace().search(ecosystem="pi") == ()