mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-23 14:12:11 -03:00
feat: Add recursive root folder scanning with API and UI updates. fixes #737
This commit is contained in:
92
tests/services/test_root_folder_recursive.py
Normal file
92
tests/services/test_root_folder_recursive.py
Normal file
@@ -0,0 +1,92 @@
|
||||
import pytest
|
||||
from py.services.model_query import ModelFilterSet, FilterCriteria
|
||||
from py.services.recipe_scanner import RecipeScanner
|
||||
from types import SimpleNamespace
|
||||
|
||||
# Mock settings
|
||||
class MockSettings:
|
||||
def get(self, key, default=None):
|
||||
return default
|
||||
|
||||
# --- Model Filtering Tests ---
|
||||
|
||||
def test_model_filter_set_root_recursive_true():
|
||||
filter_set = ModelFilterSet(MockSettings())
|
||||
items = [
|
||||
{"model_name": "root_item", "folder": ""},
|
||||
{"model_name": "sub_item", "folder": "sub"},
|
||||
]
|
||||
criteria = FilterCriteria(folder="", search_options={"recursive": True})
|
||||
|
||||
result = filter_set.apply(items, criteria)
|
||||
|
||||
assert len(result) == 2
|
||||
assert any(i["model_name"] == "root_item" for i in result)
|
||||
assert any(i["model_name"] == "sub_item" for i in result)
|
||||
|
||||
def test_model_filter_set_root_recursive_false():
|
||||
filter_set = ModelFilterSet(MockSettings())
|
||||
items = [
|
||||
{"model_name": "root_item", "folder": ""},
|
||||
{"model_name": "sub_item", "folder": "sub"},
|
||||
]
|
||||
criteria = FilterCriteria(folder="", search_options={"recursive": False})
|
||||
|
||||
result = filter_set.apply(items, criteria)
|
||||
|
||||
assert len(result) == 1
|
||||
assert result[0]["model_name"] == "root_item"
|
||||
|
||||
# --- Recipe Filtering Tests ---
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_recipe_scanner_root_recursive_true():
|
||||
# Mock LoraScanner
|
||||
class StubLoraScanner:
|
||||
async def get_cached_data(self):
|
||||
return SimpleNamespace(raw_data=[])
|
||||
|
||||
scanner = RecipeScanner(lora_scanner=StubLoraScanner())
|
||||
# Manually populate cache for testing get_paginated_data logic
|
||||
scanner._cache = SimpleNamespace(
|
||||
raw_data=[
|
||||
{"id": "r1", "title": "root_recipe", "folder": "", "modified": 1.0, "created_date": 1.0, "loras": []},
|
||||
{"id": "r2", "title": "sub_recipe", "folder": "sub", "modified": 2.0, "created_date": 2.0, "loras": []},
|
||||
],
|
||||
sorted_by_date=[
|
||||
{"id": "r2", "title": "sub_recipe", "folder": "sub", "modified": 2.0, "created_date": 2.0, "loras": []},
|
||||
{"id": "r1", "title": "root_recipe", "folder": "", "modified": 1.0, "created_date": 1.0, "loras": []},
|
||||
],
|
||||
sorted_by_name=[],
|
||||
version_index={}
|
||||
)
|
||||
|
||||
result = await scanner.get_paginated_data(page=1, page_size=10, folder="", recursive=True)
|
||||
|
||||
assert len(result["items"]) == 2
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_recipe_scanner_root_recursive_false():
|
||||
# Mock LoraScanner
|
||||
class StubLoraScanner:
|
||||
async def get_cached_data(self):
|
||||
return SimpleNamespace(raw_data=[])
|
||||
|
||||
scanner = RecipeScanner(lora_scanner=StubLoraScanner())
|
||||
scanner._cache = SimpleNamespace(
|
||||
raw_data=[
|
||||
{"id": "r1", "title": "root_recipe", "folder": "", "modified": 1.0, "created_date": 1.0, "loras": []},
|
||||
{"id": "r2", "title": "sub_recipe", "folder": "sub", "modified": 2.0, "created_date": 2.0, "loras": []},
|
||||
],
|
||||
sorted_by_date=[
|
||||
{"id": "r2", "title": "sub_recipe", "folder": "sub", "modified": 2.0, "created_date": 2.0, "loras": []},
|
||||
{"id": "r1", "title": "root_recipe", "folder": "", "modified": 1.0, "created_date": 1.0, "loras": []},
|
||||
],
|
||||
sorted_by_name=[],
|
||||
version_index={}
|
||||
)
|
||||
|
||||
result = await scanner.get_paginated_data(page=1, page_size=10, folder="", recursive=False)
|
||||
|
||||
assert len(result["items"]) == 1
|
||||
assert result["items"][0]["id"] == "r1"
|
||||
Reference in New Issue
Block a user