import unittest from logic.knights_queue import KnightsQueue from models.knight import Knight class KnightsQueueTest(unittest.TestCase): def test_should_make_valid_next_turn(self): knight1 = Knight(None) knight1.health = 222 knight2 = Knight(None) knight2.health = 1 knights_queue = KnightsQueue([knight1], [knight2]) previous_turn = knights_queue.team_idx_turn knights_queue.dequeue_knight() current_turn = knights_queue.team_idx_turn self.assertNotEqual(previous_turn, current_turn) def test_should_raise_when_team_has_dead_knights(self): with self.assertRaises(Exception): knight1 = Knight(None) knight1.health = 0 knight2 = Knight(None) knight2.health = -1 knight3 = Knight(None) knight3.health = -2 knight4 = Knight(None) knight4.health = 20 knights_queue = KnightsQueue([knight1, knight2, knight3], [knight4]) knights_queue.dequeue_knight() knights_queue.dequeue_knight() def test_should_return_knight_from_any_team_and_add_to_queue_again(self): knight1 = Knight(None) knight1.health = 10 knight2 = Knight(None) knight2.health = 20 knights_queue = KnightsQueue([knight1], [knight2]) result1 = knights_queue.dequeue_knight() result2 = knights_queue.dequeue_knight() result3 = knights_queue.dequeue_knight() self.assertIsNotNone(result1) self.assertIsNotNone(result2) self.assertIsNotNone(result3) self.assertTrue(result1.health == result3.health) def test_should_raise_when_only_one_team_alive(self): with self.assertRaises(Exception): knight = Knight(None) knight.health = 21 knights_queue = KnightsQueue([knight], []) knights_queue.dequeue_knight() def test_should_raise_when_no_team_alive(self): with self.assertRaises(Exception): knights_queue = KnightsQueue([], []) knights_queue.dequeue_knight() if __name__ == '__main__': unittest.main()