acdream/tests/AcDream.Core.Tests/Chat/ChatCommandTargetStateTests.cs
Erik f6fe0f2a4f
All checks were successful
CI / linux-portable (push) Successful in 3m27s
CI / windows-gate (push) Successful in 6m42s
CI / release (push) Successful in 2m12s
fix(client): restore retail interaction parity
Harden keyboard and camera routing, inventory and vendor interactions, chat/emotes, relog portal flow, and paperdoll rendering. Add retail research, connected gate coverage, and release-gate validation.
2026-08-26 20:45:11 +02:00

66 lines
2.3 KiB
C#

using AcDream.Core.Chat;
namespace AcDream.Core.Tests.Chat;
public sealed class ChatCommandTargetStateTests
{
[Fact]
public void TracksReplyAndRetellTargetsFromCommittedTranscript()
{
var chat = new ChatLog();
using var targets = new ChatCommandTargetState(chat);
chat.OnTellReceived("Bestie", "incoming", 0x50000001u, logTextType: 0x03u);
chat.OnSelfSent(ChatKind.Tell, "outgoing", logTextType: 0x04u, targetOrChannel: "Caith");
Assert.Equal("Bestie", targets.LastIncomingTellSender);
Assert.Equal("Caith", targets.LastOutgoingTellTarget);
}
[Fact]
public void TracksIndependentMonarchAndPatronReplyTargetsFromLegacyBroadcasts()
{
var chat = new ChatLog();
using var targets = new ChatCommandTargetState(chat);
// 0x0147 does not carry a sender GUID; the incoming sender name is
// nevertheless authoritative for retail's monarch/patron reply keys.
chat.OnChannelBroadcast(0x4000u, "Monarch", "orders");
chat.OnChannelBroadcast(0x2000u, "Patron", "hello");
chat.OnChannelBroadcast(0x4000u, "New Monarch", "new orders");
Assert.Equal("New Monarch", targets.LastMonarchSender);
Assert.Equal("Patron", targets.LastPatronSender);
}
[Fact]
public void ResetSessionForgetsTargetsButPreservesTranscript()
{
var chat = new ChatLog();
using var targets = new ChatCommandTargetState(chat);
chat.OnTellReceived("Bestie", "incoming", 0x50000001u, logTextType: 0x03u);
chat.OnSelfSent(ChatKind.Tell, "outgoing", logTextType: 0x04u, targetOrChannel: "Caith");
targets.ResetSession();
Assert.Null(targets.LastIncomingTellSender);
Assert.Null(targets.LastOutgoingTellTarget);
Assert.Null(targets.LastMonarchSender);
Assert.Null(targets.LastPatronSender);
Assert.Equal(2, chat.Count);
}
[Fact]
public void DisposeDetachesAndIsIdempotent()
{
var chat = new ChatLog();
var targets = new ChatCommandTargetState(chat);
targets.Dispose();
targets.Dispose();
chat.OnTellReceived("After", "ignored", 0x50000002u, logTextType: 0x03u);
Assert.Null(targets.LastIncomingTellSender);
Assert.Null(targets.LastOutgoingTellTarget);
}
}