using NUnit.Framework; using System.Text.Json; using SVSim.EmulatedEntrypoint.Models.Dtos.Guild; namespace SVSim.UnitTests.Wire; [TestFixture] public class GuildWireShape { private static readonly JsonSerializerOptions Opts = new() { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, }; [Test] public void GuildInfo_non_joined_serializes_to_prod_shape() { var resp = new GuildInfoResponse { MaxMemberNum = 30, MaxSubLeaderNum = 2, GuildStatus = 0, UsableStampList = Enumerable.Range(100001, 20).Select(i => i.ToString()).ToList(), }; var json = JsonSerializer.Serialize(resp, Opts); using var doc = JsonDocument.Parse(json); var root = doc.RootElement; Assert.That(root.GetProperty("max_member_num").GetString(), Is.EqualTo("30")); Assert.That(root.GetProperty("max_sub_leader_num").GetString(), Is.EqualTo("2")); Assert.That(root.GetProperty("guild_status").GetString(), Is.EqualTo("0")); Assert.That(root.GetProperty("usable_stamp_list").EnumerateArray().Select(e => e.GetString()).First(), Is.EqualTo("100001")); // The four nullable fields MUST NOT appear when null: Assert.That(root.TryGetProperty("guild", out _), Is.False); Assert.That(root.TryGetProperty("join_request_count", out _), Is.False); Assert.That(root.TryGetProperty("invite_count", out _), Is.False); } }