File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
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<MemberRow> 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("이변호");
}
}