using WxAgent.Core; using Xunit; namespace WxAgent.Core.Tests; public sealed class WechatSendConfirmationTests { [Fact] public void RequiresFreshMatchingTypeAndExactReplyText() { var baseline = new HashSet { "old" }; var reply = new ChatMessageSnapshot("reply", "new", 0, ChatMessageType.Quote); Assert.True(WechatSendConfirmation.Matches(reply, baseline, ChatMessageType.Quote, "reply")); Assert.False(WechatSendConfirmation.Matches(reply with { Fingerprint = "old" }, baseline, ChatMessageType.Quote, "reply")); Assert.False(WechatSendConfirmation.Matches(reply with { Type = ChatMessageType.Text }, baseline, ChatMessageType.Quote, "reply")); Assert.False(WechatSendConfirmation.Matches(reply with { Text = "another reply" }, baseline, ChatMessageType.Quote, "reply")); } [Theory] [InlineData("report.txt", true)] [InlineData("文件\nreport.txt\n1 KB", true)] [InlineData("文件\r\nreport.txt\r\n1 KB", true)] [InlineData("other-report.txt", false)] [InlineData("report.txt.backup", false)] public void FileConfirmationRequiresExactFilenameLine(string text, bool expected) { var message = new ChatMessageSnapshot(text, "new", 0, ChatMessageType.File); Assert.Equal(expected, WechatSendConfirmation.Matches(message, new HashSet(), ChatMessageType.File, "report.txt")); } [Fact] public void ImageConfirmationRejectsOtherTypesAndOldRows() { var message = new ChatMessageSnapshot("[图片]", "new", 0, ChatMessageType.Image); Assert.True(WechatSendConfirmation.Matches(message, new HashSet(), ChatMessageType.Image, null)); Assert.False(WechatSendConfirmation.Matches(message, new HashSet { "new" }, ChatMessageType.Image, null)); Assert.False(WechatSendConfirmation.Matches(message with { Type = ChatMessageType.Text }, new HashSet(), ChatMessageType.Image, null)); } }