public void StartRound_DiscardableStateNull()
        {
            // Arrange
            var player1 = new PlayerState(Guid.Empty, null, null, outOfRound: true);
            IDiscardableTurnState              expected        = null;
            IEnumerable <IRoundPlayerState>    players         = new[] { player1, new PlayerState(Guid.Empty, null, null) };
            IShufflableCardState               shufflableCard  = new CardState(0, 0);
            IEnumerable <IShufflableCardState> shuffleableDeck = new[] { shufflableCard };
            IInitialRoundState initialRound = new RoundState(players, null, null, null, shufflableDeck: shuffleableDeck);

            var remainingPlayers = new List <IRoundPlayerState>();

            _roundFactory
            .Setup(rf => rf.CreateRemainingPlayers())
            .Returns(remainingPlayers);
            var removedFromRound = new List <ISetAsideCardState>();

            _roundFactory
            .Setup(rf => rf.CreateRemovedFromRound())
            .Returns(removedFromRound);

            IDrawableCardState drawableCardState = new CardState(0, 0);
            const int          cardSetAsideCount = 1;
            const int          turnDeckCount     = 1;
            int drawableCardCount = players.Count() + cardSetAsideCount + turnDeckCount;
            var drawableDeck      = Enumerable.Repeat(drawableCardState, drawableCardCount);

            _deckShuffleService
            .Setup(dss => dss.Shuffle(shuffleableDeck))
            .Returns(drawableDeck);

            IDiscardableCardState discardableCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.Draw(drawableCardState))
            .Returns(discardableCardState);
            ISetAsideCardState setAsideCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.SetAside(drawableCardState))
            .Returns(setAsideCardState);

            _deckRemovalService
            .Setup(drs => drs.GetCardsToRemoveCount(players.Count()))
            .Returns(cardSetAsideCount);

            IDrawableTurnState drawableTurnState = new TurnState(drawableCardState, player1);

            _turnStateFactory
            .Setup(tsf => tsf.CreateTurn(player1, drawableCardState))
            .Returns(drawableTurnState);

            // Act
            RoundStateFactory service = CreateService();
            var round  = service.StartRound(initialRound);
            var actual = round.DiscardableTurnState;

            // Assert
            Assert.AreEqual(expected, actual);
        }
示例#2
0
        public void Discard(IDiscardableTurnState turn,
                            IDiscardableCardState card,
                            ITargetablePlayerState targetPlayer = null)
        {
            turn.DiscardablePlayer.TurnHand.Remove(card);
            var discarded = _cardStateFactory.Discard(card);

            turn.DiscardablePlayer.TurnDiscard = discarded;
            turn.TargetPlayer = targetPlayer;
        }
示例#3
0
        public RoundState(IEnumerable <IRoundPlayerState> players,
                          IList <IRoundPlayerState> remainingPlayers,
                          IList <ISetAsideCardState> removedFromRound,
                          IList <IDrawableCardState> drawDeck,
                          int roundIndex = 0,
                          IRoundPlayerState winningPlayerState              = null,
                          IRoundPlayerState currentPlayerState              = null,
                          IDrawableTurnState drawableTurnState              = null,
                          IDiscardableTurnState discardableTurnState        = null,
                          IEnumerable <IShufflableCardState> shufflableDeck = null)
        {
            RoundIndex = roundIndex;
            var roundPlayers = players as IRoundPlayerState[] ?? players.ToArray();

            Players              = roundPlayers;
            RemainingPlayers     = remainingPlayers;
            WinningPlayerState   = winningPlayerState;
            CurrentPlayerState   = currentPlayerState;
            DrawableTurnState    = drawableTurnState;
            DiscardableTurnState = discardableTurnState;
            ShufflableDeck       = shufflableDeck;
            RemovedFromRound     = removedFromRound;
            DrawDeck             = drawDeck;
        }