From 007513e55cb225364f7b3be6afe72b3862f4d227 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Mon, 1 Jun 2026 17:34:59 -0400 Subject: [PATCH] test(battle-node): TurnEnd dispatch tests expect three-frame burst (TDD red) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both single-cycle and consecutive-cycles tests now assert the v1.2 three-frame burst (TurnStart + TurnEnd + Judge). Currently failing — ComputeResponses still pushes only two frames. Implementation follows. --- .../Sessions/BattleSessionDispatchTests.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs index 3b1f6e7..bc41a87 100644 --- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs +++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs @@ -99,7 +99,7 @@ public class BattleSessionDispatchTests } [Test] - public void TurnEnd_AfterReady_PushesOpponentTurnStart_ThenTurnEnd_StaysInAfterReady() + public void TurnEnd_AfterReady_PushesTurnStart_TurnEnd_Judge_StaysInAfterReady() { var s = NewSession(); s.ComputeResponses(NewEnvelope(NetworkBattleUri.InitNetwork)); @@ -109,14 +109,14 @@ public class BattleSessionDispatchTests var responses = s.ComputeResponses(NewEnvelope(NetworkBattleUri.TurnEnd)); - // Two-frame cycle: opponent opens its turn, immediately ends it, hands control back. + // Three-frame cycle: opponent opens its turn, ends it, sends Judge so the client's + // JudgeOperation -> ControlTurnStartPlayer fires and the player's next turn begins. Assert.That(responses.Select(r => r.Envelope.Uri), - Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd })); + Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd, NetworkBattleUri.Judge })); Assert.That(responses.Select(r => r.NoStock), - Is.EqualTo(new[] { false, false })); - // Phase returns to AfterReady within the same call; the next player TurnEnd can fire - // the cycle again. (OpponentTurn is set transiently inside ComputeResponses to document - // intent, but is never externally observable.) + Is.EqualTo(new[] { false, false, false })); + // Phase returns to AfterReady within the same call so the next player TurnEnd can fire + // the cycle again. OpponentTurn is set transiently and is never externally observable. Assert.That(s.Phase, Is.EqualTo(BattleSessionPhase.AfterReady)); } @@ -132,11 +132,11 @@ public class BattleSessionDispatchTests var first = s.ComputeResponses(NewEnvelope(NetworkBattleUri.TurnEnd)); var second = s.ComputeResponses(NewEnvelope(NetworkBattleUri.TurnEnd)); - // Both calls produce the same two-frame burst. + // Both calls produce the same three-frame burst. Assert.That(first.Select(r => r.Envelope.Uri), - Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd })); + Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd, NetworkBattleUri.Judge })); Assert.That(second.Select(r => r.Envelope.Uri), - Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd })); + Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd, NetworkBattleUri.Judge })); Assert.That(s.Phase, Is.EqualTo(BattleSessionPhase.AfterReady)); }