refactor(battle-node): switch MsgEnvelope.Body to IMsgBody, migrate all sites

This commit is contained in:
gamer147
2026-06-01 10:40:09 -04:00
parent 118be92dc5
commit 5ee270eb16
11 changed files with 183 additions and 231 deletions

View File

@@ -1,6 +1,7 @@
using NUnit.Framework;
using SVSim.BattleNode.Lifecycle;
using SVSim.BattleNode.Protocol;
using SVSim.BattleNode.Protocol.Bodies;
namespace SVSim.UnitTests.BattleNode.Lifecycle;
@@ -13,40 +14,39 @@ public class ScriptedLifecycleTests
var env = ScriptedLifecycle.BuildMatched(playerViewerId: 906243102, opponentViewerId: 847666884, battleId: "b");
Assert.That(env.Uri, Is.EqualTo(NetworkBattleUri.Matched));
var selfInfo = (Dictionary<string, object?>)env.Body["selfInfo"]!;
Assert.That(selfInfo["oppoId"], Is.EqualTo(847666884L));
var oppoInfo = (Dictionary<string, object?>)env.Body["oppoInfo"]!;
Assert.That(oppoInfo["oppoId"], Is.EqualTo(906243102L));
var body = (MatchedBody)env.Body;
Assert.That(body.SelfInfo.OppoId, Is.EqualTo(847666884L));
Assert.That(body.OppoInfo.OppoId, Is.EqualTo(906243102L));
// Bid travels in the envelope, not the Body — protect against the Task 5 reserved-keys regression.
// Bid travels in the envelope, not the Body — protect against the reserved-keys regression.
Assert.That(env.Bid, Is.EqualTo("b"));
Assert.That(env.Body.ContainsKey("bid"), Is.False);
// Typed bodies can't carry an envelope-level "bid" key by construction (no such property).
}
[Test]
public void BuildMatched_ContainsThirtyCardSelfDeck()
{
var env = ScriptedLifecycle.BuildMatched(1, 2, "b");
var deck = (List<object?>)env.Body["selfDeck"]!;
Assert.That(deck.Count, Is.EqualTo(30));
var body = (MatchedBody)env.Body;
Assert.That(body.SelfDeck.Count, Is.EqualTo(30));
}
[Test]
public void BuildBattleStart_HasTurnStateZeroAndBattleTypeEleven()
{
var env = ScriptedLifecycle.BuildBattleStart(playerViewerId: 1);
Assert.That(env.Body["turnState"], Is.EqualTo(0));
Assert.That(env.Body["battleType"], Is.EqualTo(11));
var body = (BattleStartBody)env.Body;
Assert.That(body.TurnState, Is.EqualTo(0));
Assert.That(body.BattleType, Is.EqualTo(11));
}
[Test]
public void BuildDeal_HasThreeSelfAndThreeOppoEntries()
{
var env = ScriptedLifecycle.BuildDeal();
var self = (List<object?>)env.Body["self"]!;
var oppo = (List<object?>)env.Body["oppo"]!;
Assert.That(self.Count, Is.EqualTo(3));
Assert.That(oppo.Count, Is.EqualTo(3));
var body = (DealBody)env.Body;
Assert.That(body.Self.Count, Is.EqualTo(3));
Assert.That(body.Oppo.Count, Is.EqualTo(3));
}
[Test]
@@ -75,19 +75,19 @@ public class ScriptedLifecycleTests
public void BuildSwapResponse_RendersGivenHandAsPositions()
{
var env = ScriptedLifecycle.BuildSwapResponse(new long[] { 1, 4, 3 });
var self = (List<object?>)env.Body["self"]!;
Assert.That(self.Count, Is.EqualTo(3));
Assert.That(((Dictionary<string, object?>)self[1]!)["idx"], Is.EqualTo(4));
var body = (SwapResponseBody)env.Body;
Assert.That(body.Self.Count, Is.EqualTo(3));
Assert.That(body.Self[1].Idx, Is.EqualTo(4));
}
[Test]
public void BuildReady_IncludesIdxChangeSeedAndSpin_AndUsesGivenHand()
{
var env = ScriptedLifecycle.BuildReady(new long[] { 1, 4, 3 });
Assert.That(env.Body.ContainsKey("idxChangeSeed"), Is.True);
Assert.That(env.Body.ContainsKey("spin"), Is.True);
var self = (List<object?>)env.Body["self"]!;
Assert.That(((Dictionary<string, object?>)self[1]!)["idx"], Is.EqualTo(4));
var body = (ReadyBody)env.Body;
Assert.That(body.IdxChangeSeed, Is.EqualTo(771_335_280));
Assert.That(body.Spin, Is.EqualTo(243));
Assert.That(body.Self[1].Idx, Is.EqualTo(4));
}
[Test]
@@ -95,6 +95,7 @@ public class ScriptedLifecycleTests
{
var env = ScriptedLifecycle.BuildOpponentTurnStart();
Assert.That(env.Uri, Is.EqualTo(NetworkBattleUri.TurnStart));
Assert.That(env.Body.ContainsKey("spin"), Is.True);
var body = (OpponentTurnStartBody)env.Body;
Assert.That(body.Spin, Is.EqualTo(100));
}
}