class GameTestCase(unittest.TestCase): def setUp(self): self.player1 = Player('Evie') self.player2 = Player('Amelia') self.pg = Game() self.pg.add_player(self.player1) self.pg.add_player(self.player2) self.pg.setup_game(SETTINGS_LOCATION) def test_all_one_colour(self): card_names = [ 'London', 'Oxford', 'Cambridge', 'Brighton', 'Southampton' ] self.assertTrue(self.pg.all_one_colour(card_names)) card_names[3] = 'Moscow' self.assertFalse(self.pg.all_one_colour(card_names)) def test_all_diseases_cured(self): self.assertFalse(self.pg.all_diseases_cured()) self.pg.diseases['Yellow'].cured = True self.assertFalse(self.pg.all_diseases_cured()) self.pg.diseases['Blue'].cured = True self.pg.diseases['Black'].cured = True self.assertFalse(self.pg.all_diseases_cured()) self.pg.diseases['Red'].cured = True self.assertTrue(self.pg.all_diseases_cured()) def test_add_epidemics(self): self.pg.add_epidemics() self.assertFalse(self.pg.has_x_cube_city(3)) for i in range(0, 11): self.pg.draw_card(self.player1) self.assertEqual(1, self.pg.epidemic_count) self.assertTrue(self.pg.has_x_cube_city(3)) def test_infect_city(self): self.pg.infect_city('London', 'Blue') self.assertEqual(1, self.pg.city_map['London'].cubes['Blue']) self.pg.disease_cubes['Blue'] = 0 with self.assertRaises(GameCrisisException): self.pg.infect_city('London', 'Blue') def test_infect_city_phase(self): self.pg.infect_city_phase() self.assertEqual(1, self.pg.city_map['London'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue']) self.assertEqual(2, len(self.pg.infect_deck.discard)) self.assertEqual('London', self.pg.infect_deck.discard[0].name) self.assertEqual(28, self.pg.disease_cubes['Blue']) def test_epidemic_phase(self): self.pg.epidemic_phase() self.assertEqual(3, self.pg.city_map['Belgorod'].cubes['Black']) top_infect_card = self.pg.infect_deck.take_top_card() self.assertEqual('Belgorod', top_infect_card.name) self.assertEqual('Black', top_infect_card.colour) self.assertEqual(1, self.pg.epidemic_count) self.assertEqual(0, len(self.pg.infect_deck.discard)) def test_outbreak_trigger(self): for i in range(4): self.pg.infect_city('London', 'Blue') self.assertEqual(3, self.pg.city_map['London'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue']) self.assertEqual(1, self.pg.outbreak_count) def test_outbreak(self): self.pg.outbreak('London', 'Blue') self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue']) self.pg.outbreak_count = 7 self.pg.outbreak_stack.clear() with self.assertRaises(GameCrisisException): self.pg.outbreak('London', 'Blue') def test_shuffle(self): import random random.seed(42) self.assertEqual('London', self.pg.player_deck.take_top_card().name) self.pg.player_deck.shuffle() self.assertNotEqual('Oxford', self.pg.player_deck.take_top_card().name) self.assertEqual('London', self.pg.infect_deck.take_top_card().name) self.pg.infect_deck.shuffle() self.assertNotEqual('Oxford', self.pg.infect_deck.take_top_card().name) def test_start_game(self): self.pg.start_game() self.top_player_card = self.pg.player_deck.take_top_card() self.top_infect_card = self.pg.infect_deck.take_top_card() self.assertEqual(9, len(self.pg.infect_deck.discard)) self.assertEqual(0, len(self.pg.player_deck.discard)) self.assertTrue(self.pg.has_x_cube_city(3)) self.assertEqual(3, self.pg.get_count_x_cube_city(3)) self.assertTrue(self.pg.has_x_cube_city(2)) self.assertEqual(3, self.pg.get_count_x_cube_city(2)) self.assertTrue(self.pg.has_x_cube_city(1)) self.assertEqual(3, self.pg.get_count_x_cube_city(1)) self.assertEqual(4, len(self.player1.hand)) self.assertEqual(4, len(self.player2.hand)) self.assertNotEqual('London', self.top_player_card.name) self.assertNotEqual('London', self.top_infect_card.name) self.assertEqual('London', self.pg.players[0].location.name) self.assertEqual('London', self.pg.players[1].location.name) self.assertTrue(self.pg.city_map['London'].has_lab) for i in range(10): self.pg.draw_card(self.player1) self.assertEqual(1, self.pg.epidemic_count) def test_initial_infect_phase(self): self.pg.inital_infect_phase() self.assertEqual(3, self.pg.city_map['London'].cubes['Blue']) self.assertEqual(3, self.pg.city_map['Oxford'].cubes['Blue']) self.assertEqual(3, self.pg.city_map['Cambridge'].cubes['Blue']) self.assertEqual(2, self.pg.city_map['Brighton'].cubes['Blue']) self.assertEqual(2, self.pg.city_map['Southampton'].cubes['Blue']) self.assertEqual(2, self.pg.city_map['Bristol'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Plymouth'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Liverpool'].cubes['Blue']) self.assertEqual(1, self.pg.city_map['Manchester'].cubes['Blue']) self.assertEqual(9, len(self.pg.infect_deck.discard)) self.assertEqual(12, self.pg.disease_cubes['Blue']) def test_draw_initial_hands(self): test_cards = self.pg.player_deck.cards[:8] self.pg.draw_initial_hands() for i, player in enumerate(self.pg.players): with self.subTest(i=i, player=player): self.assertEqual(4, len(player.hand)) self.assertEqual(test_cards[i * 4 + 3].name, player.hand[3].name) def test_draw_card(self): self.pg.draw_card(self.player1) self.assertEqual('London', self.player1.hand[0].name) self.pg.player_deck.cards = [] with self.assertRaises(GameCrisisException): self.pg.draw_card(self.player1) def test_get_new_diseaes(self): self.assertFalse(self.pg.diseases['Blue'].cured) self.assertFalse(self.pg.diseases['Red'].cured) self.pg.diseases['Blue'].cured = True self.assertTrue(self.pg.diseases['Blue'].cured) def test_reset_distances(self): self.pg.reset_distances() self.player1.set_location('London') self.pg.start_turn(self.player1) self.pg.draw_card(self.player1) self.assertTrue(self.player1.build_lab()) self.assertEqual(999, self.pg.city_map['London'].distance) self.assertEqual(999, self.pg.city_map['Moscow'].distance) self.pg.set_lab_distances() self.assertNotEqual(999, self.pg.city_map['London'].distance) self.assertNotEqual(999, self.pg.city_map['Moscow'].distance) self.pg.reset_distances() self.assertEqual(999, self.pg.city_map['London'].distance) self.assertEqual(999, self.pg.city_map['Moscow'].distance) def test_set_city_distance_name(self): self.pg.set_city_distance_name('Leeds') self.assertEqual(2, self.pg.city_map['London'].distance) self.assertEqual(3, self.pg.city_map['Moscow'].distance) def test_set_cities_distances_names(self): cities = ['Leeds', 'Atlanta', 'Moscow'] self.pg.set_cities_distances_names(cities) self.assertEqual(1, self.pg.city_map['London'].distance) self.assertEqual(0, self.pg.city_map['Moscow'].distance) def test_set_lab_distances(self): for i in range(21): self.pg.draw_card(self.player1) self.player1.set_location('London') self.pg.start_turn(self.player1) self.assertTrue(self.player1.build_lab()) self.player1.set_location('New York') self.pg.draw_card(self.player1) self.assertTrue(self.player1.build_lab()) self.player1.set_location('Jinan') self.pg.set_lab_distances() self.assertEqual(0, self.pg.city_map['London'].distance) self.assertEqual(1, self.pg.city_map['Moscow'].distance) self.assertEqual(3, self.player1.get_distance_from_lab())