SeibroDerivCombiIssuParserTests.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. /// <summary>SEIBro getDerivCombiIssuInfo 파서 — 소문자 &lt;result&gt; 래퍼(래퍼 대소문자 무시 흡수) 3필드 매핑 + 자연키 ISIN 결측 스킵.</summary>
  4. [TestClass]
  5. public sealed class SeibroDerivCombiIssuParserTests
  6. {
  7. [TestMethod]
  8. public void Parse_SampleXml_LowercaseWrapper_MapsIssuanceRows()
  9. {
  10. var rows = SeibroDerivCombiIssuParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getDerivCombiIssuInfo.xml")));
  11. // 실샘플은 다수 종목(발행일 스윕 결과). 첫 행 검증 + 발행회사고객번호 정수 파싱.
  12. Assert.IsTrue(rows.Count > 1, "다수 발행종목");
  13. var first = rows[0];
  14. Assert.AreEqual("KR6533308872", first.Isin);
  15. Assert.AreEqual("삼성증권19370(ELS)", first.KorSecnNm);
  16. Assert.AreEqual(1636, first.IssucoCustno);
  17. // 사모 종목명(괄호) 도 정상 매핑
  18. var privateOffer = rows.Single(c => c.Isin == "KR6573314871");
  19. Assert.AreEqual("한국투자증권7133(사모/ELS)", privateOffer.KorSecnNm);
  20. Assert.AreEqual(3049, privateOffer.IssucoCustno);
  21. }
  22. [TestMethod]
  23. public void Parse_MissingIsin_SkipsRow()
  24. {
  25. const string xml = """
  26. <vector result="2">
  27. <data vectorkey="0" type="Document"><result><KOR_SECN_NM value="종목명"/><ISSUCO_CUSTNO value="1"/></result></data>
  28. <data vectorkey="1" type="Document"><result><ISIN value="KR6533308872"/></result></data>
  29. </vector>
  30. """;
  31. var rows = SeibroDerivCombiIssuParser.Parse(SeibroXml.Parse(xml));
  32. Assert.AreEqual(1, rows.Count, "ISIN 없는 행 스킵");
  33. Assert.AreEqual("KR6533308872", rows[0].Isin);
  34. }
  35. }