✅ test character builder
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
import json
|
||||
import pathlib
|
||||
|
||||
from base_mob import BaseMob
|
||||
from character_builder import CharacterBuilder
|
||||
|
||||
ARTHUR_JSON = """{
|
||||
"name": "Arthur",
|
||||
"max_pv": 100,
|
||||
"current_pv": 100,
|
||||
"strength": 20,
|
||||
"protection": 10,
|
||||
"speed": 5,
|
||||
"mob_type": 0
|
||||
}"""
|
||||
|
||||
ARTHUR_FILE = pathlib.Path('Arthur.json')
|
||||
|
||||
|
||||
class TestCharacterBuilder(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
ARTHUR_FILE.unlink(missing_ok=True)
|
||||
|
||||
@patch("builtins.input")
|
||||
def test_build_character(self, mock_input):
|
||||
# Arrange
|
||||
mock_input.side_effect = [
|
||||
"Arthur", # name
|
||||
"100", # max_pv
|
||||
"20", # strength
|
||||
"10", # protection
|
||||
"5" # speed
|
||||
]
|
||||
|
||||
# Act
|
||||
character = CharacterBuilder.build_character()
|
||||
|
||||
# Assert
|
||||
self.assertIsInstance(character, BaseMob)
|
||||
self.assertEqual(character.name, "Arthur")
|
||||
self.assertEqual(character.max_pv, 100)
|
||||
self.assertEqual(character.strength, 20)
|
||||
self.assertEqual(character.protection, 10)
|
||||
self.assertEqual(character.speed, 5)
|
||||
self.assertEqual(character.mob_type, 0)
|
||||
|
||||
def test_save_character(self):
|
||||
# Arrange
|
||||
character = BaseMob(
|
||||
name="Arthur",
|
||||
max_pv=100,
|
||||
strength=20,
|
||||
protection=10,
|
||||
speed=5,
|
||||
mob_type=0,
|
||||
)
|
||||
|
||||
# Act
|
||||
CharacterBuilder.save_character(character)
|
||||
|
||||
# Assert
|
||||
self.assertTrue(ARTHUR_FILE.exists())
|
||||
self.assertEqual(ARTHUR_JSON, ARTHUR_FILE.read_text(encoding='utf-8'))
|
||||
|
||||
def test_load_character_file_not_found(self):
|
||||
# Act
|
||||
result = CharacterBuilder.load_character("Lancelot")
|
||||
|
||||
# Assert
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_load_character_success(self):
|
||||
# Arrange
|
||||
ARTHUR_FILE.write_text(ARTHUR_JSON, encoding='utf-8')
|
||||
|
||||
# Act
|
||||
character = CharacterBuilder.load_character("Arthur")
|
||||
|
||||
# Assert
|
||||
self.assertIsNotNone(character)
|
||||
self.assertEqual(character.name, "Arthur")
|
||||
self.assertEqual(character.max_pv, 100)
|
||||
self.assertEqual(character.strength, 20)
|
||||
self.assertEqual(character.protection, 10)
|
||||
self.assertEqual(character.speed, 5)
|
||||
self.assertEqual(character.mob_type, 0)
|
||||
|
||||
def test_load_character_missing_keys(self):
|
||||
arthur_dict: dict = json.loads(ARTHUR_JSON)
|
||||
|
||||
for key in arthur_dict:
|
||||
with self.subTest(f'test without key "{key}"'):
|
||||
# Arrange
|
||||
invalid_dict = arthur_dict.copy()
|
||||
invalid_dict.pop(key)
|
||||
ARTHUR_FILE.write_text(json.dumps(
|
||||
invalid_dict), encoding='utf-8')
|
||||
|
||||
# Act
|
||||
result = CharacterBuilder.load_character("Arthur")
|
||||
|
||||
# Assert
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_load_character_invalid_json(self):
|
||||
# Arrange
|
||||
ARTHUR_FILE.write_text(ARTHUR_JSON[1:], encoding='utf-8')
|
||||
|
||||
# Act
|
||||
result = CharacterBuilder.load_character("Arthur")
|
||||
|
||||
# Assert
|
||||
self.assertIsNone(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user