public void CanPlayCardsOnPile_Invalid_when_card_is_lower_than_pile()
        {
            // Arrange
            var config = new ShitheadGameConfig {
                Joker = 15, Reset = 2, Invisible = 3, Reverse = 7, Burn = 10, Skip = 15
            };
            var  shitheadMoveValidator = new ShitheadMoveValidator();
            Pile pile = new Pile(null, PileType.Deck, "")
            {
                Cards = new List <Card>
                {
                    new Card(null, CardSuit.Clubs, 14),
                },
            };
            var cardsToPlay = new List <Card>
            {
                new Card(null, CardSuit.Clubs, 5)
            };

            // Act
            var result = shitheadMoveValidator.CanPlayCardsOnPile(config, pile, cardsToPlay);

            // Assert
            var expectedValidationResult = string.Format(Resources.Card__0__is_not_higher_or_equal_to_card__1_, cardsToPlay.First(), pile.Cards.First());

            Assert.Equal(expectedValidationResult, result);
        }
        public void CanPlayCardsOnPile_Valid_when_card_can_be_played_on_anything(int cardToPlayValue)
        {
            // Arrange
            var config = new ShitheadGameConfig {
                Joker = 15, Reset = 2, Invisible = 3, Reverse = 7, Burn = 10, Skip = 15
            };
            var  shitheadMoveValidator = new ShitheadMoveValidator();
            Pile pile = new Pile(null, PileType.Deck, "")
            {
                Cards = new List <Card>
                {
                    new Card(null, CardSuit.Clubs, 14)
                },
            };
            var cardsToPlay = new List <Card>
            {
                new Card(null, CardSuit.Clubs, cardToPlayValue)
            };

            // Act
            var result = shitheadMoveValidator.CanPlayCardsOnPile(config, pile, cardsToPlay);

            // Assert
            Assert.Null(result);
        }
        public void CanPlayCardsOnPile_Valid_when_pile_empty()
        {
            // Arrange
            var  shitheadMoveValidator = new ShitheadMoveValidator();
            Pile pile = new Pile(null, PileType.Deck, "");

            // Act
            var result = shitheadMoveValidator.CanPlayCardsOnPile(null, pile, null);

            // Assert
            Assert.Null(result);
        }
        public void PlayerCanDrawFromDeck_Valid_when_same_player_but_id_casing_differs()
        {
            // Arrange
            var    shitheadMoveValidator = new ShitheadMoveValidator();
            Player player = new Player(null)
            {
                Id = Guid.Parse("83B48D11-2243-42DB-88AC-BE1DE09B82CC")
            };
            Game game = new Game(string.Empty, string.Empty)
            {
                State = "83B48D11-2243-42db-88AC-be1de09b82cc"
            };

            // Act
            var result = shitheadMoveValidator.PlayerCanDrawFromDeck(game, player);

            // Assert
            Assert.Null(result);
        }
        public void PlayerCanDrawFromDeck_Valid_when_same_player()
        {
            // Arrange
            var    shitheadMoveValidator = new ShitheadMoveValidator();
            Player player = new Player(null)
            {
                Id = Guid.NewGuid()
            };
            Game game = new Game(string.Empty, string.Empty)
            {
                State = player.Id.ToString()
            };

            // Act
            var result = shitheadMoveValidator.PlayerCanDrawFromDeck(game, player);

            // Assert
            Assert.Null(result);
        }
        public void PlayerCanDrawFromDeck_Invalid_if_another_players_turn()
        {
            // Arrange
            var  shitheadMoveValidator = new ShitheadMoveValidator();
            Game game = new Game(string.Empty, string.Empty)
            {
                State = "game-state"
            };
            Player player = new Player(null)
            {
                Id = Guid.Parse("83B48D11-2243-42DB-88AC-BE1DE09B82CC")
            };

            // Act
            var result = shitheadMoveValidator.PlayerCanDrawFromDeck(game, player);

            // Assert
            Assert.Equal(string.Format(Resources.It_is_another_player_s_turn__not_player__0_, player.Id.ToString()), result);
        }
        public void CanPlayCardsOnPile_Valid_when_pile_has_only_NonValue_cards(int[] nonValueCards, int cardToPlayValue)
        {
            // Arrange
            var config = new ShitheadGameConfig {
                Joker = 15, Reset = 2, Invisible = 3, Reverse = 7, Burn = 10, Skip = 15
            };
            var  shitheadMoveValidator = new ShitheadMoveValidator();
            Pile pile = new Pile(null, PileType.Deck, "")
            {
                Cards = nonValueCards.Select(v => new Card(null, CardSuit.Clubs, v)).ToList(),
            };
            var cardsToPlay = new List <Card>
            {
                new Card(null, CardSuit.Clubs, cardToPlayValue)
            };

            // Act
            var result = shitheadMoveValidator.CanPlayCardsOnPile(config, pile, cardsToPlay);

            // Assert
            Assert.Null(result);
        }