public void CantBuyFromBankWithoutPlayer() { var board = new Mock<IBoard>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentNullException>(() => bank.BuyResource(MaterialType.Brick, MaterialType.Grain, null)); }
public void CantOfferInvalidResource(MaterialType material) { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentException>(() => bank.BuyResource(MaterialType.Grain, material, player.Object)); }
[InlineData(0, 4, 2, false, true, true)]//total 12 public void VerifyWinConditionTest(int settlements, int cities, int victoryCards, bool longestRoad, bool biggestArmy, bool expected) { var player = new Mock<IPlayer>(); player.Setup(p => p.Cards).Returns(CreateVictoryCards(victoryCards)); var board = new Mock<IBoard>(); board.Setup(b => b.GetEstablishments(player.Object)).Returns(CreateEstablishments(settlements, 1).Concat(CreateEstablishments(cities, 2))); var roadAchievement = CreateAchievement(longestRoad ? player.Object : new Mock<IPlayer>().Object); var armhyAchievement = CreateAchievement(biggestArmy ? player.Object : new Mock<IPlayer>().Object); var bank = new Bank(board.Object, new[] { roadAchievement, armhyAchievement }); bool result = bank.VerifyWinCondition(player.Object); Assert.Equal(expected, result); }
public void CantVerifyWinConditionOnNullPlayer() { var board = new Mock<IBoard>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentNullException>(() => bank.VerifyWinCondition(null)); }
public void UpdateAchievementUpdatesAllAchievements() { var board = new Mock<IBoard>(); var mocks = new[] { new Mock<IAchievement>(), new Mock<IAchievement>(), new Mock<IAchievement>() }; var achievements = mocks.Select(m => m.Object).ToList(); var bank = new Bank(board.Object, achievements); var player = new Mock<IPlayer>(); bank.UpdateAchievements(player.Object); foreach (var mock in mocks) mock.Verify(m => m.Update(player.Object)); }
public void UpdateAchievementsFailsIfPlayerNull() { var board = new Mock<IBoard>(); var mocks = new[] { new Mock<IAchievement>(), new Mock<IAchievement>(), new Mock<IAchievement>() }; var achievements = mocks.Select(m => m.Object).ToList(); var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentNullException>(() => bank.UpdateAchievements(null)); }
public void BuyCardFailsWhenNoMoreCardsLeft() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var turn = new Mock<ITurn>(); player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(true); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); for (int i = 0; i < 25; i++) { bank.BuyDevelopmentCard(player.Object, turn.Object); } Assert.Throws<InvalidOperationException>(() => bank.BuyDevelopmentCard(player.Object, turn.Object)); }
public void BuyResourceUsesCheapestHarbor() { var board = new Mock<IBoard>(); var resourceHarbor = new Mock<IHarbor>(); resourceHarbor.Setup(h => h.Discount).Returns(MaterialType.Wool); var unsourcedHarbor = new Mock<IHarbor>(); unsourcedHarbor.Setup(h => h.Discount).Returns(MaterialType.Unsourced); board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { unsourcedHarbor.Object, resourceHarbor.Object }); var player = new Mock<IPlayer>(); var offer = new MaterialType[] { MaterialType.Wool, MaterialType.Wool }; player.Setup(p => p.HasResources(offer)).Returns(true); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); bank.BuyResource(MaterialType.Ore, MaterialType.Wool, player.Object); player.Verify(p => p.TakeResources(offer), Times.Once); player.Verify(p => p.AddResources(It.Is<IRawMaterial>(r => r.Type == MaterialType.Ore))); }
public void BuyDevelopmentCardFailsIfPlayerHasNoResources() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var turn = new Mock<ITurn>(); player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(false); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<InvalidOperationException>(() => bank.BuyDevelopmentCard(player.Object, turn.Object)); }
public void BuyDevelopmentCantBeCalledWithoutPlayer(IPlayer player, ITurn turn) { var board = new Mock<IBoard>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentNullException>(() => bank.BuyDevelopmentCard(player, turn)); }
public void DifferentResourceHarborGetsIgnored() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); var harbor = new Mock<IHarbor>(); harbor.Setup(h => h.Discount).Returns(MaterialType.Wool); board.Setup(b => b.GetHarbors(player.Object)).Returns(new IHarbor[] { harbor.Object }); MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object); MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain, MaterialType.Grain, MaterialType.Grain }; Assert.Equal(expected, result); }
public void GetInvestmentCostUsesCheapestHarbor() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); var unsourcedHarbor = new Mock<IHarbor>(); unsourcedHarbor.Setup(h => h.Discount).Returns(MaterialType.Unsourced); var resourceHarbor = new Mock<IHarbor>(); resourceHarbor.Setup(h => h.Discount).Returns(MaterialType.Grain); board.Setup(b => b.GetHarbors(player.Object)).Returns(new IHarbor[] { unsourcedHarbor.Object, resourceHarbor.Object }); MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object); MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain }; Assert.Equal(expected, result); }
public void GetInvestmentCostDefaultReturns4() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object); MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain, MaterialType.Grain, MaterialType.Grain }; Assert.Equal(expected, result); }
public void GetInvestmentFailsOnInvalidResource(MaterialType material) { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentException>(() => bank.GetInvestmentCost(material, player.Object)); }
public void GetInvestmentCostNeedsPlayer() { var board = new Mock<IBoard>(); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<ArgumentNullException>(() => bank.GetInvestmentCost(MaterialType.Grain, null)); }
public void BuyDevelopmentCardTest() { var board = new Mock<IBoard>(); var player = new Mock<IPlayer>(); var turn = new Mock<ITurn>(); player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(true); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); bank.BuyDevelopmentCard(player.Object, turn.Object); player.Verify(p => p.TakeResources(Bank.DEVELOPMENTCARD_COST)); player.Verify(p => p.AddCard(It.IsAny<IDevelopmentCard>())); }
public void BuyFailsIfPlayerHasNotTheOfferedResources() { var board = new Mock<IBoard>(); board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { }); var player = new Mock<IPlayer>(); player.Setup(p => p.HasResources(It.IsAny<MaterialType[]>())).Returns(false); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); Assert.Throws<InvalidOperationException>(() => bank.BuyResource(MaterialType.Grain, MaterialType.Lumber, player.Object)); }
public void BuyResourceWithoutHarborTest() { var board = new Mock<IBoard>(); board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { }); var player = new Mock<IPlayer>(); var offer = new MaterialType[] { MaterialType.Lumber, MaterialType.Lumber, MaterialType.Lumber, MaterialType.Lumber }; player.Setup(p => p.HasResources(offer)).Returns(true); var achievements = new IAchievement[0]; var bank = new Bank(board.Object, achievements); bank.BuyResource(MaterialType.Grain, MaterialType.Lumber, player.Object); player.Verify(p => p.TakeResources(offer), Times.Once); player.Verify(p => p.AddResources(It.Is<IRawMaterial>(r => r.Type == MaterialType.Grain))); }