SeibroXrcStkStatParserTests.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroXrcStkStatParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_EmptySampleXml_ReturnsZeroRows_NoThrow()
  8. {
  9. // ⚠️ getXrcStkStatInfo 실샘플이 result="0"(0행) — 라이브 필드 검증 불가. 빈 결과 → 0행·무예외만 검증.
  10. var envelope = SeibroXml.Parse(SeibroFixtures.Read("getXrcStkStatInfo.xml"));
  11. Assert.AreEqual(0, envelope.ResultCount, "fixture 는 result=0");
  12. var rows = SeibroXrcStkStatParser.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="KR6002221887"/>
  23. <BOND_SECN_NM value="한일철강3CB"/>
  24. <BOND_KIND_NM value="CB"/>
  25. <XRC_STK_ISIN value="KR7002220002"/>
  26. <STK_SECN_NM value="한일철강"/>
  27. <XRC_RATIO value="1.0"/>
  28. <XRC_PRICE value="2850.5"/>
  29. <SETACC_ENDTERM_LIMIT_DAYS value="15"/>
  30. <NEWSTK_ALOC_DD_BF_LIMIT_DAYS value="7"/>
  31. <DMAN_LIMIT_RSN_CONTENT value="정관상 제한"/>
  32. </result></data>
  33. </vector>
  34. """;
  35. var rows = SeibroXrcStkStatParser.Parse(SeibroXml.Parse(xml));
  36. Assert.AreEqual(1, rows.Count);
  37. var r = rows[0];
  38. Assert.AreEqual("KR6002221887", r.BondIsin);
  39. Assert.AreEqual("CB", r.BondKindNm);
  40. Assert.AreEqual("KR7002220002", r.XrcStkIsin);
  41. Assert.AreEqual(2850.5m, r.XrcPrice);
  42. Assert.AreEqual(15, r.SetaccEndtermLimitDays);
  43. Assert.AreEqual("정관상 제한", r.DmanLimitRsnContent);
  44. }
  45. [TestMethod]
  46. public void Parse_SkipsRow_WhenIsinsMissing()
  47. {
  48. // BOND_ISIN 또는 XRC_STK_ISIN 없으면 건너뛴다
  49. const string xml = """
  50. <vector result="1">
  51. <data vectorkey="0" type="Document"><result>
  52. <BOND_ISIN value="KR6002221887"/>
  53. </result></data>
  54. </vector>
  55. """;
  56. var rows = SeibroXrcStkStatParser.Parse(SeibroXml.Parse(xml));
  57. Assert.AreEqual(0, rows.Count);
  58. }
  59. }