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