mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-18 20:23:27 +02:00
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
from unittest import TestCase
|
|
|
|
from dungeonsheets.character import Character
|
|
from dungeonsheets.weapons import Shortsword
|
|
|
|
|
|
class TestMulticlass(TestCase):
|
|
"""
|
|
Tests for Multiclass character.
|
|
"""
|
|
|
|
def test_constructor(self):
|
|
char = Character(
|
|
name="Multiclass", classes=["wizard", "fighter"], levels=[5, 4]
|
|
)
|
|
self.assertIsInstance(char, Character)
|
|
|
|
def test_level(self):
|
|
char = Character(
|
|
name="Multiclass", classes=["wizard", "fighter"], levels=[5, 4]
|
|
)
|
|
self.assertEqual(char.level, 9)
|
|
|
|
def test_spellcasting(self):
|
|
char = Character(
|
|
name="Multiclass", classes=["wizard", "fighter"], levels=[5, 4]
|
|
)
|
|
self.assertEqual(len(char.spellcasting_classes), 1)
|
|
char = Character(
|
|
name="Multiclass",
|
|
classes=["wizard", "fighter"],
|
|
subclasses=[None, "Eldritch Knight"],
|
|
levels=[5, 4],
|
|
)
|
|
self.assertEqual(len(char.spellcasting_classes), 2)
|
|
# equivalent spellcasting level: 6
|
|
self.assertEqual(char.spell_slots(spell_level=1), 4)
|
|
self.assertEqual(char.spell_slots(spell_level=2), 3)
|
|
self.assertEqual(char.spell_slots(spell_level=3), 3)
|
|
self.assertEqual(char.spell_slots(spell_level=4), 0)
|
|
|
|
def test_proficiencies(self):
|
|
char1 = Character(
|
|
name="Multiclass", classes=["wizard", "fighter"], levels=[5, 4]
|
|
)
|
|
for svt in ("intelligence", "wisdom"):
|
|
self.assertIn(svt, char1.saving_throw_proficiencies)
|
|
char2 = Character(name="Multiclass", classes=["wizard", "rogue"], levels=[5, 4])
|
|
char3 = Character(name="Multiclass", classes=["rogue", "wizard"], levels=[4, 5])
|
|
sword = Shortsword()
|
|
self.assertTrue(char1.is_proficient(sword))
|
|
# multiclassing into Rogue doesn't give simple weapon proficiency
|
|
self.assertFalse(char2.is_proficient(sword))
|
|
self.assertTrue(char3.is_proficient(sword))
|