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

111 lines
3.4 KiB
C#

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 = [];
}
[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");
}
}