Coverage for tests / test_core / test_deck.py: 100.0%

50 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-05 20:45 +0000

1import pytest 

2 

3from beaverbunch.core.card import Card, Suit 

4 

5 

6def _card(value: int, suit: Suit = Suit.HEARTS) -> Card: 

7 if value == 0: 

8 return Card(suit=None, value=0) 

9 return Card(suit=suit, value=value) 

10 

11 

12class TestCard: 

13 def test_card_points(self): 

14 assert _card(1).points == 1 # Ace 

15 assert _card(10).points == 0 # Ten 

16 assert _card(11).points == 10 # Jack 

17 assert _card(12).points == 10 # Queen 

18 assert _card(13).points == 10 # King 

19 assert _card(5).points == 5 # Standard card 

20 assert _card(0).points == 50 # Joker 

21 

22 def test_post_init_validations(self): 

23 with pytest.raises(ValueError): 

24 Card(suit=Suit.CLUBS, value=0) # Joker with suit 

25 with pytest.raises(ValueError): 

26 Card(suit=None, value=5) # Non-joker without suit 

27 with pytest.raises(TypeError): 

28 Card(suit="Diamonds", value=5) # Invalid value type 

29 with pytest.raises(TypeError): 

30 Card(suit=Suit.SPADES, value="Ace") # Invalid value type 

31 with pytest.raises(ValueError): 

32 Card(suit=Suit.HEARTS, value=14) # Invalid card value 

33 

34 

35class TestDeck: 

36 def test_create_new_deck(self): 

37 from beaverbunch.core.deck import Deck 

38 

39 deck = Deck.create_new() 

40 assert len(deck) == 54 # 52 standard cards + 2 jokers 

41 

42 def test_draw_card(self): 

43 from beaverbunch.core.deck import Deck 

44 

45 deck = Deck.create_custom(cards=[_card(1), _card(10), _card(0)]) 

46 card1 = deck.draw() 

47 assert card1.value == 0 

48 assert len(deck) == 2 

49 

50 def test_draw_multiple_cards(self): 

51 from beaverbunch.core.deck import Deck 

52 

53 deck = Deck.create_custom(cards=[_card(1), _card(10), _card(0)]) 

54 cards = deck.draw(n=2) 

55 assert len(cards) == 2 

56 assert cards[0].value == 0 

57 assert cards[1].value == 10 

58 assert len(deck) == 1 

59 

60 def test_draw_from_empty_deck(self): 

61 from beaverbunch.core.deck import Deck 

62 

63 deck = Deck.create_custom(cards=[]) 

64 with pytest.raises(IndexError): 

65 deck.draw()