dev
This commit is contained in:
parent
54578a6458
commit
ce0f465e8a
|
|
@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
Loading…
Reference in New Issue