SeibroNationFrsecCusParserTests.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. /// <summary>SEIBro getNationFrsecCusInfo 파서 — 소문자 &lt;result&gt; 래퍼, SECN_TPCD·FRSEC_CUS_AMT USD 소수 매핑 + SECN_TPCD 결측 스킵.</summary>
  4. [TestClass]
  5. public sealed class SeibroNationFrsecCusParserTests
  6. {
  7. [TestMethod]
  8. public void Parse_SampleXml_MapsSecnTpcdAndCustodyAmount()
  9. {
  10. var rows = SeibroNationFrsecCusParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getNationFrsecCusInfo.xml")));
  11. Assert.AreEqual(4, rows.Count, "종목구분 4행");
  12. var stock = rows.Single(c => c.SecnTpcd == "71");
  13. Assert.AreEqual(5509745879.73m, stock.FrsecCusAmt, "외화주식 보관금액 USD 소수");
  14. var bond = rows.Single(c => c.SecnTpcd == "75");
  15. Assert.AreEqual(245404525m, bond.FrsecCusAmt, "외화채권 정수 금액");
  16. }
  17. [TestMethod]
  18. public void Parse_MissingSecnTpcd_SkipsRow()
  19. {
  20. const string xml = """
  21. <vector result="2">
  22. <data vectorkey="0" type="Document"><result><FRSEC_CUS_AMT value="100.5"/></result></data>
  23. <data vectorkey="1" type="Document"><result><SECN_TPCD value="71"/><FRSEC_CUS_AMT value="200.25"/></result></data>
  24. </vector>
  25. """;
  26. var rows = SeibroNationFrsecCusParser.Parse(SeibroXml.Parse(xml));
  27. Assert.AreEqual(1, rows.Count, "종목구분 없는 행 스킵");
  28. Assert.AreEqual("71", rows[0].SecnTpcd);
  29. Assert.AreEqual(200.25m, rows[0].FrsecCusAmt);
  30. }
  31. }