SeibroLockupParserTests.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroLockupParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsFields_AndEmptyReturnNull()
  8. {
  9. // SEIBro getSafeDpDutyDepoStatus 실응답 fixture — 1행(예수). RETURN_DT/RETURN_QTY 빈값 → null.
  10. var rows = SeibroLockupParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getSafeDpDutyDepoStatus.xml")));
  11. Assert.AreEqual(1, rows.Count);
  12. var row = rows[0];
  13. Assert.AreEqual(162, row.IssucoCustno);
  14. Assert.AreEqual("케이비아이동국실업", row.KorSecnNm);
  15. Assert.AreEqual("보통주", row.SecnKacd, "실응답 SECN_KACD 는 코드가 아닌 명칭 문자열");
  16. Assert.AreEqual("001620", row.ShotnIsin);
  17. Assert.AreEqual("11", row.MartTpcd);
  18. Assert.AreEqual("1", row.OccrSeq, "1=예수");
  19. Assert.AreEqual(new DateOnly(2019, 2, 25), row.SafedpDt);
  20. Assert.AreEqual(12730000L, row.SafedpQty);
  21. Assert.AreEqual("02", row.DutySafedpRacd, "보호예수사유코드 원문");
  22. Assert.IsNull(row.ReturnDt, "RETURN_DT value=\"\" → null");
  23. Assert.IsNull(row.ReturnQty, "RETURN_QTY value=\"\" → null");
  24. Assert.AreEqual(22258606L, row.TotalStkCnt);
  25. }
  26. [TestMethod]
  27. public void Parse_SkipsRow_WhenNaturalKeyMissing()
  28. {
  29. // 기대 행위: 자연키(회사번호/단축코드/예수일/업무구분/사유코드) 중 하나라도 없으면 건너뛴다
  30. const string xml = """
  31. <vector result="2">
  32. <data vectorkey="0" type="Document"><result>
  33. <ISSUCO_CUSTNO value="500"/>
  34. <KOR_SECN_NM value="사유없음"/>
  35. <SHOTN_ISIN value="000500"/>
  36. <OCCR_SEQ value="2"/>
  37. <SAFEDP_DT value="20200101"/>
  38. </result></data>
  39. <data vectorkey="1" type="Document"><result>
  40. <ISSUCO_CUSTNO value="501"/>
  41. <KOR_SECN_NM value="정상"/>
  42. <SHOTN_ISIN value="000501"/>
  43. <OCCR_SEQ value="2"/>
  44. <SAFEDP_DT value="20200210"/>
  45. <DUTY_SAFEDP_RACD value="03"/>
  46. <RETURN_DT value="20200210"/>
  47. <RETURN_QTY value="1000"/>
  48. </result></data>
  49. </vector>
  50. """;
  51. var rows = SeibroLockupParser.Parse(SeibroXml.Parse(xml));
  52. Assert.AreEqual(1, rows.Count, "사유코드 없는 행 skip");
  53. Assert.AreEqual(501, rows[0].IssucoCustno);
  54. Assert.AreEqual(new DateOnly(2020, 2, 10), rows[0].ReturnDt);
  55. Assert.AreEqual(1000L, rows[0].ReturnQty);
  56. }
  57. }