mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-21 21:22:11 -03:00
refactor(model_scanner): normalize path comparisons for model roots
fix(example_images_download_manager): re-raise specific exception on download error refactor(usage_stats): define constants locally to avoid conditional imports test(example_images_download_manager): update exception handling in download tests test(example_images_file_manager): differentiate between os.startfile and subprocess.Popen in tests test(example_images_paths): ensure valid example images root with single-library mode test(usage_stats): use string literals for metadata payload to avoid conditional imports
This commit is contained in:
@@ -30,10 +30,12 @@ def restore_settings() -> None:
|
||||
async def test_start_download_requires_configured_path(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
manager = download_module.DownloadManager(ws_manager=RecordingWebSocketManager())
|
||||
|
||||
with pytest.raises(download_module.ExampleImagesDownloadError) as exc_info:
|
||||
# Ensure example_images_path is not configured
|
||||
settings.settings.pop('example_images_path', None)
|
||||
|
||||
with pytest.raises(download_module.DownloadConfigurationError) as exc_info:
|
||||
await manager.start_download({})
|
||||
|
||||
assert isinstance(exc_info.value.__cause__, download_module.DownloadConfigurationError)
|
||||
assert "not configured" in str(exc_info.value)
|
||||
|
||||
result = await manager.start_download({"auto_mode": True})
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
from typing import Any, Dict
|
||||
|
||||
@@ -37,20 +38,30 @@ async def test_open_folder_requires_existing_model_directory(monkeypatch: pytest
|
||||
(model_folder / "image.png").write_text("data", encoding="utf-8")
|
||||
|
||||
popen_calls: list[list[str]] = []
|
||||
startfile_calls: list[str] = []
|
||||
|
||||
class DummyPopen:
|
||||
def __init__(self, cmd, *_args, **_kwargs):
|
||||
popen_calls.append(cmd)
|
||||
|
||||
def dummy_startfile(path):
|
||||
startfile_calls.append(path)
|
||||
|
||||
monkeypatch.setattr("subprocess.Popen", DummyPopen)
|
||||
monkeypatch.setattr("os.startfile", dummy_startfile)
|
||||
|
||||
request = JsonRequest({"model_hash": model_hash})
|
||||
response = await ExampleImagesFileManager.open_folder(request)
|
||||
body = json.loads(response.text)
|
||||
|
||||
assert body["success"] is True
|
||||
assert popen_calls
|
||||
assert model_hash in popen_calls[0][-1]
|
||||
# On Windows, os.startfile is used; on other platforms, subprocess.Popen
|
||||
if os.name == 'nt':
|
||||
assert startfile_calls
|
||||
assert model_hash in startfile_calls[0]
|
||||
else:
|
||||
assert popen_calls
|
||||
assert model_hash in popen_calls[0][-1]
|
||||
|
||||
|
||||
async def test_open_folder_rejects_invalid_paths(monkeypatch: pytest.MonkeyPatch, tmp_path) -> None:
|
||||
|
||||
@@ -104,6 +104,10 @@ def test_iter_library_roots_returns_all_configured(tmp_path):
|
||||
|
||||
def test_is_valid_example_images_root_accepts_hash_directories(tmp_path):
|
||||
settings.settings['example_images_path'] = str(tmp_path)
|
||||
# Ensure single-library mode (not multi-library mode)
|
||||
settings.settings['libraries'] = {'default': {}}
|
||||
settings.settings['active_library'] = 'default'
|
||||
|
||||
hash_folder = tmp_path / ('d' * 64)
|
||||
hash_folder.mkdir()
|
||||
(hash_folder / 'image.png').write_text('data', encoding='utf-8')
|
||||
@@ -112,4 +116,6 @@ def test_is_valid_example_images_root_accepts_hash_directories(tmp_path):
|
||||
|
||||
invalid_folder = tmp_path / 'not_hash'
|
||||
invalid_folder.mkdir()
|
||||
# Add a non-hash file to make it clearly invalid
|
||||
(invalid_folder / 'invalid.txt').write_text('invalid', encoding='utf-8')
|
||||
assert is_valid_example_images_root(str(tmp_path)) is False
|
||||
|
||||
@@ -113,11 +113,12 @@ async def test_usage_stats_background_processor_handles_pending_prompts(tmp_path
|
||||
stats, tasks, _ = _prepare_usage_stats(tmp_path, monkeypatch, sleep_override=fast_sleep)
|
||||
|
||||
metadata_calls = []
|
||||
# Use string literals directly to avoid dependency on conditional imports
|
||||
metadata_payload = {
|
||||
MODELS: {
|
||||
"models": {
|
||||
"1": {"type": "checkpoint", "name": "model.ckpt"},
|
||||
},
|
||||
LORAS: {
|
||||
"loras": {
|
||||
"2": {"lora_list": [{"name": "awesome_lora.safetensors"}]},
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user