using System; using Paca.Mobile.Core; using Xunit; namespace Paca.Tests.Mobile; public class P2pQrPayloadCodecTests { [Fact] public void Encode_And_Decode_Roundtrip_Succeeds() { var original = new P2pQrPayload { Host = "192.168.1.100", Port = 5000, Token = "secret-token-abcdef123456", DeviceName = "Encep Desktop PC", Fingerprint = "fp_9876543210" }; string encoded = P2pQrPayloadCodec.Encode(original); Assert.StartsWith("paca://pair?", encoded); var decoded = P2pQrPayloadCodec.Decode(encoded); Assert.NotNull(decoded); Assert.Equal(original.Host, decoded.Host); Assert.Equal(original.Port, decoded.Port); Assert.Equal(original.Token, decoded.Token); Assert.Equal(original.DeviceName, decoded.DeviceName); Assert.Equal(original.Fingerprint, decoded.Fingerprint); } [Fact] public void Decode_Invalid_Checksum_Throws() { var original = new P2pQrPayload { Host = "192.168.1.100", Port = 5000, Token = "secret-token", DeviceName = "PC", Fingerprint = "fp" }; string encoded = P2pQrPayloadCodec.Encode(original); // 체크섬 위조 string tampered = encoded.Replace("sig=", "sig=tampered"); Assert.Throws(() => P2pQrPayloadCodec.Decode(tampered)); } [Fact] public void Decode_NonPacaScheme_Throws() { Assert.Throws(() => P2pQrPayloadCodec.Decode("https://google.com")); } }