fix unit tests

This commit is contained in:
beo3000 2025-12-29 14:33:53 +01:00
parent e2d1792cec
commit f5d2ceb628
3 changed files with 27 additions and 22 deletions

View File

@ -1,6 +1,5 @@
@DeathBoxGameLogicService: erster Spieler muss mit einem X starten ## Open Issues
- neuer Tag -> optional Gäste und nicht alle Teilnehmer - neuer Tag -> optional Gäste und nicht alle Teilnehmer
- Tag beendnden -> alle Teilnehmer hinzufügen, und strafen hinzufügen - Tag beendnden -> alle Teilnehmer hinzufügen, und strafen hinzufügen
- offene Sachstrafen von einem Tag zum nächsten fortschreiben - offene Sachstrafen von einem Tag zum nächsten fortschreiben

View File

@ -97,12 +97,12 @@ public class DeathBoxGameLogicService : IGameLogicService
} }
// Check X conversion (3 X's -> 1 mark) // Check X conversion (3 X's -> 1 mark)
if (currentState.XCount >= 3) //if (currentState.XCount >= 3)
{ //{
currentState.XCount = 0; // currentState.XCount = 0;
currentState.Marks++; // currentState.Marks++;
lastThrow = lastThrow with { ConvertedXsToMark = true }; // lastThrow = lastThrow with { ConvertedXsToMark = true };
} //}
} }
// 2. GUTTER / NO WOOD processing (0 pins knocked) // 2. GUTTER / NO WOOD processing (0 pins knocked)
@ -381,7 +381,8 @@ public class DeathBoxGameLogicService : IGameLogicService
{ {
// New round = 9 pins were standing before this throw // New round = 9 pins were standing before this throw
// If it's a strike, all 9 were knocked down from 9 standing // If it's a strike, all 9 were knocked down from 9 standing
if (afterThrow.IsStrike) return true; if (afterThrow.IsStrike)
return true;
// Otherwise check if standing pins before throw = 9 // Otherwise check if standing pins before throw = 9
// We can infer this from: if all pins are now accounted for (knocked + still standing = 9) // We can infer this from: if all pins are now accounted for (knocked + still standing = 9)

View File

@ -50,7 +50,7 @@ public class DeathBoxGameLogicServiceTests
// Assert // Assert
var model = (DeathBoxGameModel)result; var model = (DeathBoxGameModel)result;
model.PlayerStates[playerId].Marks.Should().Be(0); model.PlayerStates[playerId].Marks.Should().Be(0);
model.PlayerStates[playerId].XCount.Should().Be(0); model.PlayerStates[playerId].XCount.Should().Be(1);
model.PlayerStates[playerId].EggCount.Should().Be(0); model.PlayerStates[playerId].EggCount.Should().Be(0);
model.PlayerStates[playerId].IsEliminated.Should().BeFalse(); model.PlayerStates[playerId].IsEliminated.Should().BeFalse();
model.CoffinSize.Should().Be(10); model.CoffinSize.Should().Be(10);
@ -110,19 +110,20 @@ public class DeathBoxGameLogicServiceTests
public void ProcessThrow_NewRound_CollectsX() public void ProcessThrow_NewRound_CollectsX()
{ {
// Arrange // Arrange
var playerId = Guid.NewGuid(); var playerId1 = Guid.NewGuid();
var playerId2 = Guid.NewGuid();
var setup = DeathBoxGameSetup.Create(coffinSize: 12); var setup = DeathBoxGameSetup.Create(coffinSize: 12);
var model = (DeathBoxGameModel)_sut.CreateInitialModel([playerId], setup); var model = (DeathBoxGameModel)_sut.CreateInitialModel([playerId1, playerId2], setup);
// New round with 5 pins knocked (>= 3) // New round with 9 pins knocked (>= 3) -> Board cleared
var afterThrow = CreateAfterThrowState(playerId, 5, isNewRound: true); var afterThrow = CreateAfterThrowState(model.PlayerOrder.First(), 9, isNewRound: true, isCleared:true);
// Act // Act
var (updatedModel, _) = _sut.ProcessThrow(model, afterThrow); var (updatedModel, _) = _sut.ProcessThrow(model, afterThrow);
// Assert // Assert
var updated = (DeathBoxGameModel)updatedModel; var updated = (DeathBoxGameModel)updatedModel;
updated.PlayerStates[playerId].XCount.Should().Be(1); updated.PlayerStates[model.PlayerOrder.Last()].XCount.Should().Be(1);
updated.LastThrow!.EarnedX.Should().BeTrue(); updated.LastThrow!.EarnedX.Should().BeTrue();
updated.LastThrow.WasPenalty.Should().BeFalse(); updated.LastThrow.WasPenalty.Should().BeFalse();
} }
@ -152,23 +153,27 @@ public class DeathBoxGameLogicServiceTests
public void ProcessThrow_ThreeXs_ConvertToOneMark() public void ProcessThrow_ThreeXs_ConvertToOneMark()
{ {
// Arrange // Arrange
var playerId = Guid.NewGuid(); var playerId1 = Guid.NewGuid();
var playerId2 = Guid.NewGuid();
var setup = DeathBoxGameSetup.Create(coffinSize: 12); var setup = DeathBoxGameSetup.Create(coffinSize: 12);
var model = (DeathBoxGameModel)_sut.CreateInitialModel([playerId], setup); var model = (DeathBoxGameModel)_sut.CreateInitialModel([playerId1, playerId2], setup);
playerId1 = model.PlayerOrder.First();
playerId2 = model.PlayerOrder.Last();
// Set player to have 2 Xs already // Set player to have 2 Xs already
model.PlayerStates[playerId].XCount = 2; model.PlayerStates[playerId2].XCount = 2;
// New round - will get 3rd X // New round - will get 3rd X
var afterThrow = CreateAfterThrowState(playerId, 5, isNewRound: true); // player1 clears the pins -> player2 will have to start new round and gets a X
var afterThrow = CreateAfterThrowState(playerId1, 9, isNewRound: true, isCleared:true);
// Act // Act
var (updatedModel, _) = _sut.ProcessThrow(model, afterThrow); var (updatedModel, _) = _sut.ProcessThrow(model, afterThrow);
// Assert // Assert
var updated = (DeathBoxGameModel)updatedModel; var updated = (DeathBoxGameModel)updatedModel;
updated.PlayerStates[playerId].XCount.Should().Be(0); updated.PlayerStates[playerId2].XCount.Should().Be(0);
updated.PlayerStates[playerId].Marks.Should().Be(1); updated.PlayerStates[playerId2].Marks.Should().Be(1);
updated.LastThrow!.ConvertedXsToMark.Should().BeTrue(); updated.LastThrow!.ConvertedXsToMark.Should().BeTrue();
} }