This commit is contained in:
Christian Kauer 2023-12-20 21:13:22 +01:00
parent 54578a6458
commit ce0f465e8a
6 changed files with 73 additions and 22 deletions

View File

@ -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()
{
}
}
}

View File

@ -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),

View File

@ -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<MemberExpense>());
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<MemberExpense>(_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)

View File

@ -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)
{
}
}
}

View File

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

View File

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