diff --git a/GameHandler.UnitTests/ExpenseHandlerTests.cs b/GameHandler.UnitTests/ExpenseHandlerTests.cs new file mode 100644 index 0000000..2dcf340 --- /dev/null +++ b/GameHandler.UnitTests/ExpenseHandlerTests.cs @@ -0,0 +1,47 @@ +using GameModel; +using GameModel.Mocks; +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(PinPicture.Create(), false, true), _player); + var expense1 = model.MemberExpenses.First(); + var expense2 = model.MemberExpenses.Skip(1).First(); + Assert.That(expense1.Name, Is.EqualTo("Gosse")); + Assert.That(expense2.Name, Is.EqualTo("Gosse2")); + } + + [Test] + public void CheckThrow_NinePinsCausesExpenseForAllOthers() + { + + } + + [Test] + public void CheckThrow_NoWoodAndBellCausesSinkAndBellExpsense() + { + + } + } +} diff --git a/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs b/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs index 587a267..bf713e4 100644 --- a/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs +++ b/GameHandler.UnitTests/Mocks/FakeExpenseRepository.cs @@ -11,6 +11,7 @@ namespace GameModel.Mocks { Expense[] Data = new[] { Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.Sink }, "Gosse", 0.5m, false), + Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.Sink }, "Gosse2", 1.5m, false), Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.FullSink }, "Gosse bei Anwurf", 1m, false), Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.Circle }, "Kranz", 1m, true), Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.NinePins }, "alle Neune", 1m, true), diff --git a/GameHandler/ExpenseHandler.cs b/GameHandler/ExpenseHandler.cs index 4aa5821..b258e8a 100644 --- a/GameHandler/ExpenseHandler.cs +++ b/GameHandler/ExpenseHandler.cs @@ -2,6 +2,7 @@ using GameHandler.Extensions; using GameModel; using GameModel.DeathGame; +using GameModel.Exceptions; using System; using System.Collections.Generic; using System.Linq; @@ -22,24 +23,21 @@ namespace GameHandler _expenseRepository = expenseRepository; } - private int[] PlayersAtGameStart; - private int[] PlayersInGame; - - public void StartGame(int[] playerIds) - { - PlayersAtGameStart = playerIds; - } - private ExpenseModel _expenseModel = new ExpenseModel(Array.Empty()); - public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow) + public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow, int[] PlayerIds) { + if (!PlayerIds.Any(_ => _ == pinThrow.PlayerId)) + { + throw new InvalidPinThrowException($"Player {pinThrow.PlayerId} not found"); + } + var memberExpenses = new List(_expenseModel.MemberExpenses); var triggers = pinThrow.GetExpenseTriggers(currentState); var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et))); - var inversePlayers = PlayersAtGameStart.Where(_ => _ != pinThrow.PlayerId); + var inversePlayers = PlayerIds.Where(_ => _ != pinThrow.PlayerId); foreach (var expense in destExpenses) { if (expense.IsInverse) diff --git a/GameModel/Exceptions/InvalidPinThrowException.cs b/GameModel/Exceptions/InvalidPinThrowException.cs new file mode 100644 index 0000000..1011967 --- /dev/null +++ b/GameModel/Exceptions/InvalidPinThrowException.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GameModel.Exceptions +{ + public class InvalidPinThrowException : KoogleException + { + public InvalidPinThrowException(string message) : base(message, null) + { + } + } +} diff --git a/GameModel/MemberExpense.cs b/GameModel/MemberExpense.cs index 0415de0..fc7604e 100644 --- a/GameModel/MemberExpense.cs +++ b/GameModel/MemberExpense.cs @@ -6,11 +6,11 @@ using System.Threading.Tasks; namespace GameModel { - public record MemberExpense(Guid ExpenseGuid, int MemberId, ExpenseType ExpenseType, DateTime Created) + public record MemberExpense(Guid ExpenseGuid, int MemberId, ExpenseType ExpenseType, DateTime Created, decimal Price, string Name) { public static MemberExpense Create(int MemberId, Expense Expense) { - return new MemberExpense(Guid.NewGuid(), MemberId, Expense.ExpenseType, DateTime.Now); + return new MemberExpense(Guid.NewGuid(), MemberId, Expense.ExpenseType, DateTime.Now, Expense.Price, Expense.Name); } } } diff --git a/GameModel/ThrowModel.cs b/GameModel/ThrowModel.cs deleted file mode 100644 index 587479c..0000000 --- a/GameModel/ThrowModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace GameModel -{ - public record class ThrowModel(); -}