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>
@
This commit is contained in:
Richard
2026-07-27 10:07:47 +02:00
parent 9abad277c2
commit af398353f0
13 changed files with 449 additions and 35 deletions
@@ -0,0 +1,49 @@
using FluentAssertions;
using IBKRTrader.Modules.CongressTrading;
using IBKRTrader.Modules.CongressTrading.Database;
using IBKRTrader.Modules.CongressTrading.Scraper;
using IBKRTrader.Modules.CongressTrading.Workers;
using Microsoft.Extensions.DependencyInjection;
namespace IBKRTrader.Tests.Modules;
[Trait("cat", "unit")]
public class CongressTradingModuleTests
{
[Fact]
public void Metadata_IsAsExpected()
{
var module = new CongressTradingModule();
module.Key.Should().Be("CT");
module.DisplayName.Should().NotBeNullOrWhiteSpace();
module.Version.Should().Be("1.0.0");
}
[Fact]
public void RegisterServices_RegistersAllModuleServices()
{
var services = new ServiceCollection();
new CongressTradingModule().RegisterServices(services);
var registered = services.Select(d => d.ServiceType).ToList();
registered.Should().Contain(new[]
{
typeof(CongressMigrations),
typeof(CongressRepository),
typeof(CapitolTradesScraper),
typeof(CongressHistoryImportWorker),
typeof(CongressScrapeWorker),
});
}
[Fact]
public void CreateWindow_ReturnsForm()
{
using var form = new CongressTradingModule().CreateWindow(new ServiceCollection().BuildServiceProvider());
form.Should().NotBeNull();
form.Text.Should().Contain("CT");
}
}