Files
IBKRTrader/IBKRTrader.Tests/Modules/ModuleRegistryTests.cs
T
Richard af398353f0 @
Phase 1: Modul-System formalisiert (IModule + ModuleRegistry)

- Core/Modules/IModule.cs: Vertrag (Key, DisplayName, Description, Version,
  RegisterServices, InitializeAsync, GetWorkers, CreateWindow)
- Core/Modules/ModuleRegistry.cs
- CongressTradingModule auf IModule umgestellt (instanzbasiert, Platzhalter-Fenster)
- Program.cs iteriert ueber IModule[] + Registry; Form1 initialisiert Module ueber Registry
- Testbarkeit: WorkerBase DB-Log-Seam (virtuell); CapitolTradesScraper.ParseTradesFromHtml
  extrahiert (offline gegen ct_raw.html testbar)
- Tests: ModuleRegistry, CongressTradingModule, WorkerBase, CapitolTradesScraper -> 15/15 gruen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
2026-07-27 10:07:47 +02:00

50 lines
1.5 KiB
C#

using FluentAssertions;
using IBKRTrader.Core.Modules;
using IBKRTrader.Core.Workers;
using Microsoft.Extensions.DependencyInjection;
namespace IBKRTrader.Tests.Modules;
[Trait("cat", "unit")]
public class ModuleRegistryTests
{
private sealed class FakeModule(string key) : IModule
{
public string Key => key;
public string DisplayName => $"Fake {key}";
public string Description => "test";
public string Version => "0.0.1";
public void RegisterServices(IServiceCollection services) { }
public Task InitializeAsync(IServiceProvider provider) => Task.CompletedTask;
public IEnumerable<IWorker> GetWorkers(IServiceProvider provider) => [];
public Form CreateWindow(IServiceProvider provider) => new();
}
[Fact]
public void Modules_PreservesRegistrationOrder()
{
var registry = new ModuleRegistry([new FakeModule("A"), new FakeModule("B")]);
registry.Modules.Select(m => m.Key).Should().ContainInOrder("A", "B");
}
[Fact]
public void Find_IsCaseInsensitive()
{
var registry = new ModuleRegistry([new FakeModule("CT")]);
registry.Find("ct").Should().NotBeNull();
registry.Find("CT").Should().NotBeNull();
registry.Find("XX").Should().BeNull();
}
[Fact]
public void Ctor_NullModules_Throws()
{
var act = () => new ModuleRegistry(null!);
act.Should().Throw<ArgumentNullException>();
}
}