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.
This commit is contained in:
2026-04-04 04:12:24 +02:00
parent 9a05bae4a9
commit f21d55d87d
12 changed files with 1300 additions and 0 deletions
@@ -0,0 +1,110 @@
using Luna.Channels.Abstractions;
using Luna.Channels.Tests.Stubs;
using Luna.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
namespace Luna.Channels.Tests;
[TestFixture]
[Category("Unit")]
public class DependencyInjectionTests
{
private ServiceCollection _services = null!;
[SetUp]
public void SetUp()
{
_services = new ServiceCollection();
}
[Test]
public void AddChannels_RegistersIChannelManager_AsSingleton()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var descriptor = _services.FirstOrDefault(d => d.ServiceType == typeof(IChannelManager));
Assert.That(descriptor, Is.Not.Null);
Assert.That(descriptor!.Lifetime, Is.EqualTo(ServiceLifetime.Singleton));
}
[Test]
public void AddChannels_IChannelManager_IsResolvableFromContainer()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var manager = provider.GetService<IChannelManager>();
Assert.That(manager, Is.Not.Null);
}
[Test]
public void AddChannels_TelegramOptions_IsRegistered()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var descriptor = _services.FirstOrDefault(d =>
d.ServiceType.IsGenericType &&
d.ServiceType.GetGenericTypeDefinition() == typeof(IOptions<>) &&
d.ServiceType.GetGenericArguments()[0] == typeof(TelegramOptions));
Assert.That(descriptor, Is.Not.Null,
"AddChannels() must register TelegramOptions via IOptions<TelegramOptions>");
}
[Test]
public void AddChannels_CliChannel_IsRegistered()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var channels = provider.GetServices<IChannel>().ToList();
var channelTypes = channels.Select(c => c.ChannelType).ToList();
Assert.That(channelTypes, Contains.Item("cli"),
"AddChannels() must register a CliChannel with ChannelType 'cli'");
}
[Test]
public void AddChannels_TelegramChannel_IsRegistered()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var channels = provider.GetServices<IChannel>().ToList();
var channelTypes = channels.Select(c => c.ChannelType).ToList();
Assert.That(channelTypes, Contains.Item("telegram"),
"AddChannels() must register a TelegramChannel with ChannelType 'telegram'");
}
[Test]
public void AddChannels_CalledTwice_DoesNotDuplicateSingletonRegistration()
{
_services.AddChannels();
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var descriptors = _services.Where(d => d.ServiceType == typeof(IChannelManager)).ToList();
Assert.That(descriptors, Has.Count.EqualTo(1),
"Calling AddChannels() twice must not register IChannelManager twice");
}
[Test]
public void AddChannels_SameProviderInstance_ReturnsSameIChannelManager()
{
_services.AddChannels();
var provider = _services.BuildServiceProvider();
var first = provider.GetRequiredService<IChannelManager>();
var second = provider.GetRequiredService<IChannelManager>();
Assert.That(first, Is.SameAs(second),
"IChannelManager must be registered as Singleton — same instance on every resolve");
}
}