| 12345678910111213141516171819202122232425262728293031323334353637 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- /// <summary>SEIBro getNationFrsecCusInfo 파서 — 소문자 <result> 래퍼, SECN_TPCD·FRSEC_CUS_AMT USD 소수 매핑 + SECN_TPCD 결측 스킵.</summary>
- [TestClass]
- public sealed class SeibroNationFrsecCusParserTests
- {
- [TestMethod]
- public void Parse_SampleXml_MapsSecnTpcdAndCustodyAmount()
- {
- var rows = SeibroNationFrsecCusParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getNationFrsecCusInfo.xml")));
- Assert.AreEqual(4, rows.Count, "종목구분 4행");
- var stock = rows.Single(c => c.SecnTpcd == "71");
- Assert.AreEqual(5509745879.73m, stock.FrsecCusAmt, "외화주식 보관금액 USD 소수");
- var bond = rows.Single(c => c.SecnTpcd == "75");
- Assert.AreEqual(245404525m, bond.FrsecCusAmt, "외화채권 정수 금액");
- }
- [TestMethod]
- public void Parse_MissingSecnTpcd_SkipsRow()
- {
- const string xml = """
- <vector result="2">
- <data vectorkey="0" type="Document"><result><FRSEC_CUS_AMT value="100.5"/></result></data>
- <data vectorkey="1" type="Document"><result><SECN_TPCD value="71"/><FRSEC_CUS_AMT value="200.25"/></result></data>
- </vector>
- """;
- var rows = SeibroNationFrsecCusParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(1, rows.Count, "종목구분 없는 행 스킵");
- Assert.AreEqual("71", rows[0].SecnTpcd);
- Assert.AreEqual(200.25m, rows[0].FrsecCusAmt);
- }
- }
|