SeibroXrcStkOptionXrcParserTests.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroXrcStkOptionXrcParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_EmptySampleXml_ReturnsZeroRows_NoThrow()
  8. {
  9. // ⚠️ getXrcStkOptionXrcInfo 실샘플이 result="0"(0행) — 라이브 필드 검증 불가. 빈 결과 → 0행·무예외만 검증.
  10. var envelope = SeibroXml.Parse(SeibroFixtures.Read("getXrcStkOptionXrcInfo.xml"));
  11. Assert.AreEqual(0, envelope.ResultCount, "fixture 는 result=0");
  12. var rows = SeibroXrcStkOptionXrcParser.Parse(envelope);
  13. Assert.AreEqual(0, rows.Count);
  14. }
  15. [TestMethod]
  16. public void Parse_SyntheticSpecXml_MapsFields()
  17. {
  18. // 빈 fixture 대응 — 주식.md 스펙 기준 합성 XML 로 필드 매핑 로직만 검증 (운영 첫 수집 시 실 필드명 로그 확인 필요).
  19. const string xml = """
  20. <vector result="1">
  21. <data vectorkey="0" type="Document"><result>
  22. <BOND_ISIN value="KR6019591561"/>
  23. <BOND_KOR_SECN_NM value="에이비씨5CB"/>
  24. <BOND_KIND_NM value="CB"/>
  25. <XRC_STK_ISIN value="KR7019590007"/>
  26. <STK_KOR_SECN_NM value="에이비씨"/>
  27. <RGT_STD_DT value="20180321"/>
  28. <XRC_POSS_BEGIN_DT value="20160609"/>
  29. <XRC_POSS_EXPRY_DT value="20200609"/>
  30. <XRC_AMT value="100000000"/>
  31. <XRC_QTY value="20000"/>
  32. <XRC_PRICE value="5000.0"/>
  33. <LIST_DT value="20180405"/>
  34. </result></data>
  35. </vector>
  36. """;
  37. var rows = SeibroXrcStkOptionXrcParser.Parse(SeibroXml.Parse(xml));
  38. Assert.AreEqual(1, rows.Count);
  39. var r = rows[0];
  40. Assert.AreEqual("KR6019591561", r.BondIsin);
  41. Assert.AreEqual("CB", r.BondKindNm);
  42. Assert.AreEqual("KR7019590007", r.XrcStkIsin);
  43. Assert.AreEqual(new DateOnly(2018, 3, 21), r.RgtStdDt, "권리행사일");
  44. Assert.AreEqual(new DateOnly(2016, 6, 9), r.XrcPossBeginDt);
  45. Assert.AreEqual(20000m, r.XrcQty);
  46. Assert.AreEqual(5000m, r.XrcPrice);
  47. Assert.AreEqual(new DateOnly(2018, 4, 5), r.ListDt);
  48. }
  49. [TestMethod]
  50. public void Parse_SkipsRow_WhenBondIsinOrDateMissing()
  51. {
  52. // BOND_ISIN 또는 RGT_STD_DT 없으면 건너뛴다
  53. const string xml = """
  54. <vector result="1">
  55. <data vectorkey="0" type="Document"><result>
  56. <BOND_ISIN value="KR6019591561"/>
  57. <XRC_QTY value="100"/>
  58. </result></data>
  59. </vector>
  60. """;
  61. var rows = SeibroXrcStkOptionXrcParser.Parse(SeibroXml.Parse(xml));
  62. Assert.AreEqual(0, rows.Count);
  63. }
  64. }