| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using Domain.Entities.Stocks;
- using CustodyHandler = Application.Features.Api.Stocks.GetForeignCustody.Handler;
- using CustodyQuery = Application.Features.Api.Stocks.GetForeignCustody.Query;
- namespace Application.Tests;
- /// <summary>GetForeignCustody 핸들러 — 국가별 외화증권 보관금액 시계열 + 종목구분 합산/개별 + 국가·기간 필터 검증.</summary>
- [TestClass]
- public sealed class SeibroForeignQueryHandlerTests
- {
- [TestMethod]
- public async Task GetForeignCustody_NoSecnTpcd_SumsAcrossSecnTpcd_OrdersByDate()
- {
- var nation = $"N{Guid.NewGuid().ToString("N")[..1]}";
- using var db = TestDb.Create();
- // 같은 (국가,기준일) 에 종목구분 2종 → 합산되어야. 역순 삽입 → 응답은 오름차순.
- await db.ForeignCustodyNation.AddAsync(ForeignCustodyNation.Create(new DateOnly(2018, 8, 31), nation, "71", 100m));
- await db.ForeignCustodyNation.AddAsync(ForeignCustodyNation.Create(new DateOnly(2018, 8, 31), nation, "75", 50m));
- await db.ForeignCustodyNation.AddAsync(ForeignCustodyNation.Create(new DateOnly(2018, 7, 31), nation, "71", 40m));
- await db.SaveChangesAsync(default);
- var handler = new CustodyHandler(db);
- var result = await handler.Handle(new CustodyQuery(nation, null, new DateOnly(2018, 1, 1), new DateOnly(2018, 12, 31)), default);
- Assert.IsTrue(result.IsSuccess);
- var series = result.Value.Nations.Single(c => c.NationCd == nation);
- Assert.IsNull(series.SecnTpcd, "종목구분 미지정 = 합산");
- Assert.AreEqual(2, series.Points.Count);
- Assert.AreEqual(new DateOnly(2018, 7, 31), series.Points[0].StdDt, "시계열 오름차순");
- Assert.AreEqual(40m, series.Points[0].CustodyAmount);
- Assert.AreEqual(150m, series.Points[1].CustodyAmount, "71+75 합산");
- }
- [TestMethod]
- public async Task GetForeignCustody_WithSecnTpcd_KeepsSeparateSeries()
- {
- var nation = $"M{Guid.NewGuid().ToString("N")[..1]}";
- using var db = TestDb.Create();
- await db.ForeignCustodyNation.AddAsync(ForeignCustodyNation.Create(new DateOnly(2018, 8, 31), nation, "71", 100m));
- await db.ForeignCustodyNation.AddAsync(ForeignCustodyNation.Create(new DateOnly(2018, 8, 31), nation, "75", 50m));
- await db.SaveChangesAsync(default);
- var handler = new CustodyHandler(db);
- var result = await handler.Handle(new CustodyQuery(nation, "71", null, null), default);
- Assert.IsTrue(result.IsSuccess);
- var series = result.Value.Nations.Single(c => c.NationCd == nation);
- Assert.AreEqual("71", series.SecnTpcd, "지정 종목구분");
- Assert.AreEqual(1, series.Points.Count);
- Assert.AreEqual(100m, series.Points[0].CustodyAmount, "75 는 제외");
- }
- [TestMethod]
- public async Task GetForeignCustody_NoData_ReturnsEmpty()
- {
- using var db = TestDb.Create();
- var handler = new CustodyHandler(db);
- var result = await handler.Handle(new CustodyQuery($"Z{Guid.NewGuid().ToString("N")[..1]}", null, null, null), default);
- Assert.IsTrue(result.IsSuccess, "데이터 없어도 성공 (빈 목록)");
- Assert.AreEqual(0, result.Value.Nations.Count);
- }
- }
|