Phase 7: Tests erweitert + Mongo-Parser extrahiert (testbar)

Tests (jetzt 48 grün):
- DbContextMappingTests: sichert core_/mod_-Tabellennamen, Position-Composite-Key,
  TrackedTrader-Key, ClosedTradeRow nicht gemappt, AccountState.OpenPositions ignoriert.
- PositionRepositoryTests: Live/Demo-Trennung, Upsert setzt Account+Demo-Flag,
  Update ohne Duplikat, DeleteLive, DropDemo.
- MarketRepositoryTests: GetActive filtert Closed, Upsert-Update, FindByTokenId.
- TradeLogRepositoryTests: GetRecent (Sortierung+Limit), Find-Predikat, Guid-Id unique.
- MongoExportParserTests: String-Dezimale, null->"", fehlende Felder->Default,
  AssignedAccountIds-Array, Category-Default, Nicht-Array->leer.

Refactor:
- Mongo-Export-Parsing aus ConfigMigrator in testbare Klasse
  PolyTrader.Modules.CopyTrading.ConfigImport.MongoExportParser ausgelagert
  (ParseAccounts -> Account+Settings, ParseTraders). ConfigMigrator nutzt sie;
  --migrate-json end-to-end verifiziert (3/3/32).
- PolyTrader.App.csproj: tests/** vom Default-Glob ausgeschlossen (App zog sonst
  die Testdateien mit rein -> doppelte AssemblyInfo/Xunit-Fehler).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-06 11:52:52 +02:00
co-authored by Claude Opus 4.8
parent ca16cd8a91
commit 1b51872f00
8 changed files with 549 additions and 121 deletions
@@ -0,0 +1,46 @@
using System.Linq;
using PolyTrader.Core.Persistence.Ef;
using PolyTrader.Tests.TestSupport;
using PolyTraderSharp.Models;
using Xunit;
namespace PolyTrader.Tests
{
public class MarketRepositoryTests
{
private static EfMarketRepository NewRepo() =>
new(new InMemoryContextFactory<CoreDbContext>(o => new CoreDbContext(o)));
[Fact]
public void GetActive_returns_only_non_closed_markets()
{
var repo = NewRepo();
repo.Upsert(new MarketData { Id = "m1", Closed = false });
repo.Upsert(new MarketData { Id = "m2", Closed = true });
var active = repo.GetActive();
Assert.Single(active);
Assert.Equal("m1", active[0].Id);
}
[Fact]
public void Upsert_updates_existing_market()
{
var repo = NewRepo();
repo.Upsert(new MarketData { Id = "m1", Question = "old" });
repo.Upsert(new MarketData { Id = "m1", Question = "new" });
Assert.Equal("new", repo.GetById("m1")!.Question);
}
[Fact]
public void FindByTokenId_matches_within_clob_token_ids()
{
var repo = NewRepo();
repo.Upsert(new MarketData { Id = "m1", ClobTokenIds = "[\"abc\",\"def\"]" });
Assert.Equal("m1", repo.FindByTokenId("def")!.Id);
Assert.Null(repo.FindByTokenId("zzz"));
}
}
}