카카오페이 isagreed 필드 체크 로직 필터 개발
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package com.eactive.eai.custom.adapter.http.dynamic.filter;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.eactive.eai.adapter.http.dynamic.filter.FilterException;
|
||||
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter;
|
||||
import com.eactive.eai.common.util.JacksonUtil;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
/**
|
||||
* 카카오뱅크 암복호화에 맟추어 커스텀 필요
|
||||
*/
|
||||
public class KakaopayFilter implements HttpAdapterFilter {
|
||||
|
||||
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||
|
||||
@Override
|
||||
public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop,
|
||||
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
|
||||
JsonNode rootNode = JacksonUtil.readTree(message, OBJECT_MAPPER);
|
||||
|
||||
// term_agreements[0].is_agreed 값이 true 인지 확인
|
||||
boolean firstAgreed = JacksonUtil.getBoolean(rootNode, "term_agreements[0].is_agreed", false);
|
||||
|
||||
if (!firstAgreed) {
|
||||
throw new FilterException("EB000003", "금리한도조회실패 - 고객 요청으로 인한 CB 조회 실패", 200);
|
||||
}
|
||||
|
||||
return message;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object doPostFilter(String adptGrpName, String adptName, Object resultMessage, Properties prop,
|
||||
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
return resultMessage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
package com.eactive.eai.custom.adapter.http.dynamic.filter;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.eactive.eai.adapter.http.dynamic.filter.FilterException;
|
||||
|
||||
class KakaopayFilterTest {
|
||||
|
||||
private KakaopayFilter filter;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
filter = new KakaopayFilter();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// doPreFilter
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void preFilter_firstAgreedTrue_returnsMessage() throws Exception {
|
||||
String message = "{\"term_agreements\":[{\"is_agreed\":true}]}";
|
||||
|
||||
Object result = filter.doPreFilter(null, null, message, null, null, null);
|
||||
|
||||
assertSame(message, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_firstAgreedFalse_throwsFilterException() throws Exception {
|
||||
String message = "{\"term_agreements\":[{\"is_agreed\":false}]}";
|
||||
|
||||
FilterException ex = assertThrows(FilterException.class,
|
||||
() -> filter.doPreFilter(null, null, message, null, null, null));
|
||||
assertEquals("EB000003", ex.getMessage());
|
||||
assertEquals(200, ex.getStatus());
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_isAgreedFieldMissing_throwsFilterException() {
|
||||
// is_agreed 필드 없음 → getBoolean 기본값 false → 예외
|
||||
String message = "{\"term_agreements\":[{}]}";
|
||||
|
||||
assertThrows(FilterException.class,
|
||||
() -> filter.doPreFilter(null, null, message, null, null, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_termAgreementsEmpty_throwsFilterException() {
|
||||
// 배열이 비어있어 [0] 접근 불가 → getBoolean 기본값 false → 예외
|
||||
String message = "{\"term_agreements\":[]}";
|
||||
|
||||
assertThrows(FilterException.class,
|
||||
() -> filter.doPreFilter(null, null, message, null, null, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_termAgreementsMissing_throwsFilterException() {
|
||||
// term_agreements 필드 자체 없음 → getBoolean 기본값 false → 예외
|
||||
String message = "{}";
|
||||
|
||||
assertThrows(FilterException.class,
|
||||
() -> filter.doPreFilter(null, null, message, null, null, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_multipleEntries_firstAgreedTrue_returnsMessage() throws Exception {
|
||||
// 첫 번째 true, 두 번째 false → 통과
|
||||
String message = "{\"term_agreements\":["
|
||||
+ "{\"is_agreed\":true},"
|
||||
+ "{\"is_agreed\":false}"
|
||||
+ "]}";
|
||||
|
||||
Object result = filter.doPreFilter(null, null, message, null, null, null);
|
||||
|
||||
assertSame(message, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void preFilter_multipleEntries_firstAgreedFalse_throwsFilterException() {
|
||||
// 첫 번째 false, 두 번째 true → 예외
|
||||
String message = "{\"term_agreements\":["
|
||||
+ "{\"is_agreed\":false},"
|
||||
+ "{\"is_agreed\":true}"
|
||||
+ "]}";
|
||||
|
||||
assertThrows(FilterException.class,
|
||||
() -> filter.doPreFilter(null, null, message, null, null, null));
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// doPostFilter
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
void postFilter_alwaysReturnsResultMessage() throws Exception {
|
||||
String resultMessage = "{\"result\":\"ok\"}";
|
||||
|
||||
Object result = filter.doPostFilter(null, null, resultMessage, null, null, null);
|
||||
|
||||
assertSame(resultMessage, result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user