using Infrastructure.StockData; namespace Application.Tests; [TestClass] public sealed class SeibroCostPaySchedulParserTests { [TestMethod] public void Parse_FromSampleXml_MapsPaymentRows() { // SEIBro getCostPaySchedul 실응답 fixture (2018-07-20 단주대금 다수) — 회사/종목/사유 매핑. // ⚠️ 응답엔 지급일·구분(요청 파라미터)이 없어 파서는 담지 않는다(배치가 스탬핑). var rows = SeibroCostPaySchedulParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getCostPaySchedul.xml"))); Assert.IsTrue(rows.Count >= 100, "표본 행 다수"); var first = rows.Single(c => c.Isin == "KR7066980004"); Assert.AreEqual(8176, first.IssucoCustno); Assert.AreEqual("한성크린텍", first.KorSecnNm); Assert.AreEqual("0101", first.SecnKacd); Assert.AreEqual(new DateOnly(2018, 6, 25), first.RgtStdDt); Assert.AreEqual("국내CB행사", first.RgtRacdNm, "가이드 xlsx 누락분 — 실샘플 확인"); Assert.AreEqual("99", first.RgtRsnDetailSortCd); // BW 행사도 존재 Assert.IsTrue(rows.Any(c => c.RgtRacdNm == "국내BW행사")); } [TestMethod] public void Parse_SkipsRow_WhenIsinMissing() { // 기대 행위: ISSUCO_CUSTNO 또는 ISIN 없으면 건너뛴다 const string xml = """ """; var rows = SeibroCostPaySchedulParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count); Assert.AreEqual("KR7000000001", rows[0].Isin); } }