package com.eactive.eai.manage.inflow;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.http.ResponseEntity;
import org.springframework.test.util.ReflectionTestUtils;
/**
* InflowTargetBucketController 단위 테스트.
*
*
Spring MVC를 기동하지 않고 컨트롤러를 직접 인스턴스화하여
* 응답 구조(success, data, count, message)를 검증한다.
*/
class InflowTargetBucketControllerTest {
private InflowTargetBucketController controller;
private InflowTargetBucketService mockService;
@BeforeEach
void setUp() {
controller = new InflowTargetBucketController();
mockService = mock(InflowTargetBucketService.class);
ReflectionTestUtils.setField(controller, "bucketService", mockService);
}
// -------------------------------------------------------------------------
// Helper
// -------------------------------------------------------------------------
private TargetBucketStatusDTO makeDTO(String id, String type) {
TargetBucketStatusDTO dto = new TargetBucketStatusDTO();
dto.setTargetId(id);
dto.setTargetType(type);
dto.setActivate(true);
dto.setBuckets(Collections.emptyList());
return dto;
}
@SuppressWarnings("unchecked")
private Map body(ResponseEntity> response) {
return (Map) response.getBody();
}
// =========================================================================
// 어댑터 — 단일 조회
// =========================================================================
@Test
void getAdapterBucketStatus_found_successTrueAndDataPresent() {
TargetBucketStatusDTO dto = makeDTO("ADAPTER_A", "ADAPTER");
when(mockService.getAdapterBucketStatus("ADAPTER_A")).thenReturn(dto);
ResponseEntity> response = controller.getAdapterBucketStatus("ADAPTER_A");
Map body = body(response);
assertEquals(200, response.getStatusCodeValue());
assertEquals(Boolean.TRUE, body.get("success"));
assertSame(dto, body.get("data"));
assertFalse(body.containsKey("message"));
}
@Test
void getAdapterBucketStatus_notFound_successFalseWithAdapterId() {
when(mockService.getAdapterBucketStatus("GHOST")).thenReturn(null);
ResponseEntity> response = controller.getAdapterBucketStatus("GHOST");
Map body = body(response);
assertEquals(Boolean.FALSE, body.get("success"));
assertTrue(body.get("message").toString().contains("GHOST"));
}
// =========================================================================
// 어댑터 — 전체 조회
// =========================================================================
@Test
void getAllAdapterBucketStatus_returnsListAndCount() {
List list = Arrays.asList(
makeDTO("A1", "ADAPTER"),
makeDTO("A2", "ADAPTER")
);
when(mockService.getAllAdapterBucketStatus()).thenReturn(list);
ResponseEntity> response = controller.getAllAdapterBucketStatus();
Map body = body(response);
assertEquals(Boolean.TRUE, body.get("success"));
assertSame(list, body.get("data"));
assertEquals(2, body.get("count"));
}
@Test
void getAllAdapterBucketStatus_emptyList_countZero() {
when(mockService.getAllAdapterBucketStatus()).thenReturn(Collections.emptyList());
Map body = body(controller.getAllAdapterBucketStatus());
assertEquals(Boolean.TRUE, body.get("success"));
assertEquals(0, body.get("count"));
}
// =========================================================================
// 인터페이스 — 단일 조회
// =========================================================================
@Test
void getInterfaceBucketStatus_found_successTrue() {
TargetBucketStatusDTO dto = makeDTO("IF_001", "INTERFACE");
when(mockService.getInterfaceBucketStatus("IF_001")).thenReturn(dto);
ResponseEntity> response = controller.getInterfaceBucketStatus("IF_001");
Map body = body(response);
assertEquals(Boolean.TRUE, body.get("success"));
assertSame(dto, body.get("data"));
}
@Test
void getInterfaceBucketStatus_notFound_successFalseWithInterfaceId() {
when(mockService.getInterfaceBucketStatus("GHOST")).thenReturn(null);
Map body = body(controller.getInterfaceBucketStatus("GHOST"));
assertEquals(Boolean.FALSE, body.get("success"));
assertTrue(body.get("message").toString().contains("GHOST"));
}
// =========================================================================
// 인터페이스 — 전체 조회
// =========================================================================
@Test
void getAllInterfaceBucketStatus_returnsListAndCount() {
List list = Collections.singletonList(makeDTO("IF_001", "INTERFACE"));
when(mockService.getAllInterfaceBucketStatus()).thenReturn(list);
Map body = body(controller.getAllInterfaceBucketStatus());
assertEquals(Boolean.TRUE, body.get("success"));
assertEquals(1, body.get("count"));
}
// =========================================================================
// 클라이언트 — 단일 조회
// =========================================================================
@Test
void getClientBucketStatus_found_successTrueAndDataPresent() {
TargetBucketStatusDTO dto = makeDTO("CLIENT_A", "CLIENT");
when(mockService.getClientBucketStatus("CLIENT_A")).thenReturn(dto);
ResponseEntity> response = controller.getClientBucketStatus("CLIENT_A");
Map body = body(response);
assertEquals(200, response.getStatusCodeValue());
assertEquals(Boolean.TRUE, body.get("success"));
assertSame(dto, body.get("data"));
assertFalse(body.containsKey("message"));
}
@Test
void getClientBucketStatus_notFound_successFalseWithClientId() {
when(mockService.getClientBucketStatus("CLIENT_X")).thenReturn(null);
ResponseEntity> response = controller.getClientBucketStatus("CLIENT_X");
Map body = body(response);
assertEquals(Boolean.FALSE, body.get("success"));
assertTrue(body.get("message").toString().contains("CLIENT_X"));
}
// =========================================================================
// 클라이언트 — 전체 조회
// =========================================================================
@Test
void getAllClientBucketStatus_returnsListAndCount() {
List list = Arrays.asList(
makeDTO("CLIENT_A", "CLIENT"),
makeDTO("CLIENT_B", "CLIENT"),
makeDTO("CLIENT_C", "CLIENT")
);
when(mockService.getAllClientBucketStatus()).thenReturn(list);
ResponseEntity> response = controller.getAllClientBucketStatus();
Map body = body(response);
assertEquals(Boolean.TRUE, body.get("success"));
assertSame(list, body.get("data"));
assertEquals(3, body.get("count"));
}
@Test
void getAllClientBucketStatus_emptyList_countZero() {
when(mockService.getAllClientBucketStatus()).thenReturn(Collections.emptyList());
Map body = body(controller.getAllClientBucketStatus());
assertEquals(Boolean.TRUE, body.get("success"));
assertEquals(0, body.get("count"));
}
}