SeibroCostPaySchedulParserTests.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroCostPaySchedulParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsPaymentRows()
  8. {
  9. // SEIBro getCostPaySchedul 실응답 fixture (2018-07-20 단주대금 다수) — 회사/종목/사유 매핑.
  10. // ⚠️ 응답엔 지급일·구분(요청 파라미터)이 없어 파서는 담지 않는다(배치가 스탬핑).
  11. var rows = SeibroCostPaySchedulParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getCostPaySchedul.xml")));
  12. Assert.IsTrue(rows.Count >= 100, "표본 행 다수");
  13. var first = rows.Single(c => c.Isin == "KR7066980004");
  14. Assert.AreEqual(8176, first.IssucoCustno);
  15. Assert.AreEqual("한성크린텍", first.KorSecnNm);
  16. Assert.AreEqual("0101", first.SecnKacd);
  17. Assert.AreEqual(new DateOnly(2018, 6, 25), first.RgtStdDt);
  18. Assert.AreEqual("국내CB행사", first.RgtRacdNm, "가이드 xlsx 누락분 — 실샘플 확인");
  19. Assert.AreEqual("99", first.RgtRsnDetailSortCd);
  20. // BW 행사도 존재
  21. Assert.IsTrue(rows.Any(c => c.RgtRacdNm == "국내BW행사"));
  22. }
  23. [TestMethod]
  24. public void Parse_SkipsRow_WhenIsinMissing()
  25. {
  26. // 기대 행위: ISSUCO_CUSTNO 또는 ISIN 없으면 건너뛴다
  27. const string xml = """
  28. <vector result="2">
  29. <data vectorkey="0" type="Document"><result>
  30. <ISSUCO_CUSTNO value="10"/>
  31. <KOR_SECN_NM value="ISIN없음"/>
  32. </result></data>
  33. <data vectorkey="1" type="Document"><result>
  34. <ISSUCO_CUSTNO value="10"/>
  35. <ISIN value="KR7000000001"/>
  36. <KOR_SECN_NM value="정상"/>
  37. </result></data>
  38. </vector>
  39. """;
  40. var rows = SeibroCostPaySchedulParser.Parse(SeibroXml.Parse(xml));
  41. Assert.AreEqual(1, rows.Count);
  42. Assert.AreEqual("KR7000000001", rows[0].Isin);
  43. }
  44. }