| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using Infrastructure.StockData;
- namespace Application.Tests;
- [TestClass]
- public sealed class SeibroGmeetMeasureParserTests
- {
- [TestMethod]
- public void Parse_FromSampleXml_MapsAgendas()
- {
- // SEIBro getGmeetMeasureInfo 실응답 fixture (삼성전자 2017 총회 안건 11건) — AGENDA_SEQ·결과·투표방식 매핑.
- var rows = SeibroGmeetMeasureParser.Parse(SeibroXml.Parse(SeibroFixtures.Read("getGmeetMeasureInfo.xml")));
- Assert.AreEqual(11, rows.Count);
- var first = rows.Single(c => c.AgendaSeq == 1);
- Assert.AreEqual(593, first.IssucoCustno);
- Assert.AreEqual(new DateOnly(2017, 12, 31), first.RgtStdDt);
- Assert.AreEqual(new DateOnly(2018, 3, 23), first.GmetDt);
- Assert.AreEqual("001", first.GmetKacd);
- Assert.AreEqual("재무제표승인", first.AgendaNm);
- Assert.AreEqual("APPROVAL OF FINANCIAL STATEMENTS", first.EngAgendaNm);
- Assert.AreEqual("9", first.VoteMannTpcd, "해당없음");
- Assert.AreEqual("1", first.GmetResultTpcd, "승인");
- Assert.AreEqual("1", first.AgendaSchSeqo, "CHAR(6) 우측공백 Trim");
- // 세부안건(사외이사 선임) — DTAIL_AGENDA_NM 채워짐
- var director = rows.Single(c => c.AgendaSeq == 2);
- Assert.AreEqual("사외이사 선임", director.AgendaNm);
- Assert.AreEqual("김종훈", director.DtailAgendaNm);
- }
- [TestMethod]
- public void Parse_SkipsRow_WhenAgendaSeqOrNameMissing()
- {
- // 기대 행위: AGENDA_SEQ 또는 AGENDA_NM 없으면 건너뛴다
- const string xml = """
- <vector result="2">
- <data vectorkey="0" type="Document"><result>
- <ISSUCO_CUSTNO value="10"/>
- <RGT_STD_DT value="20200101"/>
- <AGENDA_NM value="안건있으나번호없음"/>
- </result></data>
- <data vectorkey="1" type="Document"><result>
- <ISSUCO_CUSTNO value="10"/>
- <RGT_STD_DT value="20200101"/>
- <AGENDA_SEQ value="1"/>
- <AGENDA_NM value="정상안건"/>
- </result></data>
- </vector>
- """;
- var rows = SeibroGmeetMeasureParser.Parse(SeibroXml.Parse(xml));
- Assert.AreEqual(1, rows.Count);
- Assert.AreEqual(1, rows[0].AgendaSeq);
- Assert.AreEqual("정상안건", rows[0].AgendaNm);
- }
- }
|