public void WhenMoveIsNotPromotionReturnFalse()
        {
            var movementHistoryMock = new Mock <IMovementHistory>(MockBehavior.Strict);
            var piecesMock          = new Mock <IEnumerable <IChessPiece> >(MockBehavior.Strict);

            var notPromotionMove = new ChessMove(new Position(0, 1), new Position(0, 3));

            var piecePromoter = new PiecePromoter(movementHistoryMock.Object);

            var result = piecePromoter
                         .PromoteIfPromotionMove(notPromotionMove, piecesMock.Object);

            Assert.IsFalse(result);
        }
        public void WhenMoveIsPromotionPromotePawnAndReturnTrue()
        {
            var movementHistoryMock = new Mock <IMovementHistory>(MockBehavior.Strict);
            var promotedPawn        = new Mock <IChessPiece>(MockBehavior.Strict);

            var promoteType = ChessPieceType.Queen;

            var promotionMove = new ChessMove(new Position(0, 0), new Position(0, 0),
                                              pawnPromotion: promoteType);

            var pawnPosition = new Position(3, 0);

            var moves = new List <ChessMove>()
            {
                new ChessMove(new Position(0, 1), new Position(0, 3)),
                new ChessMove(new Position(3, 1), pawnPosition),
            };

            promotedPawn
            .SetupGet(p => p.Position)
            .Returns(pawnPosition);
            promotedPawn
            .Setup(p => p.Promote(promoteType));

            movementHistoryMock
            .SetupGet(h => h.ChessMoves)
            .Returns(moves);
            movementHistoryMock
            .Setup(h => h.Add(promotionMove));

            var piecePromoter = new PiecePromoter(movementHistoryMock.Object);

            var pieces = new List <IChessPiece>()
            {
                promotedPawn.Object
            };
            var result = piecePromoter
                         .PromoteIfPromotionMove(promotionMove, pieces);

            Assert.IsTrue(result);
            promotedPawn
            .Verify(p => p.Promote(promoteType));
            movementHistoryMock
            .Verify(h => h.Add(promotionMove));
        }