using Infrastructure.StockData; namespace Application.Tests; /// SEIBro getBondStatInfo 파서 — 실샘플(1행) 필드 매핑 + 신용등급 4사(빈칸=null 포함) + Y/N·날짜·소수 파싱. [TestClass] public sealed class SeibroBondStatParserTests { [TestMethod] public void Parse_SampleXml_MapsAllFields_AndCreditGrades() { var rows = SeibroBondStatParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getBondStatInfo.xml"))); Assert.AreEqual(1, rows.Count); var f = rows[0]; Assert.AreEqual(29998, f.IssucoCustno); Assert.AreEqual("SK해운 61", f.KorSecnNm); Assert.AreEqual("1108", f.SecnKacd); Assert.AreEqual(new DateOnly(2018, 8, 3), f.IssuDt); Assert.AreEqual(new DateOnly(2020, 2, 3), f.XpirDt); Assert.AreEqual("KRW", f.IssuCurCd); Assert.AreEqual(126000000000m, f.FirstIssuAmt); Assert.AreEqual(4.485m, f.CouponRate); Assert.AreEqual("0000", f.OptionTpcd); Assert.IsFalse(f.ForcErlyRedYn, "FORC_ERLY_RED_YN=N"); Assert.AreEqual("2", f.GrtyTpcd, "무보증"); Assert.AreEqual("1", f.RankTpcd, "선순위"); Assert.IsFalse(f.EltscYn, "ELTSC_YN=N 예탁"); Assert.AreEqual(new DateOnly(2020, 2, 4), f.DlistDt); // 신용등급 4사: KIS/KR 존재, NICE/SCI 는 빈칸 → null Assert.AreEqual("133", f.KisValatGrdCd); Assert.AreEqual("133", f.KrValatGrdCd); Assert.IsNull(f.NiceValatGrdCd, "빈 value 는 null"); Assert.IsNull(f.SciValatGrdCd, "빈 value 는 null"); } }