mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-08-06 22:10:14 -03:00
feat(ui): add seeded random sort option to model pages (#1049)
This commit is contained in:
97
tests/services/test_model_sort.py
Normal file
97
tests/services/test_model_sort.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""Tests for sort parsing and the seeded random sort mode."""
|
||||
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from py.services.model_cache import ModelCache
|
||||
from py.services.model_query import ModelCacheRepository, SortParams
|
||||
|
||||
|
||||
def _make_cache(items):
|
||||
return ModelCache(
|
||||
raw_data=[
|
||||
{
|
||||
"file_path": f"/models/{name}.safetensors",
|
||||
"file_name": f"{name}.safetensors",
|
||||
"model_name": name,
|
||||
"folder": "",
|
||||
"size": 100,
|
||||
"modified": 0.0,
|
||||
}
|
||||
for name in items
|
||||
],
|
||||
folders=[],
|
||||
)
|
||||
|
||||
|
||||
class TestParseSort:
|
||||
def test_random_with_seed(self):
|
||||
params = ModelCacheRepository.parse_sort("random:abc123")
|
||||
assert params == SortParams(key="random", order="asc", seed="abc123")
|
||||
|
||||
def test_random_without_seed(self):
|
||||
params = ModelCacheRepository.parse_sort("random")
|
||||
assert params == SortParams(key="random", order="asc", seed=None)
|
||||
|
||||
def test_random_empty_seed_falls_back_to_none(self):
|
||||
params = ModelCacheRepository.parse_sort("random:")
|
||||
assert params.seed is None
|
||||
|
||||
def test_regular_sorts_unaffected(self):
|
||||
params = ModelCacheRepository.parse_sort("name:desc")
|
||||
assert params == SortParams(key="name", order="desc", seed=None)
|
||||
|
||||
|
||||
class TestRandomShuffle:
|
||||
@pytest.mark.asyncio
|
||||
async def test_same_seed_yields_same_order(self):
|
||||
cache = _make_cache(["a", "b", "c", "d", "e"])
|
||||
await asyncio.sleep(0) # allow background resort task to run
|
||||
|
||||
first = await cache.get_sorted_data("random", "asc", "seed1")
|
||||
second = await cache.get_sorted_data("random", "asc", "seed1")
|
||||
|
||||
assert [item["model_name"] for item in first] == [
|
||||
item["model_name"] for item in second
|
||||
]
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_different_seeds_yield_different_orders(self):
|
||||
cache = _make_cache([f"m{i}" for i in range(20)])
|
||||
await asyncio.sleep(0)
|
||||
|
||||
first = await cache.get_sorted_data("random", "asc", "seed-a")
|
||||
second = await cache.get_sorted_data("random", "asc", "seed-b")
|
||||
|
||||
assert [item["model_name"] for item in first] != [
|
||||
item["model_name"] for item in second
|
||||
]
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_shuffle_is_a_permutation(self):
|
||||
cache = _make_cache(["a", "b", "c", "d", "e"])
|
||||
await asyncio.sleep(0)
|
||||
|
||||
shuffled = await cache.get_sorted_data("random", "asc", "seed")
|
||||
|
||||
assert sorted(item["model_name"] for item in shuffled) == [
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e",
|
||||
]
|
||||
assert len({item["file_path"] for item in shuffled}) == 5
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_missing_seed_is_stable(self):
|
||||
cache = _make_cache(["a", "b", "c", "d", "e"])
|
||||
await asyncio.sleep(0)
|
||||
|
||||
first = await cache.get_sorted_data("random", "asc")
|
||||
second = await cache.get_sorted_data("random", "asc")
|
||||
|
||||
assert [item["model_name"] for item in first] == [
|
||||
item["model_name"] for item in second
|
||||
]
|
||||
Reference in New Issue
Block a user