using Infrastructure.StockData; namespace Application.Tests; /// SEIBro getBondOptionXrcInfo 파서 — 실샘플(1행) 필드 매핑 + 빈 날짜(XRC_BEGIN_DT="") null + 자연키 결측 스킵. [TestClass] public sealed class SeibroBondOptionXrcParserTests { [TestMethod] public void Parse_SampleXml_MapsRedemptionRow() { var rows = SeibroBondOptionXrcParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getBondOptionXrcInfo.xml"))); Assert.AreEqual(1, rows.Count); var row = rows[0]; Assert.AreEqual("KR6225693573", row.Isin); Assert.AreEqual("제이티캐피탈제일차유동화전문 3-1(콜/변)", row.KorSecnNm); Assert.AreEqual(new DateOnly(2018, 8, 24), row.ErlyRedDt); Assert.IsNull(row.XrcBeginDt, "빈 value 는 null"); Assert.IsNull(row.XrcExpryDt); Assert.AreEqual("9401", row.OptionTpcd, "CALL"); Assert.AreEqual(3.75m, row.ApliIrate); Assert.AreEqual(2000000000m, row.ErlyRedamtVal); Assert.AreEqual(117842465m, row.IntPayAmt); Assert.AreEqual(3.08m, row.XrcRatio); } [TestMethod] public void Parse_MissingErlyRedDt_SkipsRow() { const string xml = """ """; var rows = SeibroBondOptionXrcParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(0, rows.Count, "조기상환일 없으면 스킵"); } }