Files
Luna/Luna.Channels.Tests/ChannelManagerInterfaceTests.cs
T
darman f21d55d87d Add channel system unit and integration tests
Comprehensive NUnit test suite covering ChannelManager, CliChannel,
TelegramChannel, DI registration, and integration scenarios. Uses
Moq for mocking with test stubs for isolated unit testing.
2026-04-04 04:12:24 +02:00

115 lines
3.6 KiB
C#

using Luna.Channels.Abstractions;
using Luna.Channels.Tests.Stubs;
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 message = 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);
}
}