def create_deck(game_title, data): deck = Deck('Starter Deck') for item in data[game_title]: if item['color'] not in Card.valid_colors: raise ValueError(f"Invalid color '{item['color']}' in " f"'{game_title} : {item['name']}'") else: card = Card(item['name'], item['color']) for i in range(item['count']): deck.add(card) return deck
def epidemic(self, card): """Draw a card from the bottom of the Draw Deck, discard it and shuffle the discard pile back onto the top of the Draw Deck.""" new_card = self.deck['draw'].get_card_from_bottom(card) self.deck['draw'].remove_from_bottom(new_card) self.deck['discard'].add(new_card) self.epidemic_count += 1 # Create new card pool new_cards = Deck(f'Epidemic #{self.epidemic_count}') for card in self.deck['discard'].cards.copy(): new_cards.add(card) self.deck['draw'].add(new_cards) # Clear the discard pile self.deck['discard'].clear() self.log.log(f'<b>Epidemic #{self.epidemic_count} ({new_card.name})\ shuffled</b>')
class TestDeck(TestCase): def setUp(self): self.card1 = Card('Card A', 'black') self.card2 = Card('Card B', 'blue') self.card3 = Card('Card C', 'red') self.deck = Deck('discard') def tearDown(self): self.card1 = None self.card2 = None self.deck = None def test__len__(self): self.deck.add(self.card1) self.assertEqual(len(self.deck), 1) self.deck.add(self.card2) self.assertEqual(len(self.deck), 2) def test__iter__(self): self.deck.add(self.card1) self.deck.add(self.card2) i = 0 for card in self.deck: i += 1 self.assertEqual(i, 2) def test_instantiation_parameters(self): with self.assertRaises(ValueError): self.deck = Deck(0) def test_adding_card_to_deck(self): self.deck.add(self.card1) self.assertIn(self.card1, self.deck) def test_removing_card_from_a_deck(self): with self.assertRaises(ValueError): # Check removal from empty deck self.deck.remove(self.card1) self.deck.add(self.card1) self.deck.remove(self.card1) self.assertNotIn(self.card1, self.deck) def test_moving_card_to_a_deck(self): deck2 = Deck('exclude') self.deck.add(self.card1) self.deck.move(self.card1, deck2) self.assertNotIn(self.card1, self.deck) self.assertIn(self.card1, deck2) def test_clear_a_deck_and_check_if_empty(self): self.deck.add(self.card1) self.deck.clear() self.assertTrue(self.deck.is_empty()) def test_deck_has_no_parent(self): self.assertFalse(self.deck.has_parent()) def test_get_sorted_deck(self): self.deck.add(self.card2) self.deck.add(self.card1) self.deck.add(self.card3) self.assertEqual(self.deck.cards[0], self.card2) sorted = self.deck.sorted() self.assertEqual(sorted[0], self.card1) self.assertEqual(sorted[1], self.card2) self.assertEqual(sorted[2], self.card3)