diff --git a/SVSim.BattleNode/Protocol/Bodies/AlivePushBody.cs b/SVSim.BattleNode/Protocol/Bodies/AlivePushBody.cs new file mode 100644 index 0000000..5ebafbf --- /dev/null +++ b/SVSim.BattleNode/Protocol/Bodies/AlivePushBody.cs @@ -0,0 +1,7 @@ +using System.Text.Json.Serialization; + +namespace SVSim.BattleNode.Protocol.Bodies; + +public sealed record AlivePushBody( + [property: JsonPropertyName("scs")] string Scs, + [property: JsonPropertyName("ocs")] string Ocs) : IMsgBody; diff --git a/SVSim.BattleNode/Protocol/Bodies/BattleFinishBody.cs b/SVSim.BattleNode/Protocol/Bodies/BattleFinishBody.cs new file mode 100644 index 0000000..3ac3c47 --- /dev/null +++ b/SVSim.BattleNode/Protocol/Bodies/BattleFinishBody.cs @@ -0,0 +1,7 @@ +using System.Text.Json.Serialization; + +namespace SVSim.BattleNode.Protocol.Bodies; + +public sealed record BattleFinishBody( + [property: JsonPropertyName("result")] int Result, + [property: JsonPropertyName("resultCode")] int ResultCode = 1) : IMsgBody; diff --git a/SVSim.BattleNode/Protocol/Bodies/OpponentTurnStartBody.cs b/SVSim.BattleNode/Protocol/Bodies/OpponentTurnStartBody.cs new file mode 100644 index 0000000..e397348 --- /dev/null +++ b/SVSim.BattleNode/Protocol/Bodies/OpponentTurnStartBody.cs @@ -0,0 +1,7 @@ +using System.Text.Json.Serialization; + +namespace SVSim.BattleNode.Protocol.Bodies; + +public sealed record OpponentTurnStartBody( + [property: JsonPropertyName("spin")] int Spin, + [property: JsonPropertyName("resultCode")] int ResultCode = 1) : IMsgBody; diff --git a/SVSim.BattleNode/Protocol/Bodies/ResultCodeOnlyBody.cs b/SVSim.BattleNode/Protocol/Bodies/ResultCodeOnlyBody.cs new file mode 100644 index 0000000..11057e2 --- /dev/null +++ b/SVSim.BattleNode/Protocol/Bodies/ResultCodeOnlyBody.cs @@ -0,0 +1,6 @@ +using System.Text.Json.Serialization; + +namespace SVSim.BattleNode.Protocol.Bodies; + +public sealed record ResultCodeOnlyBody( + [property: JsonPropertyName("resultCode")] int ResultCode = 1) : IMsgBody; diff --git a/SVSim.UnitTests/BattleNode/Protocol/Bodies/SmallBodiesTests.cs b/SVSim.UnitTests/BattleNode/Protocol/Bodies/SmallBodiesTests.cs new file mode 100644 index 0000000..a76f1eb --- /dev/null +++ b/SVSim.UnitTests/BattleNode/Protocol/Bodies/SmallBodiesTests.cs @@ -0,0 +1,55 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using NUnit.Framework; +using SVSim.BattleNode.Protocol.Bodies; + +namespace SVSim.UnitTests.BattleNode.Protocol.Bodies; + +[TestFixture] +public class SmallBodiesTests +{ + [Test] + public void OpponentTurnStartBody_SerializesSpin_AndDefaultsResultCodeToOne() + { + var body = new OpponentTurnStartBody(Spin: 100); + + var node = (JsonObject)JsonSerializer.SerializeToNode(body)!; + + Assert.That(node["spin"]!.GetValue(), Is.EqualTo(100)); + Assert.That(node["resultCode"]!.GetValue(), Is.EqualTo(1)); + } + + [Test] + public void ResultCodeOnlyBody_SerializesJustResultCode() + { + var body = new ResultCodeOnlyBody(); + + var node = (JsonObject)JsonSerializer.SerializeToNode(body)!; + + Assert.That(node.Count, Is.EqualTo(1)); + Assert.That(node["resultCode"]!.GetValue(), Is.EqualTo(1)); + } + + [Test] + public void BattleFinishBody_SerializesResultAndResultCode() + { + var body = new BattleFinishBody(Result: 1); + + var node = (JsonObject)JsonSerializer.SerializeToNode(body)!; + + Assert.That(node["result"]!.GetValue(), Is.EqualTo(1)); + Assert.That(node["resultCode"]!.GetValue(), Is.EqualTo(1)); + } + + [Test] + public void AlivePushBody_SerializesScsAndOcs_AndDoesNotIncludeResultCode() + { + var body = new AlivePushBody(Scs: "ONLINE", Ocs: "ONLINE"); + + var node = (JsonObject)JsonSerializer.SerializeToNode(body)!; + + Assert.That(node["scs"]!.GetValue(), Is.EqualTo("ONLINE")); + Assert.That(node["ocs"]!.GetValue(), Is.EqualTo("ONLINE")); + Assert.That(node.ContainsKey("resultCode"), Is.False); + } +}