aboutsummaryrefslogtreecommitdiff
path: root/tests/test_helpers.py
blob: 0c0f87507c77220d52ef9680a43d6e5906913bdd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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}
        )