diff --git a/SVSim.UnitTests/Wire/FriendInfoWireShape.cs b/SVSim.UnitTests/Wire/FriendInfoWireShape.cs new file mode 100644 index 0000000..3240cd6 --- /dev/null +++ b/SVSim.UnitTests/Wire/FriendInfoWireShape.cs @@ -0,0 +1,58 @@ +using System.Text.Json; +using SVSim.EmulatedEntrypoint.Models.Dtos.Friend; + +namespace SVSim.UnitTests.Wire; + +public class FriendInfoWireShape +{ + [Test] + public void FriendEntryDto_serialization_matches_prod_capture() + { + // Mirrors the prod capture's first `friends[]` entry from + // data_dumps/captures/traffic_prod_misc_clicking.ndjson (gigapurin). + var entry = new FriendEntryDto + { + DeviceType = "2", + Name = "gigapurin", + CountryCode = "USA", + MaxFriend = "20", + LastPlayTime = "2024-10-31 03:16:37", + IsReceivedTwoPickMission = "1", + Birth = "0", + MissionChangeTime = "2017-09-15 02:36:09", + MissionReceiveType = "0", + IsOfficial = "0", + IsOfficialMarkDisplayed = "0", + ViewerId = 283562639, + Rank = 11, + EmblemId = 900311010, + DegreeId = 300003, + }; + + var options = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, + DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, + }; + var json = JsonSerializer.Serialize(entry, options); + + var expected = + "{\"device_type\":\"2\"," + + "\"name\":\"gigapurin\"," + + "\"country_code\":\"USA\"," + + "\"max_friend\":\"20\"," + + "\"last_play_time\":\"2024-10-31 03:16:37\"," + + "\"is_received_two_pick_mission\":\"1\"," + + "\"birth\":\"0\"," + + "\"mission_change_time\":\"2017-09-15 02:36:09\"," + + "\"mission_receive_type\":\"0\"," + + "\"is_official\":\"0\"," + + "\"is_official_mark_displayed\":\"0\"," + + "\"viewer_id\":283562639," + + "\"rank\":11," + + "\"emblem_id\":900311010," + + "\"degree_id\":300003}"; + + Assert.That(json, Is.EqualTo(expected)); + } +}