def test_GivenAPileWithCards_WhenACardFaceDownAskIfFits_ReturnFalse(self): cardCandidate = CardBuilder().suit(Suit.DIAMONDS).number( Number.QUEEN).build() cardInPile = CardBuilder().suit(Suit.CLOVERS).number( Number.KING).faceUp().build() pile = PileBuilder().card(cardInPile).build() self.assertFalse(pile.isFittingIn(cardCandidate))
def test_GivenAPileWithAColor_WhenSameColorAskIfFits_ReturnFalse(self): cardCandidate = CardBuilder().suit(Suit.HEARTS).number( Number.QUEEN).faceUp().build() cardInPile = CardBuilder().suit(Suit.DIAMONDS).number( Number.KING).faceUp().build() pile = PileBuilder().card(cardInPile).build() self.assertFalse(pile.isFittingIn(cardCandidate))
def test_GivenAGame_WhenMoveFromFoundationToPile_ThenCardIsMoved(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.KING).faceUp().build() cardLeft = CardBuilder().suit(Suit.PIKES).number(Number.QUEEN).faceUp().build() game = GameBuilder().pileEmpty(pileNumber).foundationComplete(Suit.PIKES).build() self.assertIsNone(game.moveFromFoundationToPile(Suit.PIKES, pileNumber)) self.assertEqual(game.getPiles()[pileNumber-1].getTop(), cardToMove) self.assertEqual(game.getFoundations()[Suit.PIKES].getTop(), cardLeft)
def test_GivenAPileWithCards_WhengetTopWitlessCards_ThenTheRequestedNumberisReturned( self): card = CardBuilder().build() otherCard = CardBuilder().suit(Suit.HEARTS).build() topCard = CardBuilder().suit(Suit.DIAMONDS).build() returnedCards = PileBuilder().card(card).card(otherCard).card( topCard).build().getTop(2) self.assertListEqual(returnedCards, [otherCard, topCard])
def test_GivenNotEmtpyPile_WhenaddToTop_CardsAreAdded(self): card = CardBuilder().faceUp().build() otherCard = CardBuilder().suit(Suit.HEARTS).faceUp().build() topCard = CardBuilder().suit(Suit.DIAMONDS).faceUp().build() cards = [otherCard, topCard] pile = PileBuilder().card(card).build() pile.addToTop(cards) self.assertEqual(pile.getTop(3), [card, otherCard, topCard])
def test_GivenAPileWithCards_WhengetTopWithMoreCards_ThenAllArereturned( self): card = CardBuilder().build() otherCard = CardBuilder().suit(Suit.HEARTS).build() topCard = CardBuilder().suit(Suit.DIAMONDS).build() returnedCards = PileBuilder().card(card).card(otherCard).card( topCard).build().getTop(4) self.assertEqual(returnedCards, [card, otherCard, topCard])
def test_GivenPile_WhenaddToTopFaceDown_ThenException(self): card = CardBuilder().faceUp().build() otherCard = CardBuilder().suit(Suit.HEARTS).build() topCard = CardBuilder().suit(Suit.DIAMONDS).faceUp().build() cards = [otherCard, topCard] pile = PileBuilder().card(card).build() with self.assertRaises(InvalidCard) as context: pile.addToTop(cards)
def test_GivenNotEmtpy_WhenremoveTop_CardsAreRemoved(self): card = CardBuilder().build() otherCard = CardBuilder().suit(Suit.HEARTS).build() topCard = CardBuilder().suit(Suit.DIAMONDS).build() cards = [card, otherCard, topCard] pile = PileBuilder().card(card).card(otherCard).card(topCard).build() pile.removeTop(2) self.assertEqual(pile.getTop(3), [card])
def test_GivenAGame_WhenMoveFromWasteToPile_ThenCardIsMoved(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.ACE).faceUp().build() cardInPile = CardBuilder().suit(Suit.HEARTS).number(Number.TWO).faceUp().build() game = GameBuilder().cardInWaste(cardToMove).cardInPile(pileNumber, cardInPile).build() self.assertIsNone(game.moveFromWasteToPile(pileNumber)) self.assertTrue(game.getWaste().isEmpty()) self.assertEqual(game.getPiles()[pileNumber-1].getTop(), cardToMove)
def test_GivenAGame_WhenMoveFromPileToFoundation_ThenError(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.ACE).faceUp().build() game = GameBuilder()\ .cardInPile(pileNumber, CardBuilder().faceUp().build())\ .cardInPile(pileNumber, cardToMove)\ .build() self.assertEqual( game.moveFromPileToFoundation(pileNumber, Suit.HEARTS), Error.NO_FIT_FOUNDATION)
def test_GivenNotEmtpyPile_WhenremoveTop_TopCardisFaceDown(self): card = CardBuilder().build() otherCard = CardBuilder().suit(Suit.HEARTS).build() topCard = CardBuilder().suit(Suit.DIAMONDS).build() cards = [card, otherCard, topCard] pile = PileBuilder().card(card).card(otherCard).card(topCard).build() pile.removeTop(2) returnedCard = pile.getTop(3)[0] self.assertFalse(returnedCard.isFaceUp())
def test_GivenAGame_WhenMoveFromPileToFoundation_ThenCardIsMoved(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.ACE).faceUp().build() game = GameBuilder()\ .cardInPile(pileNumber, CardBuilder().faceUp().build())\ .cardInPile(pileNumber, cardToMove)\ .build() self.assertIsNone(game.moveFromPileToFoundation(pileNumber, Suit.PIKES)) self.assertNotEqual(game.getPiles()[pileNumber-1].getTop(), cardToMove) self.assertEqual(game.getFoundations()[Suit.PIKES].getTop(), cardToMove) self.assertTrue(game.getPiles()[pileNumber-1].getTop().isFaceUp())
def cards(self, numberOfCards): for number in Number: card = CardBuilder().suit( self._suit).number(number).faceUp().build() self.card(card) if len(self._cards) == numberOfCards: return self return self
def wasteNotEmpty(self): cards = list() for suit, number in zip(Suit, Number): cards.append( CardBuilder().suit(suit).number(number).faceUp().build()) self._waste = Waste() for card in cards: self._waste.addToTop(card) return self
def test_GivenAMoveWithToManyCards_WhenMoveFromPileToPile_ThenError(self): pileNumberOrigin = 1 pileNumberDest = 7 nCardsMoved = 5 game = GameBuilder()\ .pileWithFaceUpCards(pileNumberOrigin)\ .cardInPile(pileNumberDest, CardBuilder().number(Number.ACE).faceUp().build()).build() self.assertEqual( game.moveFromPileToPile(pileNumberOrigin, pileNumberDest, nCardsMoved), Error.NO_ENOUGH_CARDS_PILE )
def test_GivenAMove_WhenMoveFromPileToSamePile_ThenError(self): pileNumberOrigin = 1 pileNumberDest = 1 nCardsMoved = 1 game = GameBuilder()\ .pileWithFaceUpCards(pileNumberOrigin)\ .cardInPile(pileNumberDest, CardBuilder().number(Number.ACE).faceUp().build()).build() self.assertEqual( game.moveFromPileToPile(pileNumberOrigin, pileNumberDest, nCardsMoved), Error.SAME_PILE )
def test_GivenNotemptyFoundation_whenCardthatFitsAskFitsIn_ReturnTrue( self): foundation = FoundationBuilder().suit(Suit.PIKES).cards(3).build() card = CardBuilder().suit(Suit.PIKES).number( Number.FOUR).faceUp().build() self.assertTrue(foundation.isFittingIn(card))
def test_GivenNotemptyFoundation_whenCardFaceDownAskFitsIn_ReturnFalse( self): foundation = FoundationBuilder().suit(Suit.PIKES).cards(3).build() card = CardBuilder().suit(Suit.PIKES).number(Number.FOUR).build() self.assertFalse(foundation.isFittingIn(card))
def stockNotEmpty(self): self._stock = Stock([CardBuilder().build()]) return self
def wasteWithAce(self, suit): card = CardBuilder().suit(suit).number(Number.ACE).build() self.cardInWaste(card) return self
def test_GivenAPileWithoutCards_WhenNumberOfFaceUpCards_ReturnZero(self): card = CardBuilder().faceUp().build() self.assertEqual(PileBuilder().build().getNumberOfFaceUpCards(), 0)
def test_GivenAGame_WhenMoveFromWasteToPileThatDontFit_ThenError(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.ACE).build() cardInPile = CardBuilder().suit(Suit.CLOVERS).number(Number.TWO).faceUp().build() game = GameBuilder().cardInWaste(cardToMove).cardInPile(pileNumber,cardInPile).build() self.assertEquals(game.moveFromWasteToPile(pileNumber), Error.NO_FIT_PILE)
def test_GivenAndNotEmptyPile_WhenIsEmptyCalled_ReturnFalse(self): card = CardBuilder().build() self.assertFalse(PileBuilder().card(card).build().isEmpty())
def test_GivenAEmptyPile_WhenNotKingAskIfFits_ReturnFalse(self): cardCK = CardBuilder().number(Number.QUEEN).faceUp().build() pile = PileBuilder().build() self.assertFalse(pile.isFittingIn(cardCK))
def test_GivenAEmptyPile_WhenKingAskIfFits_ReturnTrue(self): cardCK = CardBuilder().number(Number.KING).faceUp().build() pile = PileBuilder().build() self.assertTrue(pile.isFittingIn(cardCK))
def test_GivenAMoveThatDontFit_WhenMoveFromFoundationToPile_ThenError(self): pileNumber = 1 cardToMove = CardBuilder().suit(Suit.PIKES).number(Number.QUEEN).faceUp().build() game = GameBuilder().pileEmpty(pileNumber).foundationComplete(Suit.PIKES).build() game.moveFromFoundationToPile(Suit.PIKES, pileNumber) self.assertEqual(game.moveFromFoundationToPile(Suit.PIKES, pileNumber), Error.NO_FIT_PILE)
def test_GivenAemptyFoundation_whenAceofOtherSuitAsksFitsIn_ReturnFalse( self): foundation = FoundationBuilder().suit(Suit.CLOVERS).build() card = CardBuilder().suit(Suit.PIKES).number(Number.ACE).build() self.assertFalse(foundation.isFittingIn(card))
def test_GivenAemptyFoundation_whenNotAceAsksFitsIn_ReturnFalse(self): foundation = FoundationBuilder().suit(Suit.PIKES).build() card = CardBuilder().suit(Suit.PIKES).number( Number.TWO).faceUp().build() self.assertFalse(foundation.isFittingIn(card))
def test_GivenAWaste_whenPushFaceDown_ThenException(self): waste = WasteBuilder().build() with self.assertRaises(InvalidCard) as context: waste.addToTop(CardBuilder().build())
def test_GivenAPileWithCardsFaceUp_WhenNumberOfFaceUpCards_ReturnTheRightNumber( self): card = CardBuilder().faceUp().build() self.assertEqual( PileBuilder().card(card).build().getNumberOfFaceUpCards(), 1)