Files
ChatAIBot/tests/test_plot_choices.py
T
2026-06-05 14:57:15 +03:00

54 lines
1.6 KiB
Python

from services.rpg_plot import (
choices_from_beat,
choices_from_narrator,
normalize_choice,
format_beat_injection_for_character,
)
def test_choices_from_beat_tags_source():
beat = {
"id": "b_new_1",
"title": "Rest Stop Confession",
"injection": "GPS alerts you to a rest stop.",
"choices": [
{"id": "a", "label": "Tease her about snores"},
{"id": "b", "label": "Ask about snacks"},
],
}
out = choices_from_beat(beat)
assert len(out) == 2
assert out[0]["source"] == "plot_step"
assert out[0]["beat_title"] == "Rest Stop Confession"
assert out[0]["beat_id"] == "b_new_1"
assert "beat_injection" in out[0]
def test_choices_from_narrator_tags_source():
out = choices_from_narrator([{"id": "a", "label": "Look around"}])
assert out[0]["source"] == "narrator"
assert "beat_title" not in out[0]
def test_beat_injection_block_for_character_prompt():
block = format_beat_injection_for_character(
"Over pancakes, Luna steals glances at you.",
lang="en",
)
assert "Plot hint" in block
assert "Over pancakes" in block
assert format_beat_injection_for_character("") == ""
def test_beat_injection_block_ru():
block = format_beat_injection_for_character(
"Луна крадёт взгляды через блины.",
lang="ru",
)
assert "Сюжетная подсказка" in block
assert "по-русски" in block
def test_normalize_choice_skips_empty_label():
assert normalize_choice({"id": "a", "label": " "}, source="narrator") is None