using Infrastructure.StockData; namespace Application.Tests; [TestClass] public sealed class SeibroUnlistCirclParserTests { [TestMethod] public void Parse_FromSampleXml_MapsFields_UsesSecnKacdNm() { // SEIBro getUnlistCirclInfo 실응답 fixture — 1행. ⚠️ 종목종류명은 SECN_KACD_NM (스펙 SECN_KACA_NM 오기). var rows = SeibroUnlistCirclParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getUnlistCirclInfo.xml"))); Assert.AreEqual(1, rows.Count); var row = rows[0]; Assert.AreEqual("KR7064400005", row.Isin); Assert.AreEqual("064400", row.ShotnIsin); Assert.AreEqual("엘지씨엔에스", row.RepSecnNm); Assert.AreEqual("보통주", row.SecnKacdNm, "SECN_KACD_NM (스펙 오기 SECN_KACA_NM 아님)"); Assert.AreEqual(0L, row.GenDepoQty, "예탁수량 0"); Assert.AreEqual(0L, row.RthingReturnStkqty); Assert.AreEqual(1400L, row.AcnttrQty, "계좌대체수량"); Assert.IsFalse(row.IsElectronicSecurity!.Value, "ELTSC_YN=N → false"); } [TestMethod] public void Parse_SkipsRow_WhenIsinMissing() { // 기대 행위: ISIN 또는 대표명 없으면 건너뛴다 const string xml = """ """; var rows = SeibroUnlistCirclParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count); Assert.AreEqual("KR7099999999", rows[0].Isin); Assert.AreEqual("우선주", rows[0].SecnKacdNm); Assert.IsTrue(rows[0].IsElectronicSecurity!.Value); } }