using Infrastructure.StockData; namespace Application.Tests; /// SEIBro getNationFrsecCusInfo 파서 — 소문자 <result> 래퍼, SECN_TPCD·FRSEC_CUS_AMT USD 소수 매핑 + SECN_TPCD 결측 스킵. [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 = """ """; 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); } }