test / test (push) Has been cancelled
- test_tools.py: 4 test per update_quest (normale, status invalido, quest non trovata, rinomina) - test_adventure.py: integrità dati (9 aree, connessioni bidirezionali, mostri con statblock, quest, items, features) - Tutti 54 test passano in 0.69s
174 lines
4.8 KiB
Python
174 lines
4.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_update_quest_tool():
|
|
camp_id, _ = _setup_char()
|
|
import src.engine.db as db
|
|
qid = db.add_quest(camp_id, "Missione Test", "Descrizione test")
|
|
r = run("update_quest", quest_id=qid, status="completed")
|
|
assert r["success"] is True
|
|
assert r["status"] == "completed"
|
|
assert "Missione Test" in r["message"]
|
|
|
|
|
|
def test_update_quest_invalid_status():
|
|
camp_id, _ = _setup_char()
|
|
import src.engine.db as db
|
|
qid = db.add_quest(camp_id, "Missione", "")
|
|
r = run("update_quest", quest_id=qid, status="impossibile")
|
|
assert r["success"] is False
|
|
|
|
|
|
def test_update_quest_not_found():
|
|
r = run("update_quest", quest_id=99999, status="completed")
|
|
assert r["success"] is False
|
|
assert "non trovata" in r["message"]
|
|
|
|
|
|
def test_update_quest_with_name():
|
|
camp_id, _ = _setup_char()
|
|
import src.engine.db as db
|
|
qid = db.add_quest(camp_id, "Vecchio Nome", "")
|
|
r = run("update_quest", quest_id=qid, status="active", name="Nuovo Nome")
|
|
assert r["success"] is True
|
|
assert "Nuovo Nome" in r["name"]
|
|
|
|
|
|
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)
|