using Infrastructure.StockData; namespace Application.Tests; [TestClass] public sealed class SeibroXrcStkStatParserTests { [TestMethod] public void Parse_EmptySampleXml_ReturnsZeroRows_NoThrow() { // ⚠️ getXrcStkStatInfo 실샘플이 result="0"(0행) — 라이브 필드 검증 불가. 빈 결과 → 0행·무예외만 검증. var envelope = SeibroXml.Parse(SeibroFixtures.Read("getXrcStkStatInfo.xml")); Assert.AreEqual(0, envelope.ResultCount, "fixture 는 result=0"); var rows = SeibroXrcStkStatParser.Parse(envelope); Assert.AreEqual(0, rows.Count); } [TestMethod] public void Parse_SyntheticSpecXml_MapsFields() { // 빈 fixture 대응 — 주식.md 스펙 기준 합성 XML 로 필드 매핑 로직만 검증 (운영 첫 수집 시 실 필드명 로그 확인 필요). const string xml = """ """; var rows = SeibroXrcStkStatParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count); var r = rows[0]; Assert.AreEqual("KR6002221887", r.BondIsin); Assert.AreEqual("CB", r.BondKindNm); Assert.AreEqual("KR7002220002", r.XrcStkIsin); Assert.AreEqual(2850.5m, r.XrcPrice); Assert.AreEqual(15, r.SetaccEndtermLimitDays); Assert.AreEqual("정관상 제한", r.DmanLimitRsnContent); } [TestMethod] public void Parse_SkipsRow_WhenIsinsMissing() { // BOND_ISIN 또는 XRC_STK_ISIN 없으면 건너뛴다 const string xml = """ """; var rows = SeibroXrcStkStatParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(0, rows.Count); } }