test: fold the last Windows path and label assumptions

Second pass over the informational Windows job (91 failures -> 11 -> 0):

* `_identity`/`_fold` now wrap the assertions my first sweep skipped: the
  parenthesised and multi-line ones, and the ones whose token list was
  incomplete (`base_models_roots`, `embeddings_roots`).
* The reconciler's `current_name` and `active_roots` carry the drive-prefixed
  label on Windows ("C: loras"), so the last direct comparison goes through
  `_root_label_names` too.
* `open_settings_location` reveals the settings *file* with
  `explorer /select,` on Windows instead of opening the containing folder, so
  that test asserts the platform's call instead of the POSIX one.
* Three more expectations are written in the business form the code returns
  (metadata payload, extracted download paths, hydrated preview URL).
This commit is contained in:
Will Miao
2026-10-12 11:46:13 +08:00
parent c16de68640
commit d25f170ffe
7 changed files with 33 additions and 25 deletions
+11 -5
View File
@@ -36,6 +36,12 @@ def _normalize(path) -> str:
return os.path.normpath(str(path)).replace(os.sep, "/") return os.path.normpath(str(path)).replace(os.sep, "/")
def _fold(paths):
"""Compare path lists as identities: the code may hand out either spelling."""
return [_normalize(path) for path in paths]
class TestAppendNewPaths: class TestAppendNewPaths:
def test_appends_without_reordering_or_duplicating(self): def test_appends_without_reordering_or_duplicating(self):
merged = config_module._append_new_paths( merged = config_module._append_new_paths(
@@ -60,17 +66,17 @@ class TestAdmitConfiguredRoots:
loras_roots=[str(primary)], loras_roots=[str(primary)],
_configured_root_paths={"lora": [str(primary), str(drive)]}, _configured_root_paths={"lora": [str(primary), str(drive)]},
) )
assert config.configured_roots_for("lora") == [_normalize(primary), _normalize(drive)] assert _fold(config.configured_roots_for("lora")) == _fold([primary, drive])
# Still switched off: nothing to admit. # Still switched off: nothing to admit.
assert config.admit_configured_roots() == [] assert config.admit_configured_roots() == []
assert config.loras_roots == [_normalize(primary)] assert _fold(config.loras_roots) == _fold([primary])
drive.mkdir(parents=True) drive.mkdir(parents=True)
admitted = config.admit_configured_roots() admitted = config.admit_configured_roots()
assert admitted == [_normalize(drive)] assert _fold(admitted) == _fold([drive])
assert config.loras_roots == [_normalize(primary), _normalize(drive)] assert _fold(config.loras_roots) == _fold([primary, drive])
# Idempotent: a second call adds nothing. # Idempotent: a second call adds nothing.
assert config.admit_configured_roots() == [] assert config.admit_configured_roots() == []
@@ -91,7 +97,7 @@ class TestAdmitConfiguredRoots:
drive.rmdir() drive.rmdir()
config.admit_configured_roots() config.admit_configured_roots()
assert config.loras_roots == [_normalize(primary), _normalize(drive)] assert _fold(config.loras_roots) == _fold([primary, drive])
def test_admits_every_model_type_and_its_side_maps(self, tmp_path): def test_admits_every_model_type_and_its_side_maps(self, tmp_path):
checkpoint_dir = tmp_path / "checkpoints" checkpoint_dir = tmp_path / "checkpoints"
+12 -14
View File
@@ -361,13 +361,11 @@ def test_save_paths_removes_template_default_library(monkeypatch, tmp_path):
} }
assert _identity(payload["folder_paths"]) == _identity(expected_folder_paths) assert _identity(payload["folder_paths"]) == _identity(expected_folder_paths)
assert _identity(payload["default_lora_root"]) == _identity(folder_paths["loras"][0].replace("\\", "/")) assert _identity(payload["default_lora_root"]) == _identity(folder_paths["loras"][0].replace("\\", "/"))
assert ( assert _identity(payload["default_checkpoint_root"]) == _identity(
payload["default_checkpoint_root"] folder_paths["checkpoints"][0].replace("\\", "/")
== folder_paths["checkpoints"][0].replace("\\", "/")
) )
assert ( assert _identity(payload["default_embedding_root"]) == _identity(
payload["default_embedding_root"] folder_paths["embeddings"][0].replace("\\", "/")
== folder_paths["embeddings"][0].replace("\\", "/")
) )
assert _identity(payload["metadata"]) == _identity({"display_name": "ComfyUI", "source": "comfyui"}) assert _identity(payload["metadata"]) == _identity({"display_name": "ComfyUI", "source": "comfyui"})
assert payload["activate"] is True assert payload["activate"] is True
@@ -419,12 +417,12 @@ def test_save_paths_keeps_default_roots_in_extra_paths(monkeypatch: pytest.Monke
assert fake_settings.name == "comfyui" assert fake_settings.name == "comfyui"
assert _identity(fake_settings.payload["extra_folder_paths"]["loras"]) == _identity([str(extra_lora_dir).replace("\\", "/")]) assert _identity(fake_settings.payload["extra_folder_paths"]["loras"]) == _identity([str(extra_lora_dir).replace("\\", "/")])
assert fake_settings.payload["extra_folder_paths"]["checkpoints"] == [ assert _identity(fake_settings.payload["extra_folder_paths"]["checkpoints"]) == _identity([
str(extra_checkpoint_dir).replace("\\", "/") str(extra_checkpoint_dir).replace("\\", "/")
] ])
assert fake_settings.payload["extra_folder_paths"]["embeddings"] == [ assert _identity(fake_settings.payload["extra_folder_paths"]["embeddings"]) == _identity([
str(extra_embedding_dir).replace("\\", "/") str(extra_embedding_dir).replace("\\", "/")
] ])
assert _identity(fake_settings.payload["default_lora_root"]) == _identity(str(extra_lora_dir).replace("\\", "/")) assert _identity(fake_settings.payload["default_lora_root"]) == _identity(str(extra_lora_dir).replace("\\", "/"))
assert _identity(fake_settings.payload["default_checkpoint_root"]) == _identity(str(extra_checkpoint_dir).replace("\\", "/")) assert _identity(fake_settings.payload["default_checkpoint_root"]) == _identity(str(extra_checkpoint_dir).replace("\\", "/"))
assert _identity(fake_settings.payload["default_embedding_root"]) == _identity(str(extra_embedding_dir).replace("\\", "/")) assert _identity(fake_settings.payload["default_embedding_root"]) == _identity(str(extra_embedding_dir).replace("\\", "/"))
@@ -608,9 +606,9 @@ def test_apply_library_settings_merges_extra_paths(monkeypatch, tmp_path):
assert _identity(str(loras_dir)) in _identity(config_instance.loras_roots) assert _identity(str(loras_dir)) in _identity(config_instance.loras_roots)
assert _identity(str(extra_loras_dir)) in _identity(config_instance.extra_loras_roots) assert _identity(str(extra_loras_dir)) in _identity(config_instance.extra_loras_roots)
assert str(checkpoints_dir) in config_instance.base_models_roots assert _identity(str(checkpoints_dir)) in _identity(config_instance.base_models_roots)
assert _identity(str(extra_checkpoints_dir)) in _identity(config_instance.extra_checkpoints_roots) assert _identity(str(extra_checkpoints_dir)) in _identity(config_instance.extra_checkpoints_roots)
assert str(embeddings_dir) in (config_instance.embeddings_roots or []) assert _identity(str(embeddings_dir)) in _identity((config_instance.embeddings_roots or []))
assert _identity(str(extra_embeddings_dir)) in _identity(config_instance.extra_embeddings_roots) assert _identity(str(extra_embeddings_dir)) in _identity(config_instance.extra_embeddings_roots)
@@ -640,9 +638,9 @@ def test_apply_library_settings_without_extra_paths(monkeypatch, tmp_path):
assert _identity(str(loras_dir)) in _identity(config_instance.loras_roots) assert _identity(str(loras_dir)) in _identity(config_instance.loras_roots)
assert _identity(config_instance.extra_loras_roots) == _identity([]) assert _identity(config_instance.extra_loras_roots) == _identity([])
assert str(checkpoints_dir) in config_instance.base_models_roots assert _identity(str(checkpoints_dir)) in _identity(config_instance.base_models_roots)
assert _identity(config_instance.extra_checkpoints_roots) == _identity([]) assert _identity(config_instance.extra_checkpoints_roots) == _identity([])
assert str(embeddings_dir) in (config_instance.embeddings_roots or []) assert _identity(str(embeddings_dir)) in _identity((config_instance.embeddings_roots or []))
assert _identity(config_instance.extra_embeddings_roots) == _identity([]) assert _identity(config_instance.extra_embeddings_roots) == _identity([])
+4
View File
@@ -788,6 +788,10 @@ async def test_open_settings_location_with_display_opens_folder(tmp_path, monkey
assert response.status == 200 assert response.status == 200
assert payload["success"] is True assert payload["success"] is True
if os.name == "nt":
# explorer reveals the file itself, there is no "open the folder" call.
assert calls == [["explorer", "/select,", str(settings_file)]]
else:
assert calls == [[_expected_opener(), str(settings_file.parent)]] assert calls == [[_expected_opener(), str(settings_file.parent)]]
+1 -1
View File
@@ -1237,7 +1237,7 @@ async def test_download_hydrates_the_card_from_the_site(tmp_path, monkeypatch):
"https://resources.modelscope.cn/cover-images/b.png", "https://resources.modelscope.cn/cover-images/b.png",
"https://resources.modelscope.cn/cover-images/c.png", "https://resources.modelscope.cn/cover-images/c.png",
] ]
assert saved["preview_url"] == str(tmp_path / "preview.webp") assert saved["preview_url"] == str(tmp_path / "preview.webp").replace(os.sep, "/")
assert saved["usage_tips"] == ( assert saved["usage_tips"] == (
'{"strength_min": 0.5, "strength_max": 1.2, "strength_range": "0.5-1.2"}' '{"strength_min": 0.5, "strength_max": 1.2, "strength_range": "0.5-1.2"}'
) )
@@ -617,10 +617,10 @@ async def test_execute_download_extracts_zip_multiple_models(monkeypatch, tmp_pa
assert dummy_scanner.add_model_to_cache.await_count == 2 assert dummy_scanner.add_model_to_cache.await_count == 2
metadata_calls = MetadataManager.save_metadata.await_args_list metadata_calls = MetadataManager.save_metadata.await_args_list
assert metadata_calls[0].args[0] == str(extracted_one) assert metadata_calls[0].args[0] == str(extracted_one).replace(os.sep, "/")
# SHA256 comes from metadata (API value), not recalculated # SHA256 comes from metadata (API value), not recalculated
assert metadata_calls[0].args[1].sha256 == "sha256" assert metadata_calls[0].args[1].sha256 == "sha256"
assert metadata_calls[1].args[0] == str(extracted_two) assert metadata_calls[1].args[0] == str(extracted_two).replace(os.sep, "/")
assert metadata_calls[1].args[1].sha256 == "sha256" assert metadata_calls[1].args[1].sha256 == "sha256"
+1 -1
View File
@@ -2495,7 +2495,7 @@ async def test_reconcile_walk_broadcasts_per_root_progress(tmp_path: Path, monke
assert final["roots_total"] == 1 assert final["roots_total"] == 1
assert final["roots_done"] == 1 assert final["roots_done"] == 1
assert final["active_roots"] == [] assert final["active_roots"] == []
assert final["current_name"] == "loras" assert _root_label_names([final["current_name"]]) == ["loras"]
assert 0 < final["progress"] <= 50 assert 0 < final["progress"] <= 50
assert final["full_rebuild"] is False assert final["full_rebuild"] is False
assert walk_messages[0]["progress"] <= final["progress"] assert walk_messages[0]["progress"] <= final["progress"]
+1 -1
View File
@@ -60,7 +60,7 @@ async def test_load_metadata_payload_restores_file_facts_when_sidecar_missing(
payload = await MetadataManager.load_metadata_payload(str(model_path)) payload = await MetadataManager.load_metadata_payload(str(model_path))
stat_result = model_path.stat() stat_result = model_path.stat()
assert payload["file_path"] == str(model_path) assert payload["file_path"] == str(model_path).replace(os.sep, "/")
assert payload["file_name"] == "MyModel" assert payload["file_name"] == "MyModel"
assert payload["size"] == stat_result.st_size assert payload["size"] == stat_result.st_size
assert payload["modified"] == stat_result.st_mtime assert payload["modified"] == stat_result.st_mtime