using Infrastructure.StockData; namespace Application.Tests; [TestClass] public sealed class SeibroShotnByMartParserTests { [TestMethod] public void Parse_FromSampleXml_MapsFields() { // SEIBro getShotnByMart 실응답 fixture — SHOTN_ISIN/KOR_SECN_NM/ISSUCO_CUSTNO 매핑 var envelope = SeibroXml.Parse(SeibroFixtures.Read("getShotnByMart.xml")); var rows = SeibroShotnByMartParser.Parse(envelope); Assert.AreEqual(envelope.Rows.Count, rows.Count, "샘플 전 행이 세 필드를 갖춰 전부 매핑된다"); var first = rows[0]; Assert.AreEqual("000800", first.ShortCode); Assert.AreEqual("경남기업", first.Name); Assert.AreEqual(80, first.IssucoCustno); } [TestMethod] public void Parse_SkipsRows_MissingRequiredFields() { // 필수 3필드 중 하나라도 없거나 회사번호 비숫자인 행은 건너뛴다 (upsert 자연키 불성립) const string xml = """ """; var rows = SeibroShotnByMartParser.Parse(SeibroXml.Parse(xml)); Assert.AreEqual(1, rows.Count); Assert.AreEqual("005930", rows[0].ShortCode); Assert.AreEqual(593, rows[0].IssucoCustno); } }