mirror of
https://github.com/Crocmagnon/charasheet.git
synced 2024-09-28 21:37:36 +02:00
87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
|
import pytest
|
||
|
from hypothesis import given
|
||
|
from hypothesis.strategies import integers
|
||
|
|
||
|
from character.models.character import Character
|
||
|
from character.tests.utils import ability_values, levels, modifier_test
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"value,expected",
|
||
|
[
|
||
|
(1, -4),
|
||
|
(2, -4),
|
||
|
(3, -4),
|
||
|
(4, -3),
|
||
|
(5, -3),
|
||
|
(6, -2),
|
||
|
(7, -2),
|
||
|
(8, -1),
|
||
|
(9, -1),
|
||
|
(10, 0),
|
||
|
(11, 0),
|
||
|
(12, 1),
|
||
|
(13, 1),
|
||
|
(14, 2),
|
||
|
(15, 2),
|
||
|
(16, 3),
|
||
|
(17, 3),
|
||
|
(18, 4),
|
||
|
(19, 4),
|
||
|
(20, 5),
|
||
|
(21, 5),
|
||
|
],
|
||
|
)
|
||
|
@pytest.mark.parametrize(
|
||
|
"ability",
|
||
|
["strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma"],
|
||
|
)
|
||
|
def test_modifier_values(value, expected, ability):
|
||
|
character = Character()
|
||
|
value_attribute = f"value_{ability}"
|
||
|
setattr(character, value_attribute, value)
|
||
|
modifier_attribute = f"modifier_{ability}"
|
||
|
assert getattr(character, modifier_attribute) == expected
|
||
|
|
||
|
|
||
|
@given(ability_values())
|
||
|
def test_initiative(dex):
|
||
|
assert Character(value_dexterity=dex).initiative == dex
|
||
|
|
||
|
|
||
|
@given(level=levels(), strength=ability_values())
|
||
|
def test_attack_melee(level, strength):
|
||
|
character = Character(level=level, value_strength=strength)
|
||
|
assert character.attack_melee == level + modifier_test(strength)
|
||
|
|
||
|
|
||
|
@given(level=levels(), dexterity=ability_values())
|
||
|
def test_attack_range(level, dexterity):
|
||
|
character = Character(level=level, value_dexterity=dexterity)
|
||
|
assert character.attack_range == level + modifier_test(dexterity)
|
||
|
|
||
|
|
||
|
@given(armor=integers(), shield=integers(), dexterity=ability_values(), misc=integers())
|
||
|
def test_defense(armor, shield, dexterity, misc):
|
||
|
char = Character(
|
||
|
armor=armor, shield=shield, value_dexterity=dexterity, defense_misc=misc
|
||
|
)
|
||
|
assert char.defense == 10 + armor + shield + modifier_test(dexterity) + misc
|
||
|
|
||
|
|
||
|
@given(level=levels(), intelligence=ability_values())
|
||
|
def test_mana_max(level, intelligence):
|
||
|
char = Character(level=level, value_intelligence=intelligence)
|
||
|
assert char.mana_max == 2 * level + modifier_test(intelligence)
|
||
|
|
||
|
|
||
|
@given(
|
||
|
level=levels(), intelligence=ability_values(), mana_consumed=integers(min_value=0)
|
||
|
)
|
||
|
def test_mana_remaining(level, intelligence, mana_consumed):
|
||
|
char = Character(
|
||
|
level=level, value_intelligence=intelligence, mana_consumed=mana_consumed
|
||
|
)
|
||
|
mana_max = 2 * level + modifier_test(intelligence)
|
||
|
assert char.mana_remaining == mana_max - mana_consumed
|