import json import pathlib import pytest from comfier import Tools ROOT = pathlib.Path(__file__).parent.parent @pytest.fixture def tools(make_tools): # type: ignore[no-untyped-def] return make_tools()[0] def test_normalize_seed(tools: Tools) -> None: assert tools._normalize_seed("42") == 42 assert tools._normalize_seed("0x10") == 16 assert tools._normalize_seed(7) == 7 assert 0 <= tools._normalize_seed(None) < 1 << 63 assert 0 <= tools._normalize_seed(-5) < 1 << 63 assert tools._normalize_seed((1 << 63) + 3) == 3 with pytest.raises(ValueError): tools._normalize_seed("abc") async def test_resolve_dimensions(tools: Tools) -> None: assert await tools._resolve_dimensions("512X768") == (512, 768) assert await tools._resolve_dimensions(None) == (1024, 1024) with pytest.raises(ValueError): await tools._resolve_dimensions("0x10") with pytest.raises(ValueError): await tools._resolve_dimensions("bogus") def test_resolve_node_mappings(tools: Tools) -> None: tools.valves.negative_prompt_node_ids = "1, 2,," nodes = json.loads((ROOT / "fixtures" / "nodes.json").read_text()) m = tools._resolve_node_mappings(nodes) assert m["negative_prompt"]["node_ids"] == ["1", "2"] assert m["positive_prompt"] == {"key": "value", "node_ids": ["520:506"]} assert m["steps"]["node_ids"] == ["459:458"] def test_apply_workflow_parameters(tools: Tools) -> None: wf = json.loads((ROOT / "fixtures" / "workflow.json").read_text()) m = tools._resolve_node_mappings( json.loads((ROOT / "fixtures" / "nodes.json").read_text()) ) applied = tools._apply_workflow_parameters( wf, m, {"seed": 9, "width": 64, "steps": None} ) assert wf["520:517"]["inputs"]["seed"] == 9 assert wf["520:518"]["inputs"]["value"] == 64 assert "steps" not in applied with pytest.raises(KeyError): tools._apply_workflow_parameters( wf, {"seed": {"key": "seed", "node_ids": ["nope"]}}, {"seed": 1} )