public void DontBeliveMoveTest()
        {
            var players   = ProvideGameTablePlayers(3);
            var cardsPack = new CardsPack36();
            var game      = new Game(cardsPack, players);

            game.Start();

            var mover      = game.Players.First(p => p.Player.Id == game.CurrentMover.Id);
            var cardsCount = mover.Cards.Count;

            game.MakeFirstMove(new FirstMove(mover.Cards.Take(4).ToList(), PlayingCardRank.Ten, mover.Player.Id));

            var previousMover = game.Players.First(p => p.Player.Id == game.CurrentMover.Id);

            cardsCount = previousMover.Cards.Count;

            var cards = previousMover.Cards.Take(3).ToList();

            game.MakeBeleiveMove(new BelieveMove(cards, previousMover.Player.Id));

            mover      = game.Players.First(p => p.Player.Id == game.CurrentMover.Id);
            cardsCount = mover.Cards.Count;

            game.MakeDontBeleiveMove(new DontBelieveMove(cards.First().Id, mover.Player.Id), out var takedLoserCards, out Guid loserId);

            if (cards.First().Rank == PlayingCardRank.Ten)
            {
                Assert.Equal(mover.Player.Id, loserId);
            }
            else
            {
                Assert.Equal(previousMover.Player.Id, loserId);
            }
        }
        public void CreateGameTest()
        {
            var players   = ProvideGameTablePlayers(3);
            var cardsPack = new CardsPack36();
            var game      = new Game(cardsPack, players);

            Assert.NotEmpty(game.Players);
            Assert.False(game.IsStarted);
            Assert.False(game.IsEnded);
            Assert.Null(game.CurrentRound);
            Assert.Null(game.CurrentMover);
        }
        public void CreateCardPackTest()
        {
            CardsPack cardsPack = new CardsPack36();

            Assert.Equal(36, cardsPack.Count());

            cardsPack = new CardsPack52();
            Assert.Equal(52, cardsPack.Count());

            var cards = cardsPack.TakeMany(cardsPack.Count());

            Assert.NotNull(cards);
            Assert.NotEmpty(cards);
            // Есть ли карты с одинаковыми идентификаторами
            Assert.Empty(cards.GroupBy(c => c.Id).Where(g => g.Count() > 1));
        }
        public void FirstMoveTest()
        {
            var players   = ProvideGameTablePlayers(3);
            var cardsPack = new CardsPack36();
            var game      = new Game(cardsPack, players);

            game.Start();

            var mover      = game.Players.First(p => p.Player.Id == game.CurrentMover.Id);
            var cardsCount = mover.Cards.Count;

            game.MakeFirstMove(new FirstMove(mover.Cards.Take(4).ToList(), PlayingCardRank.Ten, mover.Player.Id));

            Assert.Equal(cardsCount - 4, mover.Cards.Count);
            Assert.NotEqual(mover.Player.Id, game.CurrentMover.Id);
            Assert.Throws <TrueFalseGameException>(() => { game.MakeFirstMove(new FirstMove(mover.Cards.Take(4).ToList(), PlayingCardRank.Ten, game.CurrentMover.Id)); });
        }
        public void StartGameTest()
        {
            var players   = ProvideGameTablePlayers(3);
            var cardsPack = new CardsPack36();
            var game      = new Game(cardsPack, players);

            game.Start();

            Assert.True(game.IsStarted);
            Assert.False(game.IsEnded);
            Assert.NotNull(game.CurrentMover);
            Assert.NotNull(game.CurrentRound);

            var mover = game.Players.First(p => p.Priority == game.Players.Min(pp => pp.Priority));

            Assert.Equal(mover.Player.Id, game.CurrentMover.Id);

            foreach (var player in game.Players)
            {
                Assert.NotEmpty(player.Cards);
            }
        }