| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- [TestClass]
- public sealed class SeibroGmeetParserTests
- {
- [TestMethod]
- public void Parse_FromSampleXml_MapsMeetingFields()
- {
- // SEIBro getGmeetInfo 실응답 fixture (삼성전자 2017 정기총회) — 1행. 날짜·Y/N·시각 매핑.
- var rows = SeibroGmeetParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getGmeetInfo.xml")));
- Assert.AreEqual(1, rows.Count);
- var m = rows[0];
- Assert.AreEqual(593, m.IssucoCustno);
- Assert.AreEqual("00593", m.IssuinNo);
- Assert.AreEqual("001", m.GmetKacd, "정기총회");
- Assert.AreEqual(new DateOnly(2017, 12, 31), m.RgtStdDt);
- Assert.AreEqual(new DateOnly(2018, 3, 23), m.GmetDt);
- Assert.AreEqual("0900", m.GmetTtm);
- Assert.AreEqual(new DateOnly(2018, 1, 1), m.RostCloseBeginDt);
- Assert.IsTrue(m.GmetOmeetYn, "총회개최여부 Y");
- Assert.IsFalse(m.EvoteYn, "전자투표 N");
- Assert.IsFalse(m.DferYn, "연기 N");
- Assert.IsFalse(m.IsElectronicSecurity, "전자증권 N (ELTSC_YN)");
- Assert.IsFalse(m.StkBuyreqRlYn);
- Assert.AreEqual("1", m.GmetPlaceTpcd, "서울");
- Assert.IsTrue(m.GmetPlace!.Contains("삼성전자빌딩"));
- // COUNCL_DTERMIN_PUBN_DT value="" → null (빈값 방어)
- Assert.IsNull(m.CouncilDterminPubnDt, "빈 공시일자 → null");
- }
- [TestMethod]
- public void Parse_SkipsRow_WhenNaturalKeyMissing()
- {
- // 기대 행위: ISSUCO_CUSTNO/GMET_KACD/RGT_STD_DT 중 하나라도 없으면 건너뛴다
- const string xml = """
- <vector result="2">
- <data vectorkey="0" type="Document"><result>
- <ISSUCO_CUSTNO value="10"/>
- <RGT_STD_DT value="20200101"/>
- </result></data>
- <data vectorkey="1" type="Document"><result>
- <ISSUCO_CUSTNO value="20"/>
- <GMET_KACD value="002"/>
- <RGT_STD_DT value="20200601"/>
- </result></data>
- </vector>
- """;
- var rows = SeibroGmeetParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(1, rows.Count, "GMET_KACD 없는 첫 행 스킵");
- Assert.AreEqual(20, rows[0].IssucoCustno);
- Assert.AreEqual("002", rows[0].GmetKacd);
- }
- }
|