public void BuyDevelopmentCard_GotResources_DevelopmentCardPurchasedEventIsRaised() { // Arrange var knightDevelopmentCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(this.CreateMockOneCardDevelopmentCardHolder(knightDevelopmentCard)); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); var localGameController = testInstances.LocalGameController; GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; DevelopmentCard purchaseddDevelopmentCard = null; localGameController.DevelopmentCardPurchasedEvent = (DevelopmentCard d) => { purchaseddDevelopmentCard = d; }; localGameController.StartGamePlay(); // Act localGameController.BuyDevelopmentCard(turnToken); // Assert purchaseddDevelopmentCard.ShouldNotBeNull(); purchaseddDevelopmentCard.ShouldBeSameAs(knightDevelopmentCard); errorDetails.ShouldBeNull(); }
public void UseKnightCard_IdParameterDoesNotMatchWithAnyPlayerOnHex_MeaningfulErrorIsReceived() { // Arrange var knightCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard); var localGameController = testInstances.LocalGameController; testInstances.Dice.AddSequence(new uint[] { 8, 8, 8, 8 }); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; localGameController.StartGamePlay(); // Buy the knight cards localGameController.BuyDevelopmentCard(turnToken); localGameController.EndTurn(turnToken); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, knightCard, HexWithTwoPlayerSettlements, testInstances.MainPlayer.Id); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Player Id (" + testInstances.MainPlayer.Id + ") does not match with any players on hex " + HexWithTwoPlayerSettlements + "."); }
public void UseKnightCard_UseKnightDevelopmentCardMoreThanOnce_MeaningfulErrorIsReceived() { // Arrange var knightCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard); var localGameController = testInstances.LocalGameController; testInstances.Dice.AddSequenceWithRepeatingRoll(null, 6); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; localGameController.StartGamePlay(); // Buy the knight cards localGameController.BuyDevelopmentCard(turnToken); localGameController.EndTurn(turnToken); // Play one knight card each turn for the next two turns localGameController.UseKnightCard(turnToken, knightCard, 3); localGameController.EndTurn(turnToken); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, knightCard, 0); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Cannot play the same development card more than once."); }
public void UseKnightCard_UseKnightDevelopmentCardAndTryToMoveRobberToSameSpot_MeaningfulErrorIsReceived() { // Arrange var knightCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard); var localGameController = testInstances.LocalGameController; testInstances.Dice.AddSequenceWithRepeatingRoll(null, 6); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; DevelopmentCard purchasedDevelopmentCard = null; localGameController.DevelopmentCardPurchasedEvent = (DevelopmentCard d) => { purchasedDevelopmentCard = d; }; localGameController.StartGamePlay(); localGameController.BuyDevelopmentCard(turnToken); localGameController.EndTurn(turnToken); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, (KnightDevelopmentCard)purchasedDevelopmentCard, 0); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Cannot place robber back on present hex (0)."); }
public void UseKnightCard_UseCardPurchasedInSameTurn_MeaningfulErrorIsReceived() { // Arrange var knightCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard); var localGameController = testInstances.LocalGameController; testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; DevelopmentCard purchasedDevelopmentCard = null; localGameController.DevelopmentCardPurchasedEvent = (DevelopmentCard d) => { purchasedDevelopmentCard = d; }; localGameController.StartGamePlay(); localGameController.BuyDevelopmentCard(turnToken); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, (KnightDevelopmentCard)purchasedDevelopmentCard, 0); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Cannot use development card that has been purchased this turn."); }
public void UseKnightCard_NewRobberHexIsOutOfBounds_MeaningfulErrorIsReceived() { // Arrange var knightCard = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard); var localGameController = testInstances.LocalGameController; testInstances.Dice.AddSequence(new uint[] { 8, 8, 8, 8 }); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; DevelopmentCard purchasedDevelopmentCard = null; localGameController.DevelopmentCardPurchasedEvent = (DevelopmentCard d) => { purchasedDevelopmentCard = d; }; localGameController.StartGamePlay(); localGameController.BuyDevelopmentCard(turnToken); localGameController.EndTurn(turnToken); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, (KnightDevelopmentCard)purchasedDevelopmentCard, GameBoards.GameBoard.StandardBoardHexCount); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Cannot move robber to hex 19 because it is out of bounds (0.. 18)."); }
public void AddDevelopmentCard(DevelopmentCardTypes developmentCardType) { DevelopmentCard developmentCard = null; switch (developmentCardType) { case DevelopmentCardTypes.Knight: developmentCard = new KnightDevelopmentCard(); break; case DevelopmentCardTypes.Monopoly: developmentCard = new MonopolyDevelopmentCard(); break; case DevelopmentCardTypes.RoadBuilding: developmentCard = new RoadBuildingDevelopmentCard(); break; case DevelopmentCardTypes.YearOfPlenty: developmentCard = new YearOfPlentyDevelopmentCard(); break; default: throw new NotImplementedException($"Development card type {developmentCardType} not recognised"); } this.developmentCards.Enqueue(developmentCard); }
private void Initialise(IIndexSequence random) { this.cards = new Queue <DevelopmentCard>(); var victoryPointCardTitles = new Queue <string>(new[] { "Chapel", "Great Hall", "Library", "Market", "University" }); var index = -1; while (random.TryGetNextIndex(out index)) { if (index < KnightCardCount) { var card = new KnightDevelopmentCard(); this.cards.Enqueue(card); } else if (index < (KnightCardCount + MonopolyCardCount)) { var card = new MonopolyDevelopmentCard(); this.cards.Enqueue(card); } else if (index < (KnightCardCount + MonopolyCardCount + RoadBuildingCardCount)) { var card = new RoadBuildingDevelopmentCard(); this.cards.Enqueue(card); } else if (index < (KnightCardCount + MonopolyCardCount + RoadBuildingCardCount + YearOfPlentyCardCount)) { var card = new YearOfPlentyDevelopmentCard(); this.cards.Enqueue(card); } else if (index < (KnightCardCount + MonopolyCardCount + RoadBuildingCardCount + YearOfPlentyCardCount + VictoryPointCardCount)) { var title = victoryPointCardTitles.Dequeue(); var card = new VictoryPointDevelopmentCard(title); this.cards.Enqueue(card); } } }
public void UseKnightCard_UseMoreThanOneKnightDevelopmentCardInSingleTurn_MeaningfulErrorIsReceived() { // Arrange var knightCard1 = new KnightDevelopmentCard(); var knightCard2 = new KnightDevelopmentCard(); var testInstances = this.TestSetup(knightCard1, knightCard2); var localGameController = testInstances.LocalGameController; testInstances.Dice.AddSequenceWithRepeatingRoll(null, 6); testInstances.MainPlayer.AddResources(ResourceClutch.DevelopmentCard * 2); GameToken turnToken = null; localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; }; var purchasedDevelopmentCards = new Queue <DevelopmentCard>(); localGameController.DevelopmentCardPurchasedEvent = (DevelopmentCard d) => { purchasedDevelopmentCards.Enqueue(d); }; localGameController.StartGamePlay(); localGameController.BuyDevelopmentCard(turnToken); localGameController.BuyDevelopmentCard(turnToken); localGameController.EndTurn(turnToken); localGameController.UseKnightCard(turnToken, (KnightDevelopmentCard)purchasedDevelopmentCards.Dequeue(), 3); ErrorDetails errorDetails = null; localGameController.ErrorRaisedEvent = (ErrorDetails e) => { errorDetails = e; }; // Act localGameController.UseKnightCard(turnToken, (KnightDevelopmentCard)purchasedDevelopmentCards.Dequeue(), 0); // Assert errorDetails.ShouldNotBeNull(); errorDetails.Message.ShouldBe("Cannot play more than one development card in a turn."); }