class TestCharacter(TestCase):

    def setUp(self):
        self.subject = Character()

    def test_name_has_expected_default_value(self):
        self.assertEqual(self.subject.name, '')

    def test_name_can_be_changed(self):
        self.subject.name = 'Bob the Destroyer'
        self.assertEqual(self.subject.name, 'Bob the Destroyer')

    def test_alignment_has_expected_default_value(self):
        self.assertEqual(self.subject.alignment, Alignment.NEUTRAL)

    def test_alignment_can_be_changed_to_good(self):
        self.subject.alignment = Alignment.GOOD
        self.assertEqual(self.subject.alignment, Alignment.GOOD)

    def test_alignment_can_be_changed_to_evil(self):
        self.subject.alignment = Alignment.EVIL
        self.assertEqual(self.subject.alignment, Alignment.EVIL)

    def test_armor_class_has_expected_default(self):
        self.assertEqual(self.subject.armor_class, 10)

    def test_hit_points_has_expected_default(self):
        self.assertEqual(self.subject.hit_points, 5)

    def test_is_alive_when_undamaged(self):
        self.assertTrue(self.subject.alive)

    def test_is_alive_when_damaged(self):
        self.subject.damage(3)
        self.assertTrue(self.subject.alive)

    def test_is_dead_when_out_of_hit_points(self):
        self.subject.damage(5)
        self.assertFalse(self.subject.alive)