using System.Text.Json; namespace Discord.API.Tests; using Xunit; using Discord.API; public class JsonTests { [Fact] public void GatewayPacketEncodeJsonTest() { var gateway_packet = new GatewayPacket() { Op = GatewayPacket.Opcode.Heartbeat }; string json = JsonSerializer.Serialize(gateway_packet, SourceGenerationContext.Default.GatewayPacket); Assert.Equal("""{"op":1}""", json); } [Fact] public void GatewayPacketDecodeTest() { const string src = """{"op":1}"""; var gateway_packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket); Assert.Equal(GatewayPacket.Opcode.Heartbeat, gateway_packet?.Op); } [Fact] public void ReadyPacketDeserialize() { const string src = """ { "op":0, "t":"READY", "s":1, "d":{ "v":10, "user":{ "id":"1234", "username":"abrakadabra", "discriminator":"1111", "global_name":"glblname" }, "guilds":[ { "id":"5678", "unavailable":true } ], "session_id":"abcd", "resume_gateway_url":"dfgh", "application":{ "id":"3333", "flags":5555 } } } """; GatewayPacket? packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket); Assert.NotNull(packet); Assert.IsType(packet); Assert.True(packet is ReadyPacket { Op: GatewayPacket.Opcode.Dispatch, Event: "READY", Sequence: 1, Data: { User: { Id:1234, Username: "abrakadabra", Discriminator: "1111", GlobalName: "glblname" }, Version: 10, SessionId: "abcd", ResumeGatewayUrl: "dfgh", Guilds:[ { Id: 5678, Unavailable: true } ], Application: { Id: 3333, Flags: 5555 } } }); } [Fact] public void ChannelCreateDeserialize() { string src = """ { "op":0, "t":"CHANNEL_CREATE", "s":1, "d":{ "id": "922243411795390570", "type": 2, "guild_id": "5678", "position": 3, "name": "voice csennel", "topic": "A very interesting topic", "nsfw": true, "last_message_id":"6969", "bitrate":420, "parent_id": "5555" } } """; var gateway_packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket); Assert.IsType(gateway_packet); Assert.True(gateway_packet is ChannelCreatePacket { Op: GatewayPacket.Opcode.Dispatch, Event: "CHANNEL_CREATE", Sequence: 1, Data: { Id: 922243411795390570, Name: "voice csennel", GuildId: 5678, Type: 2, Position: 3, Topic: "A very interesting topic", Nsfw: true, Bitrate: 420, ParentId: 5555, LastMessageId: 6969 } }); } }