SeibroStkStatParserTests.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroStkStatParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsFields_Samsung()
  8. {
  9. // SEIBro getStkStatInfo 실응답 fixture (삼성전자) — PVAL/VOTRNO/TOTAL_STK_CNT/ELTSC_YN/ISSUCO_CUSTNO 매핑
  10. var rows = SeibroStkStatParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getStkStatInfo.xml")));
  11. Assert.AreEqual(1, rows.Count);
  12. var row = rows[0];
  13. Assert.AreEqual(593, row.IssucoCustno);
  14. Assert.AreEqual("KR7005930003", row.Isin);
  15. Assert.AreEqual("005930", row.ShortCode);
  16. Assert.AreEqual(100m, row.FaceValue, "PVAL 액면가");
  17. Assert.AreEqual(1m, row.VotingRights, "VOTRNO 1주당 의결권수");
  18. Assert.AreEqual(6419324700L, row.TotalIssuedShares, "TOTAL_STK_CNT 총발행주식수");
  19. Assert.IsFalse(row.IsElectronicSecurity!.Value, "ELTSC_YN=N → false (예탁증권)");
  20. }
  21. [TestMethod]
  22. public void Parse_EltscYn_Y_True_AndMissingNumerics_Null()
  23. {
  24. const string xml = """
  25. <vector result="1">
  26. <data vectorkey="0" type="Document"><result>
  27. <ISSUCO_CUSTNO value="80"/>
  28. <PVAL value="500.5"/>
  29. <VOTRNO value=""/>
  30. <ELTSC_YN value="Y"/>
  31. </result></data>
  32. </vector>
  33. """;
  34. var rows = SeibroStkStatParser.Parse(SeibroXml.Parse(xml));
  35. var row = rows[0];
  36. Assert.AreEqual(500.5m, row.FaceValue, "소수 액면가 파싱");
  37. Assert.IsNull(row.VotingRights, "value=\"\" → null (0 과 구분)");
  38. Assert.IsNull(row.TotalIssuedShares, "element 생략 → null");
  39. Assert.IsNull(row.Isin);
  40. Assert.IsTrue(row.IsElectronicSecurity!.Value, "ELTSC_YN=Y → true (전자증권)");
  41. }
  42. }