@
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,65 @@
|
||||
using FluentAssertions;
|
||||
using IBKRTrader.Core.Database;
|
||||
using IBKRTrader.Core.Logging;
|
||||
using IBKRTrader.Core.Settings;
|
||||
using IBKRTrader.Core.Workers;
|
||||
using IBKRTrader.Modules.CongressTrading;
|
||||
using IBKRTrader.Modules.CongressTrading.Database;
|
||||
using IBKRTrader.Modules.CongressTrading.Scraper;
|
||||
using IBKRTrader.Modules.CongressTrading.Workers;
|
||||
using IBKRTrader.UI;
|
||||
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_ReturnsModuleForm()
|
||||
{
|
||||
// Minimaler DI-Container mit allen von CreateWindow benötigten Abhängigkeiten.
|
||||
var services = new ServiceCollection();
|
||||
services.AddSingleton<SettingsService>();
|
||||
services.AddSingleton<LoggingService>();
|
||||
services.AddSingleton<DatabaseService>();
|
||||
services.AddSingleton<IEnumerable<IWorker>>(_ => Array.Empty<IWorker>());
|
||||
services.AddSingleton<WorkerEngine>();
|
||||
var module = new CongressTradingModule();
|
||||
module.RegisterServices(services);
|
||||
|
||||
using var provider = services.BuildServiceProvider();
|
||||
using var form = module.CreateWindow(provider);
|
||||
|
||||
form.Should().BeAssignableTo<ModuleFormBase>();
|
||||
((ModuleFormBase)form).ModuleKey.Should().Be("CT");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user