package kr.itn.itnhub.contact; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; class MemberDirectoryParserTest { private final MemberDirectoryParser parser = new MemberDirectoryParser(); private byte[] workbook(String[]... dataRows) throws Exception { try (XSSFWorkbook wb = new XSSFWorkbook(); ByteArrayOutputStream out = new ByteArrayOutputStream()) { Sheet sheet = wb.createSheet(MemberDirectoryParser.SHEET_NAME); sheet.createRow(0); // 헤더 int rowNum = 1; for (String[] data : dataRows) { Row row = sheet.createRow(rowNum++); for (int i = 0; i < data.length; i++) { if (data[i] == null) { continue; } row.createCell(i).setCellValue(data[i]); } } wb.write(out); return out.toByteArray(); } } @Test void 담당자명이_빈_첫_행에서_읽기를_멈춘다() throws Exception { byte[] xlsx = workbook( new String[]{"1", "신청기관", "기관A", "팀", "김담당", "과장", "02-1", "a@b.kr"}, new String[]{"2", "신청기관", "기관B", null, null, null, null, null}, new String[]{"3", "신청기관", "기관C", "팀", "이담당", "대리", "02-3", "c@d.kr"}); MemberParseResult result = parser.parse(new ByteArrayInputStream(xlsx)); assertThat(result.rows()).hasSize(1); assertThat(result.rows().get(0).name()).isEqualTo("김담당"); } @Test void 부서명이_대시나_공백이면_null로_취급한다() throws Exception { byte[] xlsx = workbook( new String[]{"1", "변호사", null, "-", "이변호", null, "02-1", "a@b.kr"}); List rows = parser.parse(new ByteArrayInputStream(xlsx)).rows(); assertThat(rows.get(0).deptName()).isNull(); } @Test void 알수없는_구분은_건너뛰고_계속_읽는다() throws Exception { byte[] xlsx = workbook( new String[]{"1", "이상한구분", "기관A", "팀", "김담당", "과장", "02-1", "a@b.kr"}, new String[]{"2", "변호사", null, null, "이변호", null, "02-2", "b@c.kr"}); MemberParseResult result = parser.parse(new ByteArrayInputStream(xlsx)); assertThat(result.skipped()).isEqualTo(1); assertThat(result.rows()).hasSize(1); assertThat(result.rows().get(0).name()).isEqualTo("이변호"); } }