using XFEToolBox.Client.Models.Chat;
using XFEToolBox.Client.Utilities.Chat;
using XFEToolBox.Client.ViewModel.Chat;
using XFEToolBox.Core.Chat;
namespace XFEToolBox.Client.Wpf.Test;
public static class ChatNavigationTests
{
[Test]
public static void NavigationItemsExposeLatestMessageAndMutedStateSafely()
{
var now = DateTimeOffset.UtcNow;
var friend = new ChatFriendInfo
{
User = new ChatUserSummary { Id = "friend", UserName = "friend-account", NickName = "好友" },
ConversationId = "direct"
};
var conversation = new ChatConversationInfo
{
Id = "direct",
Kind = ChatConversationKind.Direct,
Friend = friend.User,
LastMessage = new ChatMessageInfo
{
Id = "message",
ConversationId = "direct",
Sender = friend.User,
Text = "最新消息",
CreatedAtUtc = now
}
};
var item = new ChatNavigationItem(conversation, friend);
Ensure(item.Key == "friend:friend", "好友统一列表键不稳定。 ");
Ensure(item.Subtitle == "最新消息" && item.LastMessageAtUtc == now, "统一列表没有使用最后一条消息。 ");
Ensure(!item.IsGroup && !item.IsMuted, "好友被错误识别成免打扰群聊。 ");
Ensure(ChatNotificationPreferences.ParseMutedGroupIds("[\"g1\",\"g1\",\"\"]").SetEquals(["g1"]),
"群聊免打扰配置没有去重或过滤空值。 ");
Ensure(ChatNotificationPreferences.ParseMutedGroupIds("{损坏").Count == 0,
"损坏的群聊免打扰配置没有安全恢复。 ");
}
[Test]
public static void SinglePaneModeSwitchesBetweenListAndDetail()
{
var viewModel = new ChatPageViewModel { IsSinglePaneMode = true };
Ensure(viewModel.ShowListPane && !viewModel.ShowDetailPane, "单栏模式初始状态没有只显示列表。 ");
viewModel.OpenLobbyCommand.ExecuteAsync(null).GetAwaiter().GetResult();
Ensure(!viewModel.ShowListPane && viewModel.ShowDetailPane && viewModel.ShowBackButton,
"打开大厅后单栏模式没有切换到详情。 ");
viewModel.CloseDetailCommand.Execute(null);
Ensure(viewModel.ShowListPane && !viewModel.ShowDetailPane && !viewModel.ShowBackButton,
"返回后单栏模式没有恢复会话列表。 ");
}
private static void Ensure(bool condition, string message)
{
if (!condition) throw new InvalidOperationException(message);
}
}
using XFEToolBox.Client.Models.Chat;
using XFEToolBox.Client.Utilities.Chat;
using XFEToolBox.Client.ViewModel.Chat;
using XFEToolBox.Core.Chat;
namespace XFEToolBox.Client.Wpf.Test;
public static class ChatNavigationTests
{
[Test]
public static void NavigationItemsExposeLatestMessageAndMutedStateSafely()
{
var now = DateTimeOffset.UtcNow;
var friend = new ChatFriendInfo
{
User = new ChatUserSummary { Id = "friend", UserName = "friend-account", NickName = "好友" },
ConversationId = "direct"
};
var conversation = new ChatConversationInfo
{
Id = "direct",
Kind = ChatConversationKind.Direct,
Friend = friend.User,
LastMessage = new ChatMessageInfo
{
Id = "message",
ConversationId = "direct",
Sender = friend.User,
Text = "最新消息",
CreatedAtUtc = now
}
};
var item = new ChatNavigationItem(conversation, friend);
Ensure(item.Key == "friend:friend", "好友统一列表键不稳定。 ");
Ensure(item.Subtitle == "最新消息" && item.LastMessageAtUtc == now, "统一列表没有使用最后一条消息。 ");
Ensure(!item.IsGroup && !item.IsMuted, "好友被错误识别成免打扰群聊。 ");
Ensure(ChatNotificationPreferences.ParseMutedGroupIds("[\"g1\",\"g1\",\"\"]").SetEquals(["g1"]),
"群聊免打扰配置没有去重或过滤空值。 ");
Ensure(ChatNotificationPreferences.ParseMutedGroupIds("{损坏").Count == 0,
"损坏的群聊免打扰配置没有安全恢复。 ");
}
[Test]
public static void SinglePaneModeSwitchesBetweenListAndDetail()
{
var viewModel = new ChatPageViewModel { IsSinglePaneMode = true };
Ensure(viewModel.ShowListPane && !viewModel.ShowDetailPane, "单栏模式初始状态没有只显示列表。 ");
viewModel.OpenLobbyCommand.ExecuteAsync(null).GetAwaiter().GetResult();
Ensure(!viewModel.ShowListPane && viewModel.ShowDetailPane && viewModel.ShowBackButton,
"打开大厅后单栏模式没有切换到详情。 ");
viewModel.CloseDetailCommand.Execute(null);
Ensure(viewModel.ShowListPane && !viewModel.ShowDetailPane && !viewModel.ShowBackButton,
"返回后单栏模式没有恢复会话列表。 ");
}
private static void Ensure(bool condition, string message)
{
if (!condition) throw new InvalidOperationException(message);
}
}