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);
}
}