feat: DJBank 차세대 표준전문(R10) 초기 구현
- standard-layout-djb.csv: HEAD(평면구조)/EZDATA/MSG/DATA/전문종료부(@JJ) 레이아웃 정의 - standard-message-mapping-config-djb.properties: 논리키 → 필드경로 매핑 (GUID 40자, guid_prgs_no 별도 필드 등) - standard-message-config.properties: DJB 클래스로 전환 (CSV 방식) - GUIDGeneratorDJB: 40자 GUID 생성 (일자+시간+밀리초+시스템코드+노드+세션+Random) - InterfaceMapperDJB: GUID 40자, guid_prgs_no 독립 필드, 응답코드 S/F 변환 - StandardMessageCoordinatorDJB: 전문 생성/응답/에러 각 단계 후처리 - 단위테스트 45개 전체 통과 (GUIDGenerator/InterfaceMapper/Layout 검증) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
package com.eactive.eai.custom.message;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.eactive.eai.message.StandardItem;
|
||||
import com.eactive.eai.message.StandardMessage;
|
||||
import com.eactive.eai.message.StandardMessageUtil;
|
||||
|
||||
/**
|
||||
* standard-layout-djb.csv 로드 및 전문 구조 검증
|
||||
*/
|
||||
class StandardLayoutDJBTest {
|
||||
|
||||
private StandardMessage message;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
message = StandardMessageUtil.generateMessageFromCsvFile(
|
||||
"src/main/resources/standard-layout-djb.csv");
|
||||
assertNotNull(message, "standard-layout-djb.csv 로드 실패");
|
||||
message.setReadPosition(0);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// 최상위 블록 존재 여부
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void HEAD_블록_존재() {
|
||||
assertNotNull(message.findItem("HEAD"), "HEAD 블록 없음");
|
||||
}
|
||||
|
||||
@Test
|
||||
void EZDATA_블록_존재() {
|
||||
assertNotNull(message.findItem("EZDATA"), "EZDATA 블록 없음");
|
||||
}
|
||||
|
||||
@Test
|
||||
void MSG_블록_존재() {
|
||||
assertNotNull(message.findItem("MSG"), "MSG 블록 없음");
|
||||
}
|
||||
|
||||
@Test
|
||||
void DATA_블록_존재() {
|
||||
assertNotNull(message.findItem("DATA"), "DATA 블록 없음");
|
||||
}
|
||||
|
||||
@Test
|
||||
void 전문종료부_존재() {
|
||||
assertNotNull(message.findItem("MESG_END_IDFR_VAL"), "전문종료부 없음");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// HEAD 핵심 필드 검증
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void HEAD_guid_필드_존재_및_길이40() {
|
||||
StandardItem guidItem = message.findItem("HEAD.guid");
|
||||
assertNotNull(guidItem, "HEAD.guid 필드 없음");
|
||||
assertEquals(40, guidItem.getLength(), "HEAD.guid 길이는 40자여야 함");
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_guid_prgs_no_필드_존재() {
|
||||
StandardItem item = message.findItem("HEAD.guid_prgs_no");
|
||||
assertNotNull(item, "HEAD.guid_prgs_no 필드 없음");
|
||||
assertEquals(3, item.getLength());
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_nxgn_stnd_idfr_기본값_JERA() {
|
||||
StandardItem item = message.findItem("HEAD.nxgn_stnd_idfr");
|
||||
assertNotNull(item, "HEAD.nxgn_stnd_idfr 필드 없음");
|
||||
assertEquals(4, item.getLength());
|
||||
assertEquals("JERA", item.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_ortr_guid_필드_존재_및_길이40() {
|
||||
StandardItem item = message.findItem("HEAD.ortr_guid");
|
||||
assertNotNull(item, "HEAD.ortr_guid 필드 없음");
|
||||
assertEquals(40, item.getLength());
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_if_id_필드_길이30() {
|
||||
StandardItem item = message.findItem("HEAD.if_id");
|
||||
assertNotNull(item, "HEAD.if_id 필드 없음");
|
||||
assertEquals(30, item.getLength(), "HEAD.if_id 길이는 30자여야 함 (기존 20자에서 변경)");
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_dman_rspn_dvcd_기본값_S() {
|
||||
StandardItem item = message.findItem("HEAD.dman_rspn_dvcd");
|
||||
assertNotNull(item, "HEAD.dman_rspn_dvcd 필드 없음");
|
||||
assertEquals("S", item.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_procs_rslt_dvcd_기본값_S() {
|
||||
StandardItem item = message.findItem("HEAD.procs_rslt_dvcd");
|
||||
assertNotNull(item, "HEAD.procs_rslt_dvcd 필드 없음");
|
||||
assertEquals("S", item.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void HEAD_trnm_sys_dvcd_기본값_EAI() {
|
||||
StandardItem item = message.findItem("HEAD.trnm_sys_dvcd");
|
||||
assertNotNull(item, "HEAD.trnm_sys_dvcd 필드 없음");
|
||||
assertEquals("EAI", item.getValue());
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// MSG 영역 구조 검증
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void MSG_MAIN_MSG_블록_존재() {
|
||||
assertNotNull(message.findItem("MSG.MAIN_MSG"), "MSG.MAIN_MSG 블록 없음");
|
||||
}
|
||||
|
||||
@Test
|
||||
void MSG_outp_msg_cd_길이12() {
|
||||
StandardItem item = message.findItem("MSG.MAIN_MSG.outp_msg_cd");
|
||||
assertNotNull(item, "MSG.MAIN_MSG.outp_msg_cd 필드 없음");
|
||||
assertEquals(12, item.getLength());
|
||||
}
|
||||
|
||||
@Test
|
||||
void MSG_msg_list_Grid_존재() {
|
||||
assertNotNull(message.findItem("MSG.msg_list"), "MSG.msg_list Grid 없음");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// DATA 영역 구조 검증
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void DATA_BIZ_DATA_존재() {
|
||||
assertNotNull(message.findItem("DATA.BIZ_DATA"), "DATA.BIZ_DATA 없음");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// setData / findItemValue 기본 동작
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void HEAD_필드_setData_findItemValue() {
|
||||
String guid40 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; // 40자
|
||||
message.setData("HEAD.guid", guid40);
|
||||
assertEquals(guid40, message.findItemValue("HEAD.guid"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void MSG_필드_setData_findItemValue() {
|
||||
message.setData("MSG.MAIN_MSG.outp_msg_ctnt", "테스트오류메시지");
|
||||
assertEquals("테스트오류메시지", message.findItemValue("MSG.MAIN_MSG.outp_msg_ctnt"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user