| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- /// <summary>
- /// SEIBro getAssetInfo 파서 — 대문자 <RESULT> 래퍼. 다수 기초자산(AssetSeq) + 행사기준가·평가일 매핑.
- /// ⚠️ 기초자산코드 2체계: 반환 STND_BASSET_CD 가 입력 KSD02* 와 다른 KSD31*/KR7* 체계로 와도 **원문 그대로 보존**하는지 확인.
- /// </summary>
- [TestClass]
- public sealed class SeibroAssetParserTests
- {
- [TestMethod]
- public void Parse_SampleXml_MapsAssets_PreservesRawBassetCode()
- {
- var rows = SeibroAssetParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getAssetInfo.xml")));
- Assert.AreEqual(3, rows.Count, "기초자산 3종");
- var hscei = rows.Single(c => c.AssetSeq == 1);
- // 반환 코드 KSD310000306 (입력 HSCEI 는 KSD020000201) — 매핑 흡수 없이 원문 보존
- Assert.AreEqual("KSD310000306", hscei.Fields.StndBassetCd, "반환 코드체계(KSD31*) 원문 보존");
- Assert.AreEqual("Hang Seng China Enterprises Index", hscei.Fields.StndBassetNm);
- Assert.AreEqual(11073m, hscei.Fields.XrcStdprc);
- Assert.AreEqual(55m, hscei.Fields.XrcStopLolmtRatio);
- Assert.AreEqual(6090.15m, hscei.Fields.XrcStopLolmtPrice);
- Assert.AreEqual("1", hscei.Fields.BassetFirstValatTpcd, "종가");
- Assert.AreEqual(new DateOnly(2018, 6, 29), hscei.Fields.FirstStdprcDecsnBeginDt);
- Assert.AreEqual(new DateOnly(2021, 6, 29), hscei.Fields.LastStdprcDecsnExpryDt);
- Assert.AreEqual("2", hscei.Fields.RvltSeverTpcd, "버림");
- // S&P 500 (XML 엔티티 & 디코딩 확인)
- var snp = rows.Single(c => c.AssetSeq == 2);
- Assert.AreEqual("KSD310000568", snp.Fields.StndBassetCd);
- Assert.AreEqual("S&P 500 Index", snp.Fields.StndBassetNm, "& 디코딩");
- // 단일종목(삼성전자) 기초자산 — KR7* 체계도 원문 보존
- var samsung = rows.Single(c => c.AssetSeq == 3);
- Assert.AreEqual("KR7005930003", samsung.Fields.StndBassetCd);
- Assert.AreEqual("삼성전자", samsung.Fields.StndBassetNm);
- }
- [TestMethod]
- public void Parse_MissingAssetSeq_SkipsRow()
- {
- const string xml = """
- <vector result="1"><data vectorkey="0" type="Document"><RESULT>
- <ISIN value="KR6539335879"/><STND_BASSET_NM value="자산"/>
- </RESULT></data></vector>
- """;
- var rows = SeibroAssetParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(0, rows.Count, "ASSET_SEQ 없으면 스킵");
- }
- }
|