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); }
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; }
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; }