mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-08-09 15:30:16 -03:00
Fix ~790 basedpyright errors across the test suite: - Type stub subclasses of real production classes with super().__init__() - Add missing generic type arguments and Dict[str, Any] annotations - Add None guards before subscript/member access - Adapt tests to production API changes (removed dead handlers, PersistentModelCache.get_default, _i18n_filter_added location)
116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
import json
|
|
from types import SimpleNamespace
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from py.routes.lora_routes import LoraRoutes
|
|
from server import PromptServer # pyright: ignore[reportMissingImports]
|
|
|
|
|
|
class DummyRequest:
|
|
def __init__(self, *, query=None, match_info=None, json_data=None):
|
|
self.query = query or {}
|
|
self.match_info = match_info or {}
|
|
self._json_data = json_data or {}
|
|
|
|
async def json(self):
|
|
return self._json_data
|
|
|
|
|
|
class StubLoraService:
|
|
def __init__(self):
|
|
self.trigger_words = {}
|
|
self.usage_tips = {}
|
|
|
|
async def get_lora_trigger_words(self, name):
|
|
return self.trigger_words.get(name, [])
|
|
|
|
async def get_lora_usage_tips_by_relative_path(self, path):
|
|
return self.usage_tips.get(path)
|
|
|
|
|
|
@pytest.fixture
|
|
def routes():
|
|
handler = LoraRoutes()
|
|
handler.service = StubLoraService() # pyright: ignore[reportAttributeAccessIssue]
|
|
return handler
|
|
|
|
|
|
async def test_get_lora_trigger_words_success(routes):
|
|
routes.service.trigger_words["demo"] = ["trigger"]
|
|
response = await routes.get_lora_trigger_words(DummyRequest(query={"name": "demo"}))
|
|
payload = json.loads(response.text)
|
|
assert payload == {"success": True, "trigger_words": ["trigger"]}
|
|
|
|
|
|
async def test_get_lora_trigger_words_missing_name(routes):
|
|
response = await routes.get_lora_trigger_words(DummyRequest())
|
|
assert response.status == 400
|
|
|
|
|
|
async def test_get_lora_trigger_words_error(routes):
|
|
async def failing(*_args, **_kwargs):
|
|
raise RuntimeError("fail")
|
|
|
|
routes.service.get_lora_trigger_words = failing
|
|
|
|
response = await routes.get_lora_trigger_words(DummyRequest(query={"name": "demo"}))
|
|
payload = json.loads(response.text)
|
|
assert response.status == 500
|
|
assert payload["success"] is False
|
|
|
|
|
|
async def test_get_usage_tips_success(routes):
|
|
routes.service.usage_tips["path"] = "tips"
|
|
response = await routes.get_lora_usage_tips_by_path(DummyRequest(query={"relative_path": "path"}))
|
|
payload = json.loads(response.text)
|
|
assert payload == {"success": True, "usage_tips": "tips"}
|
|
|
|
|
|
async def test_get_usage_tips_missing_param(routes):
|
|
response = await routes.get_lora_usage_tips_by_path(DummyRequest())
|
|
assert response.status == 400
|
|
|
|
|
|
async def test_get_usage_tips_error(routes):
|
|
async def failing(*_args, **_kwargs):
|
|
raise RuntimeError("bad")
|
|
|
|
routes.service.get_lora_usage_tips_by_relative_path = failing
|
|
response = await routes.get_lora_usage_tips_by_path(DummyRequest(query={"relative_path": "path"}))
|
|
payload = json.loads(response.text)
|
|
assert response.status == 500
|
|
assert payload["success"] is False
|
|
|
|
|
|
async def test_get_trigger_words_broadcasts(monkeypatch, routes):
|
|
send_mock = MagicMock()
|
|
PromptServer.instance = SimpleNamespace(send_sync=send_mock)
|
|
|
|
monkeypatch.setattr("py.routes.lora_routes.get_lora_info", lambda name: (f"path/{name}", [f"trigger-{name}"]))
|
|
|
|
request = DummyRequest(json_data={"lora_names": ["one"], "node_ids": [{"node_id": "node", "graph_id": "graph-1"}]})
|
|
|
|
response = await routes.get_trigger_words(request)
|
|
payload = json.loads(response.text)
|
|
|
|
assert payload == {"success": True}
|
|
send_mock.assert_called_once_with(
|
|
"trigger_word_update",
|
|
{"id": "node", "graph_id": "graph-1", "message": "trigger-one"},
|
|
)
|
|
|
|
|
|
async def test_get_trigger_words_error(monkeypatch, routes):
|
|
async def failing_json():
|
|
raise RuntimeError("bad json")
|
|
|
|
request = DummyRequest(json_data=None)
|
|
request.json = failing_json
|
|
|
|
response = await routes.get_trigger_words(request)
|
|
payload = json.loads(response.text)
|
|
assert response.status == 500
|
|
assert payload["success"] is False
|