Files
Luna/Luna.Channels.Tests/ChannelManagerInterfaceTests.cs
2026-04-04 05:01:51 +02:00

114 lines
3.6 KiB
C#

using Luna.Channels.Abstractions;
using Luna.Core.Abstractions;
using Luna.Shared;
using Microsoft.Extensions.Logging;
using Moq;
namespace Luna.Channels.Tests;
[TestFixture]
[Category("Unit")]
public class ChannelManagerInterfaceTests
{
private readonly Mock<ILogger<ChannelManager>> loggerMock = new();
[Test]
public void RegisterChannel_And_GetChannel_Returns_It()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
var mockChannel = new Mock<IChannel>();
mockChannel.Setup(c => c.ChannelId).Returns("test-1");
stub.RegisterChannel(mockChannel.Object);
var result = stub.GetChannel("test-1");
Assert.That(result, Is.EqualTo(mockChannel.Object));
}
[Test]
public void RegisterChannel_Duplicate_Id_Throws()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
var mockChannel = new Mock<IChannel>();
mockChannel.Setup(c => c.ChannelId).Returns("dup-1");
stub.RegisterChannel(mockChannel.Object);
Assert.That(() => stub.RegisterChannel(mockChannel.Object),
Throws.TypeOf<InvalidOperationException>());
}
[Test]
public void UnregisterChannel_Removes_Channel()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
var mockChannel = new Mock<IChannel>();
mockChannel.Setup(c => c.ChannelId).Returns("rem-1");
stub.RegisterChannel(mockChannel.Object);
stub.UnregisterChannel("rem-1");
var result = stub.GetChannel("rem-1");
Assert.That(result, Is.Null);
}
[Test]
public void UnregisterChannel_Unknown_Id_No_Exception()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
Assert.That(() => stub.UnregisterChannel("nonexistent-id"), Throws.Nothing);
}
[Test]
public void GetAllChannels_Returns_All_Registered()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
for (int i = 0; i < 3; i++)
{
var mockChannel = new Mock<IChannel>();
mockChannel.Setup(c => c.ChannelId).Returns($"ch-{i}");
stub.RegisterChannel(mockChannel.Object);
}
var all = stub.GetAllChannels();
Assert.That(all.Count, Is.EqualTo(3));
}
[Test]
public void MessageRouted_Event_Fires_When_Message_Is_Routed()
{
var sessionManagerMock = new Mock<ISessionManager>();
var stub = new ChannelManager(sessionManagerMock.Object, loggerMock.Object);
var mockChannel = new Mock<IChannel>();
mockChannel.Setup(c => c.ChannelId).Returns("event-ch-1");
ChannelMessageReceivedEventArgs? capturedArgs = null;
stub.MessageRouted += (_, args) => capturedArgs = args;
stub.RegisterChannel(mockChannel.Object);
var _ = new ChannelMessage(
Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(),
"sender-1",
"Sender Name",
"Hello",
DateTimeOffset.UtcNow);
// var eventArgs = new ChannelMessageReceivedEventArgs
// {
// Message = message,
// Channel = mockChannel.Object
// };
Assert.That(capturedArgs, Is.Not.Null);
}
}