using Infrastructure.StockData; namespace Application.Tests; /// SEIBro getNationFrsecSetlInfo 파서 — INTL_BIZ_CACD(1110매수/1120매도)·SECN_TPCD·SETL_COUNT·FRSEC_SETL_AMT 매핑 + 자연키 결측 스킵. [TestClass] public sealed class SeibroNationFrsecSetlParserTests { [TestMethod] public void Parse_SampleXml_MapsBuySellRows() { var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getNationFrsecSetlInfo.xml"))); Assert.AreEqual(7, rows.Count, "매수4 + 매도4 중 실샘플 7행"); var buyStock = rows.Single(c => c.IntlBizCacd == "1110" && c.SecnTpcd == "71"); Assert.AreEqual(1591L, buyStock.SetlCount, "매수 외화주식 결제건수"); Assert.AreEqual(37289660.18m, buyStock.FrsecSetlAmt, "결제금액 USD"); var sellStock = rows.Single(c => c.IntlBizCacd == "1120" && c.SecnTpcd == "71"); Assert.AreEqual(917L, sellStock.SetlCount, "매도 외화주식 결제건수"); Assert.AreEqual(34514711.36m, sellStock.FrsecSetlAmt); } [TestMethod] public void Parse_MissingKeyField_SkipsRow() { const string xml = """ """; var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count, "INTL_BIZ_CACD 또는 SECN_TPCD 없는 행 스킵"); Assert.AreEqual(3L, rows[0].SetlCount); } }