using Infrastructure.StockData;
namespace Application.Tests;
/// SEIBro getNationFrsecSetlInfo 파서 — INTL_BIZ_CACD(1110매수/1120매도)·SECN_TPCD·SETL_COUNT·FRSEC_SETL_AMT 매핑 + 자연키 결측 스킵.
[TestClass]
public sealed class SeibroNationFrsecSetlParserTests
{
[TestMethod]
public void Parse_SampleXml_MapsBuySellRows()
{
var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getNationFrsecSetlInfo.xml")));
Assert.AreEqual(7, rows.Count, "매수4 + 매도4 중 실샘플 7행");
var buyStock = rows.Single(c => c.IntlBizCacd == "1110" && c.SecnTpcd == "71");
Assert.AreEqual(1591L, buyStock.SetlCount, "매수 외화주식 결제건수");
Assert.AreEqual(37289660.18m, buyStock.FrsecSetlAmt, "결제금액 USD");
var sellStock = rows.Single(c => c.IntlBizCacd == "1120" && c.SecnTpcd == "71");
Assert.AreEqual(917L, sellStock.SetlCount, "매도 외화주식 결제건수");
Assert.AreEqual(34514711.36m, sellStock.FrsecSetlAmt);
}
[TestMethod]
public void Parse_MissingKeyField_SkipsRow()
{
const string xml = """
""";
var rows = SeibroNationFrsecSetlParser.Parse(SeibroXml.Parse(xml));
Assert.AreEqual(1, rows.Count, "INTL_BIZ_CACD 또는 SECN_TPCD 없는 행 스킵");
Assert.AreEqual(3L, rows[0].SetlCount);
}
}