114 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|