| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- [TestClass]
- public sealed class SeibroShotnByMartParserTests
- {
- [TestMethod]
- public void Parse_FromSampleXml_MapsFields()
- {
- // SEIBro getShotnByMart 실응답 fixture — SHOTN_ISIN/KOR_SECN_NM/ISSUCO_CUSTNO 매핑
- var envelope = SeibroXml.Parse(SeibroFixtures.Read("getShotnByMart.xml"));
- var rows = SeibroShotnByMartParser.Parse(envelope);
- Assert.AreEqual(envelope.Rows.Count, rows.Count, "샘플 전 행이 세 필드를 갖춰 전부 매핑된다");
- var first = rows[0];
- Assert.AreEqual("000800", first.ShortCode);
- Assert.AreEqual("경남기업", first.Name);
- Assert.AreEqual(80, first.IssucoCustno);
- }
- [TestMethod]
- public void Parse_SkipsRows_MissingRequiredFields()
- {
- // 필수 3필드 중 하나라도 없거나 회사번호 비숫자인 행은 건너뛴다 (upsert 자연키 불성립)
- const string xml = """
- <vector result="4">
- <data vectorkey="0" type="Document"><result>
- <SHOTN_ISIN value="005930"/><KOR_SECN_NM value="삼성전자"/><ISSUCO_CUSTNO value="593"/>
- </result></data>
- <data vectorkey="1" type="Document"><result>
- <SHOTN_ISIN value=""/><KOR_SECN_NM value="코드없음"/><ISSUCO_CUSTNO value="1"/>
- </result></data>
- <data vectorkey="2" type="Document"><result>
- <SHOTN_ISIN value="000020"/><KOR_SECN_NM value="번호없음"/>
- </result></data>
- <data vectorkey="3" type="Document"><result>
- <SHOTN_ISIN value="000030"/><KOR_SECN_NM value="비숫자"/><ISSUCO_CUSTNO value="ABC"/>
- </result></data>
- </vector>
- """;
- var rows = SeibroShotnByMartParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(1, rows.Count);
- Assert.AreEqual("005930", rows[0].ShortCode);
- Assert.AreEqual(593, rows[0].IssucoCustno);
- }
- }
|