Files
2026-06-15 10:43:52 +02:00

83 lines
2.1 KiB
Python

import json
import pytest
from src.nodes.prompt_multi_picker import PromptMultiPicker
@pytest.fixture
def node():
return PromptMultiPicker()
# --- Base cases ---
def run(node, **kwargs):
defaults = dict(join=", ", options="", selected="[]")
defaults.update(kwargs)
return node.process(**defaults)
def test_single_selected(node):
(text,) = run(node, options="a\nb\nc", selected=json.dumps(["a"]))
assert text == "a"
def test_multiple_selected_appearance_order(node):
(text,) = run(node, options="a\nb\nc", selected=json.dumps(["c", "a"]))
# Appearance order: a before c
assert text == "a, c"
def test_custom_join(node):
(text,) = run(node, join=" | ", options="a\nb\nc", selected=json.dumps(["a", "b"]))
assert text == "a | b"
def test_empty_selection_returns_empty(node):
(text,) = run(node, options="a\nb", selected="[]")
assert text == ""
def test_empty_selection_with_extra_returns_extra(node):
(text,) = run(node, options="a\nb", selected="[]", extra="base text")
assert text == "base text"
def test_extra_chained_before_result(node):
(text,) = run(node, options="a\nb", selected=json.dumps(["a"]), extra="base text")
assert text == "base text, a"
def test_extra_custom_join(node):
(text,) = run(
node, options="a\nb", selected=json.dumps(["a"]), extra="base", join=" | "
)
assert text == "base | a"
def test_dash_ignored(node):
(text,) = run(node, options="--\na\nb", selected=json.dumps(["--", "a"]))
assert "--" not in text
assert "a" in text
def test_empty_lines_ignored(node):
(text,) = run(node, options="\na\n\nb", selected=json.dumps(["a"]))
assert text == "a"
def test_invalid_selected_json(node):
(text,) = run(node, options="a\nb", selected="not json")
assert text == ""
def test_value_not_in_options_ignored(node):
(text,) = run(node, options="a\nb", selected=json.dumps(["c"]))
assert text == ""
def test_no_options_returns_extra(node):
(text,) = run(node, options="", selected=json.dumps(["a"]), extra="base")
assert text == "base"