SeibroUnlistCirclParserTests.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroUnlistCirclParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsFields_UsesSecnKacdNm()
  8. {
  9. // SEIBro getUnlistCirclInfo 실응답 fixture — 1행. ⚠️ 종목종류명은 SECN_KACD_NM (스펙 SECN_KACA_NM 오기).
  10. var rows = SeibroUnlistCirclParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getUnlistCirclInfo.xml")));
  11. Assert.AreEqual(1, rows.Count);
  12. var row = rows[0];
  13. Assert.AreEqual("KR7064400005", row.Isin);
  14. Assert.AreEqual("064400", row.ShotnIsin);
  15. Assert.AreEqual("엘지씨엔에스", row.RepSecnNm);
  16. Assert.AreEqual("보통주", row.SecnKacdNm, "SECN_KACD_NM (스펙 오기 SECN_KACA_NM 아님)");
  17. Assert.AreEqual(0L, row.GenDepoQty, "예탁수량 0");
  18. Assert.AreEqual(0L, row.RthingReturnStkqty);
  19. Assert.AreEqual(1400L, row.AcnttrQty, "계좌대체수량");
  20. Assert.IsFalse(row.IsElectronicSecurity!.Value, "ELTSC_YN=N → false");
  21. }
  22. [TestMethod]
  23. public void Parse_SkipsRow_WhenIsinMissing()
  24. {
  25. // 기대 행위: ISIN 또는 대표명 없으면 건너뛴다
  26. const string xml = """
  27. <vector result="2">
  28. <data vectorkey="0" type="Document"><result>
  29. <REP_SECN_NM value="ISIN없음"/>
  30. <GEN_DEPO_QTY value="100"/>
  31. </result></data>
  32. <data vectorkey="1" type="Document"><result>
  33. <ISIN value="KR7099999999"/>
  34. <SHOTN_ISIN value="099999"/>
  35. <REP_SECN_NM value="정상"/>
  36. <SECN_KACD_NM value="우선주"/>
  37. <GEN_DEPO_QTY value="5000"/>
  38. <ELTSC_YN value="Y"/>
  39. </result></data>
  40. </vector>
  41. """;
  42. var rows = SeibroUnlistCirclParser.Parse(SeibroXml.Parse(xml));
  43. Assert.AreEqual(1, rows.Count);
  44. Assert.AreEqual("KR7099999999", rows[0].Isin);
  45. Assert.AreEqual("우선주", rows[0].SecnKacdNm);
  46. Assert.IsTrue(rows[0].IsElectronicSecurity!.Value);
  47. }
  48. }