From 96ae090a3a204dcdfab10857e49aceb29ee9a93f Mon Sep 17 00:00:00 2001 From: gamer147 Date: Mon, 1 Jun 2026 14:53:32 -0400 Subject: [PATCH] test(battle-node): rewrite TurnEnd dispatch test for two-frame cycle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the v1.0 single-envelope/OpponentTurn-phase invariant with the v1.1 two-envelope/AfterReady invariant. Currently failing — ComputeResponses still does the v1.0 thing. Implementation follows. --- .../Sessions/BattleSessionDispatchTests.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs index 35e01d5..197216b 100644 --- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs +++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs @@ -99,16 +99,25 @@ public class BattleSessionDispatchTests } [Test] - public void TurnEnd_AfterReady_PushesOpponentTurnStart_TransitionsToOpponentTurn() + public void TurnEnd_AfterReady_PushesOpponentTurnStart_ThenTurnEnd_StaysInAfterReady() { var s = NewSession(); s.ComputeResponses(NewEnvelope(NetworkBattleUri.InitNetwork)); s.ComputeResponses(NewEnvelope(NetworkBattleUri.InitBattle)); s.ComputeResponses(NewEnvelope(NetworkBattleUri.Loaded)); s.ComputeResponses(NewEnvelope(NetworkBattleUri.Swap)); + var responses = s.ComputeResponses(NewEnvelope(NetworkBattleUri.TurnEnd)); - Assert.That(responses.Single().Envelope.Uri, Is.EqualTo(NetworkBattleUri.TurnStart)); - Assert.That(s.Phase, Is.EqualTo(BattleSessionPhase.OpponentTurn)); + + // Two-frame cycle: opponent opens its turn, immediately ends it, hands control back. + Assert.That(responses.Select(r => r.Envelope.Uri), + Is.EqualTo(new[] { NetworkBattleUri.TurnStart, NetworkBattleUri.TurnEnd })); + 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.) + Assert.That(s.Phase, Is.EqualTo(BattleSessionPhase.AfterReady)); } [Test]