// // CasinoKitTests.swift // CasinoKit // // Unit tests for CasinoKit components. // import Testing @testable import CasinoKit @Suite("Card Tests") struct CardTests { @Test("Standard deck has 52 cards") func standardDeckSize() { let deck = Deck() #expect(deck.cardsRemaining == 52) } @Test("Multi-deck shoe has correct count") func multiDeckSize() { let shoe = Deck(deckCount: 8) #expect(shoe.cardsRemaining == 416) } @Test("Drawing reduces card count") func drawingCards() { var deck = Deck() _ = deck.draw() #expect(deck.cardsRemaining == 51) _ = deck.draw(5) #expect(deck.cardsRemaining == 46) } @Test("Reset restores all cards") func resetDeck() { var deck = Deck() _ = deck.draw(20) deck.reset() #expect(deck.cardsRemaining == 52) } // Game-specific card value tests have been moved to the respective app test targets // (BlackjackTests and BaccaratTests) since the value extensions are now in the apps. @Test("Card display format is correct") func cardDisplay() { let card = Card(suit: .hearts, rank: .ace) #expect(card.display == "A♥") let king = Card(suit: .spades, rank: .king) #expect(king.display == "K♠") } } @Suite("Chip Tests") struct ChipTests { @Test("Chip display text is correct") func chipDisplayText() { #expect(ChipDenomination.ten.displayText == "10") #expect(ChipDenomination.hundred.displayText == "100") #expect(ChipDenomination.thousand.displayText == "1K") #expect(ChipDenomination.hundredThousand.displayText == "100K") } @Test("Chip unlock thresholds are correct") func chipUnlockBalance() { // Basic chips always available #expect(ChipDenomination.ten.isUnlocked(forBalance: 0)) #expect(ChipDenomination.hundred.isUnlocked(forBalance: 0)) // Higher chips need balance #expect(!ChipDenomination.fiveHundred.isUnlocked(forBalance: 100)) #expect(ChipDenomination.fiveHundred.isUnlocked(forBalance: 500)) } @Test("Available chips filter correctly") func availableChipsForBalance() { let lowBalance = ChipDenomination.availableChips(forBalance: 100) #expect(lowBalance.count == 4) // 10, 25, 50, 100 let highBalance = ChipDenomination.availableChips(forBalance: 100_000) #expect(highBalance.count == 11) // All chips } } @Suite("Theme Tests") struct ThemeTests { @Test("Default theme provides chip colors") func defaultThemeChipColors() { let theme = DefaultCasinoTheme() let colors = theme.chipColors(for: .hundred) #expect(colors.primary != colors.secondary) } @Test("All denominations have chip colors") func allDenominationsHaveColors() { let theme = DefaultCasinoTheme() for denomination in ChipDenomination.allCases { let colors = theme.chipColors(for: denomination) // Just verify it doesn't crash and returns valid colors #expect(colors.stripe.description.count > 0) } } }