| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using Domain.Entities.Stocks;
- using RiskHandler = Application.Features.Api.Stocks.GetElsRiskBoard.Handler;
- using RiskQuery = Application.Features.Api.Stocks.GetElsRiskBoard.Query;
- namespace Application.Tests;
- /// <summary>GetElsRiskBoard 핸들러 — 기초자산별 미상환잔액 시계열 그룹화 + 기초자산·종목구분·기간 필터 검증.</summary>
- [TestClass]
- public sealed class SeibroDerivQueryHandlerTests
- {
- [TestMethod]
- public async Task GetElsRiskBoard_GroupsByBasset_AndOrdersPointsByDate()
- {
- var bassetA = $"KSDA{Guid.NewGuid().ToString("N")[..8]}";
- var bassetB = $"KSDB{Guid.NewGuid().ToString("N")[..8]}";
- using var db = TestDb.Create();
- // bassetA(41): 두 기준일 시계열 (역순 삽입 → 응답은 오름차순이어야)
- await db.ElsUnredeemedScale.AddAsync(ElsUnredeemedScale.Create(new DateOnly(2018, 8, 31), bassetA, "41", "HSCEI", 150, 5_000_000_000m));
- await db.ElsUnredeemedScale.AddAsync(ElsUnredeemedScale.Create(new DateOnly(2018, 7, 31), bassetA, "41", "HSCEI", 120, 4_000_000_000m));
- // bassetB(43): 별 시계열
- await db.ElsUnredeemedScale.AddAsync(ElsUnredeemedScale.Create(new DateOnly(2018, 8, 31), bassetB, "43", "WTI", 30, 900_000_000m));
- await db.SaveChangesAsync(default);
- var handler = new RiskHandler(db);
- var result = await handler.Handle(new RiskQuery(null, null, new DateOnly(2018, 1, 1), new DateOnly(2018, 12, 31)), default);
- Assert.IsTrue(result.IsSuccess);
- var seriesA = result.Value.Assets.Single(c => c.BassetCd == bassetA && c.SecnTpcd == "41");
- Assert.AreEqual("HSCEI", seriesA.BassetContent);
- Assert.AreEqual(2, seriesA.Points.Count);
- Assert.AreEqual(new DateOnly(2018, 7, 31), seriesA.Points[0].StdDt, "시계열 오름차순 (앞이 과거)");
- Assert.AreEqual(new DateOnly(2018, 8, 31), seriesA.Points[1].StdDt);
- Assert.AreEqual(5_000_000_000m, seriesA.Points[1].UnredeemedRemaining);
- var seriesB = result.Value.Assets.Single(c => c.BassetCd == bassetB && c.SecnTpcd == "43");
- Assert.AreEqual(1, seriesB.Points.Count);
- }
- [TestMethod]
- public async Task GetElsRiskBoard_FiltersByBassetCd()
- {
- var target = $"KSDT{Guid.NewGuid().ToString("N")[..8]}";
- var other = $"KSDO{Guid.NewGuid().ToString("N")[..8]}";
- using var db = TestDb.Create();
- await db.ElsUnredeemedScale.AddAsync(ElsUnredeemedScale.Create(new DateOnly(2018, 8, 31), target, "41", "타깃", 10, 1_000m));
- await db.ElsUnredeemedScale.AddAsync(ElsUnredeemedScale.Create(new DateOnly(2018, 8, 31), other, "41", "기타", 20, 2_000m));
- await db.SaveChangesAsync(default);
- var handler = new RiskHandler(db);
- var result = await handler.Handle(new RiskQuery(target, null, null, null), default);
- Assert.IsTrue(result.IsSuccess);
- Assert.AreEqual(1, result.Value.Assets.Count, "지정 기초자산만");
- Assert.AreEqual(target, result.Value.Assets[0].BassetCd);
- }
- [TestMethod]
- public async Task GetElsRiskBoard_NoData_ReturnsEmpty()
- {
- using var db = TestDb.Create();
- var handler = new RiskHandler(db);
- var result = await handler.Handle(new RiskQuery($"KSDZ{Guid.NewGuid().ToString("N")[..8]}", null, null, null), default);
- Assert.IsTrue(result.IsSuccess, "데이터 없어도 성공 (빈 목록)");
- Assert.AreEqual(0, result.Value.Assets.Count);
- }
- }
|