SeibroDivSchedulParserTests.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class SeibroDivSchedulParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_FromSampleXml_MapsFields_Samsung()
  8. {
  9. // SEIBro getDivSchedulInfo 실응답 fixture (삼성전자) — 9행, 전부 현금배당(02) · 권리락일/명부폐쇄/전자증권 매핑
  10. var rows = SeibroDivSchedulParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getDivSchedulInfo.xml")));
  11. Assert.AreEqual(9, rows.Count);
  12. var first = rows.Single(c => c.RgtStdDt == new DateOnly(2018, 3, 31));
  13. Assert.AreEqual(593, first.IssucoCustno);
  14. Assert.AreEqual("삼성전자", first.RepSecnNm);
  15. Assert.AreEqual("103", first.RgtRacd, "배당/분배");
  16. Assert.AreEqual("02", first.RgtRsnDetailSortCd, "현금배당");
  17. Assert.AreEqual("2", first.AllocWhcd);
  18. Assert.AreEqual("3", first.SetaccTpcd, "분기");
  19. Assert.AreEqual("1", first.FixTpcd, "확정");
  20. Assert.AreEqual(new DateOnly(2018, 4, 1), first.RostCloseBeginDt);
  21. Assert.AreEqual(new DateOnly(2018, 4, 14), first.RostCloseExpryDt);
  22. Assert.AreEqual(new DateOnly(2018, 3, 29), first.XrgtDt, "권리락일 YYYYMMDD 파싱");
  23. Assert.IsFalse(first.IsElectronicSecurity!.Value, "ELTSC_YN=N → false");
  24. }
  25. [TestMethod]
  26. public void Parse_EmptyDate_Null_AndSkipsIncompleteKey()
  27. {
  28. // 기대 행위: XRGT_DT 빈값 → null, 자연키(회사번호/기준일/세부유형) 미충족 행은 건너뛴다
  29. const string xml = """
  30. <vector result="2">
  31. <data vectorkey="0" type="Document"><result>
  32. <ISSUCO_CUSTNO value="593"/>
  33. <REP_SECN_NM value="삼성전자"/>
  34. <RGT_RSN_DTAIL_SORT_CD value="04"/>
  35. <RGT_STD_DT value="20201231"/>
  36. <XRGT_DT value=""/>
  37. <ELTSC_YN value="Y"/>
  38. </result></data>
  39. <data vectorkey="1" type="Document"><result>
  40. <REP_SECN_NM value="누락회사번호"/>
  41. <RGT_RSN_DTAIL_SORT_CD value="02"/>
  42. <RGT_STD_DT value="20201231"/>
  43. </result></data>
  44. </vector>
  45. """;
  46. var rows = SeibroDivSchedulParser.Parse(SeibroXml.Parse(xml));
  47. Assert.AreEqual(1, rows.Count, "회사번호 없는 행은 skip");
  48. Assert.IsNull(rows[0].XrgtDt, "value=\"\" → null");
  49. Assert.AreEqual("04", rows[0].RgtRsnDetailSortCd, "무배당");
  50. Assert.IsTrue(rows[0].IsElectronicSecurity!.Value, "ELTSC_YN=Y → true");
  51. }
  52. }