SeibroNationFrsecSetlParserTests.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. /// <summary>SEIBro getNationFrsecSetlInfo 파서 — INTL_BIZ_CACD(1110매수/1120매도)·SECN_TPCD·SETL_COUNT·FRSEC_SETL_AMT 매핑 + 자연키 결측 스킵.</summary>
  4. [TestClass]
  5. public sealed class SeibroNationFrsecSetlParserTests
  6. {
  7. [TestMethod]
  8. public void Parse_SampleXml_MapsBuySellRows()
  9. {
  10. var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getNationFrsecSetlInfo.xml")));
  11. Assert.AreEqual(7, rows.Count, "매수4 + 매도4 중 실샘플 7행");
  12. var buyStock = rows.Single(c => c.IntlBizCacd == "1110" && c.SecnTpcd == "71");
  13. Assert.AreEqual(1591L, buyStock.SetlCount, "매수 외화주식 결제건수");
  14. Assert.AreEqual(37289660.18m, buyStock.FrsecSetlAmt, "결제금액 USD");
  15. var sellStock = rows.Single(c => c.IntlBizCacd == "1120" && c.SecnTpcd == "71");
  16. Assert.AreEqual(917L, sellStock.SetlCount, "매도 외화주식 결제건수");
  17. Assert.AreEqual(34514711.36m, sellStock.FrsecSetlAmt);
  18. }
  19. [TestMethod]
  20. public void Parse_MissingKeyField_SkipsRow()
  21. {
  22. const string xml = """
  23. <vector result="3">
  24. <data vectorkey="0" type="Document"><result><SECN_TPCD value="71"/><SETL_COUNT value="10"/></result></data>
  25. <data vectorkey="1" type="Document"><result><INTL_BIZ_CACD value="1110"/><SETL_COUNT value="5"/></result></data>
  26. <data vectorkey="2" type="Document"><result><INTL_BIZ_CACD value="1110"/><SECN_TPCD value="71"/><SETL_COUNT value="3"/></result></data>
  27. </vector>
  28. """;
  29. var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(xml));
  30. Assert.AreEqual(1, rows.Count, "INTL_BIZ_CACD 또는 SECN_TPCD 없는 행 스킵");
  31. Assert.AreEqual(3L, rows[0].SetlCount);
  32. }
  33. }