@
R1: Umbau auf Multi-Projekt-Struktur (Vorbild PolytraderSharp) Kurskorrektur: Vorbild ist PolytraderSharp (C#), nicht die veraltete Python-Version. Reiner Strukturumbau, Verhalten unveraendert. - src/IBKRTrader.Core (classlib): Core-Code + UI-Contract (ModuleFormBase, WindowManager) - src/IBKRTrader.Modules.CongressTrading (classlib, referenziert nur Core) - Root: IBKRTrader.App (WinExe) referenziert Core + Modul - tests/IBKRTrader.Tests: Referenzen auf Core + Modul - Neue .slnx; ungenutztes HtmlAgilityPack entfernt - docs/ARCHITECTURE.md: korrigierter Ziel-Stand + R-Phasenplan - Build + 38/38 Tests gruen; App startet Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> @
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user