using GameHandler.UnitTests.Mocks; using GameModel; using GameModel.Exceptions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GameHandler.UnitTests { [TestFixture] internal class ExpenseHandlerTests { private ExpenseHandler _eh; private int[] _player; [SetUp] public void SetUp() { _eh = new ExpenseHandler(new FakeExpenseRepository()); _player = new[] { 1, 2, 3, 4 }; } [Test] public void CheckThrow_SinkCausesMultipleSinkExpsenses() { var bs = BoardState.Create(); var model = _eh.CheckThrow(bs, PinThrow.Create(1, PinPicture.Create(), false, true), _player).Result; var expense1 = model.First(); var expense2 = model.Skip(1).First(); Assert.That(expense1.Name, Is.EqualTo("Gosse")); Assert.That(expense2.Name, Is.EqualTo("Gosse2")); } [Test] public void CheckThrow_NinePinsCausesExpenseForAllOthers() { var bs = BoardState.Create(); var model = _eh.CheckThrow(bs, PinThrow.Create(1, PinPicture.CreateAllPins(), false, false), _player).Result; Assert.That(model.Count, Is.EqualTo(_player.Count()-1)); } [Test] public void CheckThrow_NoWoodAndBellCausesSinkAndBellExpsense() { var bs = BoardState.Create(); var model = _eh.CheckThrow(bs, PinThrow.Create(1, true, true), _player).Result; var expense1 = model.First(); var expense2 = model.Skip(2).First(); // there are two triggers for sink in testdata Assert.That(expense1.Name, Is.EqualTo("Gosse")); Assert.That(expense2.Name, Is.EqualTo("Klingel")); Assert.That(model.Count, Is.EqualTo(3)); } [Test] public void CheckThrow_ThrowsExcetionIfPlayerIsNotPartOfModel() { var bs = BoardState.Create(); Assert.That(() => _eh.CheckThrow(bs, PinThrow.Create(5, PinPicture.Create(), false, true), _player), Throws.TypeOf()); } } }