KoogleV4/GameHandler.UnitTests/ExpenseHandlerTests.cs

64 lines
2.2 KiB
C#

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);
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()
{
var bs = BoardState.Create();
var model = _eh.CheckThrow(bs, PinThrow.Create(1, PinPicture.CreateAllPins(), false, false), _player);
Assert.That(model.MemberExpenses.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);
var expense1 = model.MemberExpenses.First();
var expense2 = model.MemberExpenses.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.MemberExpenses.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<InvalidPinThrowException>());
}
}
}