using WxAgent.Core; using Xunit; namespace WxAgent.Core.Tests; public sealed class WechatSearchRulesTests { [Fact] public void CollapsedGroupsExposeALocalExpansion_NotANetworkKeyword() { var page = WechatSearchRules.Parse([ ("", "群聊"), ("search_item_技术交流群", "群聊\n技术交流群"), ("", "查看全部(10)"), ("", "网络搜索"), ("search_item_web_交流", "网络搜索\n交流"), ("", "交流")], "交流"); Assert.Single(page.Results); Assert.Equal("技术交流群", page.Results[0].Name); Assert.False(page.Results[0].IsExactMatch); Assert.Equal("技术交流群", WechatSearchRules.RequireExact(page.Results, "技术交流群").Name); Assert.Equal(new WechatSearchExpansion("群聊", 2, 10), Assert.Single(page.Expansions)); Assert.Throws(() => WechatSearchRules.RequireExact(page.Results, "交流")); } [Fact] public void GroupsAndContactsAreBothLocal_AndDuplicateNamesRemainAmbiguous() { var page = WechatSearchRules.Parse([ ("", "联系人"), ("search_item_交流", "联系人\n交流"), ("", "群聊"), ("search_item_交流", "群聊\n交流")], "交流"); Assert.Equal(2, page.Results.Count); Assert.Equal(WxAgentErrorCode.InvalidOperationState, Assert.Throws(() => WechatSearchRules.RequireExact(page.Results, "交流")).Code); } [Fact] public void ExpandedLocalPageStillExcludesNetworkAndHistory() { var page = WechatSearchRules.Parse([ ("search_item_技术交流群", "技术交流群"), ("search_item_web_交流", "交流"), ("", "聊天记录"), ("search_item_历史交流", "交流")], "交流", "群聊"); Assert.Equal("技术交流群", Assert.Single(page.Results).Name); Assert.Empty(page.Expansions); } [Fact] public void ExpandedPageDoesNotTrustUnknownSectionsOrTheirSearchIds() { var page = WechatSearchRules.Parse([ ("search_item_技术交流群", "技术交流群"), ("", "未知类别"), ("search_item_new_kind_交流", "交流")], "交流", "群聊"); Assert.Equal("技术交流群", Assert.Single(page.Results).Name); } [Fact] public void PromotedLocalConversationRemainsSelectableButUnknownFamiliesDoNot() { var page = WechatSearchRules.Parse([ ("", "最常使用"), ("search_item_技术交流群", "技术交流群"), ("search_item_function_交流", "交流"), ("search_item_online_交流", "交流"), ("search_item_future_交流", "交流")], "交流"); Assert.Equal("技术交流群", WechatSearchRules.RequireExact(page.Results, "技术交流群").Name); Assert.Single(page.Results); } [Fact] public void ACategoryCaptionIsNotTheConversationName() { var page = WechatSearchRules.Parse([("", "群聊"), ("search_item_技术群", "群聊\n技术群")], "群聊"); Assert.Equal("技术群", Assert.Single(page.Results).Name); Assert.False(page.Results[0].IsExactMatch); } [Fact] public void WebExpansionAndUnclassifiedSearchItemsAreNeverTargets() { var page = WechatSearchRules.Parse([ ("search_item_交流", "交流"), ("", "网络搜索"), ("", "查看全部(99)")], "交流"); Assert.Empty(page.Results); Assert.Empty(page.Expansions); Assert.Throws(() => WechatSearchRules.Parse([], "交流", "网络搜索")); } }