package kr.itn.itnhub.code; import kr.itn.itnhub.AbstractDbTest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; class CodeMapperTest extends AbstractDbTest { @Autowired CodeMapper mapper; @Test void 모든_코드를_그룹과_정렬순서대로_읽는다() { List rows = mapper.findAllCodes(); assertThat(rows).isNotEmpty(); List stages = rows.stream().filter(r -> r.groupId().equals("STAGE")).toList(); assertThat(stages).hasSize(13); assertThat(stages.get(0).code()).isEqualTo("1"); assertThat(stages.get(12).label()).isEqualTo("보고서 제출 완료"); } @Test void attrs를_JSON_문자열로_읽는다() { CodeRow stage13 = mapper.findAllCodes().stream() .filter(r -> r.groupId().equals("STAGE") && r.code().equals("13")) .findFirst().orElseThrow(); assertThat(stage13.attrsJson()) .contains("progress") .contains("done") .contains("completed"); } @Test void 비활성_코드도_함께_읽는다() { // 활성 필터는 CodeService가 용도에 따라 건다. 매퍼는 전부 내려줘야 // 과거 데이터의 라벨을 그릴 수 있다. List rows = mapper.findAllCodes(); assertThat(rows).allSatisfy(r -> assertThat(r.groupId()).isNotBlank()); assertThat(rows).anySatisfy(r -> assertThat(r.active()).isTrue()); } @Test void 그룹_목록을_읽는다() { List groups = mapper.findAllGroups(); assertThat(groups).hasSize(12); assertThat(groups).anySatisfy(g -> { assertThat(g.groupId()).isEqualTo("STAGE"); assertThat(g.editable()).isFalse(); }); assertThat(groups).anySatisfy(g -> { assertThat(g.groupId()).isEqualTo("CONTACT_METHOD"); assertThat(g.editable()).isTrue(); }); } }