using Infrastructure.StockData; namespace Application.Tests; /// SEIBro getDerivCombiIssuInfo 파서 — 소문자 <result> 래퍼(래퍼 대소문자 무시 흡수) 3필드 매핑 + 자연키 ISIN 결측 스킵. [TestClass] public sealed class SeibroDerivCombiIssuParserTests { [TestMethod] public void Parse_SampleXml_LowercaseWrapper_MapsIssuanceRows() { var rows = SeibroDerivCombiIssuParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getDerivCombiIssuInfo.xml"))); // 실샘플은 다수 종목(발행일 스윕 결과). 첫 행 검증 + 발행회사고객번호 정수 파싱. Assert.IsTrue(rows.Count > 1, "다수 발행종목"); var first = rows[0]; Assert.AreEqual("KR6533308872", first.Isin); Assert.AreEqual("삼성증권19370(ELS)", first.KorSecnNm); Assert.AreEqual(1636, first.IssucoCustno); // 사모 종목명(괄호) 도 정상 매핑 var privateOffer = rows.Single(c => c.Isin == "KR6573314871"); Assert.AreEqual("한국투자증권7133(사모/ELS)", privateOffer.KorSecnNm); Assert.AreEqual(3049, privateOffer.IssucoCustno); } [TestMethod] public void Parse_MissingIsin_SkipsRow() { const string xml = """ """; var rows = SeibroDerivCombiIssuParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count, "ISIN 없는 행 스킵"); Assert.AreEqual("KR6533308872", rows[0].Isin); } }