SeibroStkIncdecParserTests.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroStkIncdecParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsFields_AndNegativeQty()
  8. {
  9. // SEIBro getStkIncdecDetails 실응답 fixture (삼성전자) — 3행. 이익소각(음수)·액면분할.
  10. var rows = SeibroStkIncdecParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getStkIncdecDetails.xml")));
  11. Assert.AreEqual(3, rows.Count);
  12. var split = rows.Single(c => c.SecnIssuNm == "액면분할");
  13. Assert.AreEqual(593, split.IssucoCustno);
  14. Assert.AreEqual("KR7005930003", split.Isin);
  15. Assert.AreEqual("0101", split.SecnKacd, "보통주");
  16. Assert.AreEqual(75, split.SecnIssuNtimes);
  17. Assert.AreEqual(new DateOnly(2018, 5, 3), split.IssuDt);
  18. Assert.AreEqual(100m, split.Issuprc);
  19. Assert.AreEqual(6419324700L, split.IssuQty);
  20. Assert.AreEqual("201", split.SecnIssuRacd);
  21. Assert.AreEqual(new DateOnly(2018, 5, 4), split.ListDt);
  22. var cancel = rows.Single(c => c.IssuDt == new DateOnly(2018, 1, 30));
  23. Assert.AreEqual(-712000L, cancel.IssuQty, "이익소각 감소 = 음수 부호 보존");
  24. Assert.AreEqual(0m, cancel.Issuprc, "ISSUPRC 0 은 유효값");
  25. }
  26. [TestMethod]
  27. public void Parse_SameNtimes_DifferentDate_BothKept()
  28. {
  29. // 기대 행위: 동일 발행횟수(75)가 발행일/사유 다르면 각각 별개 행 — (Isin,Ntimes) 단독 자연키로는 충돌하므로 IssuDt·Racd 포함
  30. var rows = SeibroStkIncdecParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getStkIncdecDetails.xml")));
  31. var ntimes75 = rows.Where(c => c.SecnIssuNtimes == 75).ToList();
  32. Assert.AreEqual(2, ntimes75.Count, "발행횟수 75 가 2행 (액면분할 + 이익소각)");
  33. }
  34. }