| 12345678910111213141516171819202122232425262728293031323334353637 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- /// <summary>SEIBro getRedIsinInfo 파서 — 대문자 <RESULT> 래퍼. 상환일별 상환종목·행사구분·수량 매핑 + 자연키(ISIN/행사구분) 결측 스킵.</summary>
- [TestClass]
- public sealed class SeibroRedIsinParserTests
- {
- [TestMethod]
- public void Parse_SampleXml_MapsRedemptionRows()
- {
- var rows = SeibroRedIsinParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getRedIsinInfo.xml")));
- Assert.AreEqual(12, rows.Count, "상환종목 12건");
- var first = rows[0];
- Assert.AreEqual("KR6552327845", first.Isin);
- Assert.AreEqual("3", first.DerisecExerTpcd, "조기상환");
- Assert.AreEqual(132000000m, first.RedQty);
- var large = rows.Single(c => c.Isin == "KR6733302857");
- Assert.AreEqual(19850000000m, large.RedQty, "대형 상환수량");
- }
- [TestMethod]
- public void Parse_MissingKeys_SkipsRow()
- {
- const string xml = """
- <vector result="2">
- <data vectorkey="0" type="Document"><RESULT><ISIN value="KR6552327845"/><RED_QTY value="1"/></RESULT></data>
- <data vectorkey="1" type="Document"><RESULT><DERISEC_EXER_TPCD value="3"/><RED_QTY value="1"/></RESULT></data>
- </vector>
- """;
- var rows = SeibroRedIsinParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(0, rows.Count, "ISIN 없음·행사구분 없음 둘 다 스킵");
- }
- }
|