Files
dcc-rpg/tests/test_tools.py
T
truetype cb45172717 refactor: remediation plan Fase 0-4 completata
- Fase 0: env var allineate, SYSTEM_PROMPT deduplicato, .gitignore pulito
- Fase 1: GameContext isolato, ciclo DM unificato, provider thread-safe (contextvars)
- Fase 2: DB schema esteso (current_area_id, combat_state, character_items)
- Fase 3: thread-local connection pool + WAL + busy_timeout
- Fase 4: test suite (32 test, 100% pass)
- heuristic_fallback come parser di riserva (non secondo pilota)
2026-06-27 18:00:03 +02:00

141 lines
3.8 KiB
Python

import sys
import json
sys.path.insert(0, "src")
from src.engine.tools import run
from src.engine.db import init_db, create_campaign, create_character, update_character
def _setup_char():
conn = init_db()
camp_id = create_campaign("Test", "Avventura")
char_id = create_character(camp_id, "TestChar", "guerriero", "soldato")
update_character(
char_id,
level=1, str=15, agi=11, sta=14,
per=9, int=8, lck=10,
hp_current=12, hp_max=12, ac=15,
armor_type="light",
)
return camp_id, char_id
def test_roll_dice_tool():
r = run("roll_dice", die="d20")
assert r["success"] is True
assert r["tool"] == "roll-dice"
assert 1 <= r["total"] <= 20
def test_dice_chain_tool():
r = run("dice_chain", die="d3", steps=2)
assert r["success"] is True
assert r["output_die"] == "d5"
def test_unknown_tool():
r = run("nonexistent")
assert r["success"] is False
assert "sconosciuto" in r["message"]
def test_ability_check():
_, char_id = _setup_char()
r = run("ability_check", character_id=char_id, dc=12, modifier=2)
assert r["success"] is True
assert "d20" in r["message"]
def test_saving_throw():
_, char_id = _setup_char()
r = run("saving_throw", character_id=char_id, save_type="Tempra", dc=15)
assert r["success"] is True
assert r["save_type"] == "Tempra"
def test_saving_throw_invalid_type():
_, char_id = _setup_char()
r = run("saving_throw", character_id=char_id, save_type="Forza", dc=15)
assert r["success"] is False
def test_movement():
r = run("movement", distance_m=30, terrain="normale")
assert r["success"] is True
assert r["rounds"] == 3
assert r["speed_m_per_round"] == 12
def test_movement_difficult():
r = run("movement", distance_m=30, terrain="difficile")
assert r["success"] is True
assert r["rounds"] == 5
def test_spellcasting():
_, char_id = _setup_char()
r = run("spellcasting", character_id=char_id, spell_name="Dardo Incantato", spell_check=18, dc=12)
assert r["success"] is True
assert r["result_tier"] in ("minore", "moderato", "maggiore")
def test_spellcasting_failure():
_, char_id = _setup_char()
r = run("spellcasting", character_id=char_id, spell_name="Dardo Incantato", spell_check=5, dc=12)
assert r["success"] is True
assert "fallisce" in r["message"]
def test_update_inventory():
_, char_id = _setup_char()
r = run("update_inventory", character_id=char_id, item="Pozione di Cura")
assert r["success"] is True
assert "Pozione di Cura" in r["message"]
def test_award_xp():
_, char_id = _setup_char()
r = run("award_xp", character_id=char_id, xp=5)
assert r["success"] is True
assert r["xp_gained"] == 5
def test_award_xp_levelup():
camp_id, _ = _setup_char()
# Create a lv0 character (contadino) to test level-up
import src.engine.db as db
lv0_id = db.create_character(camp_id, "Lv0 Hero", "contadino", "contadino")
db.update_character(lv0_id, level=0, xp=0)
r1 = run("award_xp", character_id=lv0_id, xp=10)
assert r1["xp_total"] == 10
assert r1["leveled_up"] is True
def test_dm_override():
r = run("dm_override", command="narrate", params={"text": "Una luce accecante."})
assert r["success"] is True
assert r["tool"] == "dm-override"
def test_dm_override_help():
r = run("dm_override", command="help")
assert r["success"] is True
assert "commands" in r
def test_combat():
_, char_id = _setup_char()
r = run(
"combat",
character_id=char_id,
target_ac=15,
attack_bonus=2,
damage_die="d8",
mighty_deed_die="d3",
luck_mod=0,
armor_type="medium",
)
assert r["success"] is True
assert r["tool"] == "combat"
assert isinstance(r["hit"], bool)