public void FourPlayerAllPlayersPlaceWorkers_PlacementReturnsToFirstPlayer()
        {
            var game = new Game(NumberOfPlayers.Four);
            var firstPlayer = game.CurrentTurnPlayer;

            game.PlaceWorkers();
            game.PlaceWorkers();
            game.PlaceWorkers();
            game.PlaceWorkers();
            game.CurrentTurnPlayer.Should().BeOfType<Player>();
            game.CurrentTurnPlayer.Should().Be(firstPlayer);
            game.CurrentPhase.Should().Be(Phase.Placement);
        }
        public void AllWorkersPlaced_GameMovesToActionPhase()
        {
            var game = new Game(NumberOfPlayers.Two);
            var firstPlayer = game.CurrentTurnPlayer;

            while (game.Players.Any(p => p.IdleWorkers > 0)) {
                game.PlaceWorkers();
            }

            game.CurrentPhase.Should().Be(Phase.Action);
            game.CurrentTurnPlayer.Should().Be(firstPlayer);
        }
        public void ActionTaken_IncreasesIdleWorkerCount()
        {
            var game = new Game(NumberOfPlayers.Two);

            // take game through Placement phase
            while (game.Players.Any(p => p.IdleWorkers > 0)) {
                game.PlaceWorkers();
            }

            int startsWith = game.CurrentTurnPlayer.IdleWorkers;
            game.ResolveAction();
            game.CurrentTurnPlayer.IdleWorkers.Should().BeGreaterThan(startsWith);
        }
        public void AllActionsTaken_GameMovesToFeedPhase()
        {
            var game = new Game(NumberOfPlayers.Two);

            // take game through Placement phase
            while (game.Players.Any(p => p.IdleWorkers > 0)) {
                game.PlaceWorkers();
            }

            while (game.Players.Any(p => p.AreAnyWorkersPlaced)) {
                game.ResolveAction();
            }

            game.CurrentTurnPlayer.Should().Be(game.StartPlayer);
            game.CurrentPhase.Should().Be(Phase.Feed);
        }
        public void PlayerWorkersPlaced_IdleWorkerCountDecreases()
        {
            var game        = new Game(NumberOfPlayers.Two);
            var firstPlayer = game.CurrentTurnPlayer;
            int initCount   = firstPlayer.IdleWorkers;

            game.PlaceWorkers();
            firstPlayer.IdleWorkers.Should().BeLessThan(initCount);
        }
        public void PlayerTakesAllActions_NextPlayersTurn()
        {
            var game = new Game(NumberOfPlayers.Two);

            // take game through Placement phase
            while (game.Players.Any(p => p.IdleWorkers > 0)) {
                game.PlaceWorkers();
            }

            var initialPlayer = game.CurrentTurnPlayer;

            while (initialPlayer.AreAnyWorkersPlaced) {
                game.ResolveAction();
            }

            game.CurrentTurnPlayer.Should().NotBe(initialPlayer);
        }
        public void PlayerPlacesWorkers_TurnGoesToNextPlayer()
        {
            var game = new Game(NumberOfPlayers.Two);
            var firstPlayer = game.CurrentTurnPlayer;

            game.PlaceWorkers();
            game.CurrentTurnPlayer.Should().BeOfType<Player>();
            game.CurrentTurnPlayer.Should().NotBe(firstPlayer);
            game.CurrentPhase.Should().Be(Phase.Placement);
        }