public void DrawFromDeck_Fail_if_validation_of_PlayerCanDrawFromDeck_fails()
        {
            // Arrange
            var player1HandPile = _player1.GetHandPile();

            _shitheadMoveValidator.PlayerCanDrawFromDeck(Arg.Any <Game>(), Arg.Any <Player>()).Returns("Cannot draw validation error");

            // Act
            Assert.Empty(_deckPile.Cards);
            Assert.Empty(player1HandPile.Cards);
            var exception = Assert.Throws <DomainException>(() => _shitheadPileLogic.DrawFromDeck(_player1));

            // Assert
            Assert.Equal("Cannot draw validation error", exception.Message);
        }
        public void DrawFromDeck(Player player)
        {
            var game = player.Game;
            var canDrawValidation = _shitheadMoveValidator.PlayerCanDrawFromDeck(game, player);

            if (canDrawValidation != null)
            {
                throw new DomainException(DomainErrorCode.BadRequest, canDrawValidation);
            }

            var playerHandPile = player.GetHandPile();
            var deckPile       = game.GetDeckPile();

            var deckCard = deckPile.Cards.FirstOrDefault();

            if (deckCard == null)
            {
                throw new DomainException(DomainErrorCode.InconsistentData, string.Format(Resources.Deck_is_empty__cannot_draw_card_for_game__0_, game.Id));
            }

            deckPile.Cards.Remove(deckCard);
            playerHandPile.Cards.Add(deckCard);
        }