SeibroRedIsinParserTests.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. /// <summary>SEIBro getRedIsinInfo 파서 — 대문자 &lt;RESULT&gt; 래퍼. 상환일별 상환종목·행사구분·수량 매핑 + 자연키(ISIN/행사구분) 결측 스킵.</summary>
  4. [TestClass]
  5. public sealed class SeibroRedIsinParserTests
  6. {
  7. [TestMethod]
  8. public void Parse_SampleXml_MapsRedemptionRows()
  9. {
  10. var rows = SeibroRedIsinParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getRedIsinInfo.xml")));
  11. Assert.AreEqual(12, rows.Count, "상환종목 12건");
  12. var first = rows[0];
  13. Assert.AreEqual("KR6552327845", first.Isin);
  14. Assert.AreEqual("3", first.DerisecExerTpcd, "조기상환");
  15. Assert.AreEqual(132000000m, first.RedQty);
  16. var large = rows.Single(c => c.Isin == "KR6733302857");
  17. Assert.AreEqual(19850000000m, large.RedQty, "대형 상환수량");
  18. }
  19. [TestMethod]
  20. public void Parse_MissingKeys_SkipsRow()
  21. {
  22. const string xml = """
  23. <vector result="2">
  24. <data vectorkey="0" type="Document"><RESULT><ISIN value="KR6552327845"/><RED_QTY value="1"/></RESULT></data>
  25. <data vectorkey="1" type="Document"><RESULT><DERISEC_EXER_TPCD value="3"/><RED_QTY value="1"/></RESULT></data>
  26. </vector>
  27. """;
  28. var rows = SeibroRedIsinParser.Parse(SeibroXml.Parse(xml));
  29. Assert.AreEqual(0, rows.Count, "ISIN 없음·행사구분 없음 둘 다 스킵");
  30. }
  31. }