Reviewer 역할 검증 보고서 smoke #5
1 changed files with 232 additions and 0 deletions
232
src/test/java/com/example/RoleMatrixServiceTest.java
Normal file
232
src/test/java/com/example/RoleMatrixServiceTest.java
Normal file
|
|
@ -0,0 +1,232 @@
|
||||||
|
package com.example;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
@DisplayName("RoleMatrixService 검증 테스트")
|
||||||
|
class RoleMatrixServiceTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private RoleMatrixRepository repository;
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private RoleMatrixService service;
|
||||||
|
|
||||||
|
private RoleMatrix testMatrix;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
testMatrix = new RoleMatrix();
|
||||||
|
testMatrix.setId(1L);
|
||||||
|
testMatrix.setName("Admin Role");
|
||||||
|
testMatrix.setPermissions(Arrays.asList("READ", "WRITE", "DELETE"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 조회 성공")
|
||||||
|
void getRoleMatrix_Success() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
// When
|
||||||
|
RoleMatrix result = service.getRoleMatrix(1L);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals("Admin Role", result.getName());
|
||||||
|
assertEquals(3, result.getPermissions().size());
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 조회 실패 - 존재하지 않는 ID")
|
||||||
|
void getRoleMatrix_NotFound() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(999L)).thenReturn(null);
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThrows(RoleNotFoundException.class, () -> service.getRoleMatrix(999L));
|
||||||
|
verify(repository, times(1)).findById(999L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("모든 역할 매트릭스 조회 성공")
|
||||||
|
void getAllRoleMatrices_Success() {
|
||||||
|
// Given
|
||||||
|
RoleMatrix matrix2 = new RoleMatrix();
|
||||||
|
matrix2.setId(2L);
|
||||||
|
matrix2.setName("User Role");
|
||||||
|
matrix2.setPermissions(Arrays.asList("READ"));
|
||||||
|
|
||||||
|
when(repository.findAll()).thenReturn(Arrays.asList(testMatrix, matrix2));
|
||||||
|
|
||||||
|
// When
|
||||||
|
List<RoleMatrix> result = service.getAllRoleMatrices();
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(2, result.size());
|
||||||
|
verify(repository, times(1)).findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 생성 성공")
|
||||||
|
void createRoleMatrix_Success() {
|
||||||
|
// Given
|
||||||
|
RoleMatrix newMatrix = new RoleMatrix();
|
||||||
|
newMatrix.setName("New Role");
|
||||||
|
newMatrix.setPermissions(Arrays.asList("READ", "WRITE"));
|
||||||
|
|
||||||
|
when(repository.save(any(RoleMatrix.class))).thenReturn(newMatrix);
|
||||||
|
|
||||||
|
// When
|
||||||
|
RoleMatrix result = service.createRoleMatrix(newMatrix);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals("New Role", result.getName());
|
||||||
|
verify(repository, times(1)).save(any(RoleMatrix.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 업데이트 성공")
|
||||||
|
void updateRoleMatrix_Success() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
when(repository.save(any(RoleMatrix.class))).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
RoleMatrix updateData = new RoleMatrix();
|
||||||
|
updateData.setName("Updated Admin Role");
|
||||||
|
updateData.setPermissions(Arrays.asList("READ", "WRITE"));
|
||||||
|
|
||||||
|
// When
|
||||||
|
RoleMatrix result = service.updateRoleMatrix(1L, updateData);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals("Updated Admin Role", result.getName());
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
verify(repository, times(1)).save(any(RoleMatrix.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 삭제 성공")
|
||||||
|
void deleteRoleMatrix_Success() {
|
||||||
|
// Given
|
||||||
|
when(repository.existsById(1L)).thenReturn(true);
|
||||||
|
doNothing().when(repository).deleteById(1L);
|
||||||
|
|
||||||
|
// When
|
||||||
|
service.deleteRoleMatrix(1L);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
verify(repository, times(1)).existsById(1L);
|
||||||
|
verify(repository, times(1)).deleteById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할 매트릭스 삭제 실패 - 존재하지 않는 ID")
|
||||||
|
void deleteRoleMatrix_NotFound() {
|
||||||
|
// Given
|
||||||
|
when(repository.existsById(999L)).thenReturn(false);
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThrows(RoleNotFoundException.class, () -> service.deleteRoleMatrix(999L));
|
||||||
|
verify(repository, times(1)).existsById(999L);
|
||||||
|
verify(repository, never()).deleteById(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("권한 검증 성공")
|
||||||
|
void hasPermission_Success() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
// When
|
||||||
|
boolean result = service.hasPermission(1L, "READ");
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertTrue(result);
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("권한 검증 실패 - 권한 없음")
|
||||||
|
void hasPermission_NoPermission() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
// When
|
||||||
|
boolean result = service.hasPermission(1L, "ADMIN");
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertFalse(result);
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("역할별 권한 매트릭스 조회 성공")
|
||||||
|
void getPermissionsByRole_Success() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
// When
|
||||||
|
Map<String, Boolean> result = service.getPermissionsByRole(1L);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(3, result.size());
|
||||||
|
assertTrue(result.get("READ"));
|
||||||
|
assertTrue(result.get("WRITE"));
|
||||||
|
assertTrue(result.get("DELETE"));
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("빈 역할 목록 조회")
|
||||||
|
void getAllRoleMatrices_EmptyList() {
|
||||||
|
// Given
|
||||||
|
when(repository.findAll()).thenReturn(Arrays.asList());
|
||||||
|
|
||||||
|
// When
|
||||||
|
List<RoleMatrix> result = service.getAllRoleMatrices();
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result);
|
||||||
|
assertTrue(result.isEmpty());
|
||||||
|
verify(repository, times(1)).findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("캐시된 역할 매트릭스 조회")
|
||||||
|
void getRoleMatrix_Cached() {
|
||||||
|
// Given
|
||||||
|
when(repository.findById(1L)).thenReturn(testMatrix);
|
||||||
|
|
||||||
|
// When - 첫 번째 호출
|
||||||
|
RoleMatrix result1 = service.getRoleMatrix(1L);
|
||||||
|
// When - 두 번째 호출 (캐시에서)
|
||||||
|
RoleMatrix result2 = service.getRoleMatrix(1L);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertNotNull(result1);
|
||||||
|
assertNotNull(result2);
|
||||||
|
assertEquals(result1.getName(), result2.getName());
|
||||||
|
// 캐시로 인해 repository는 한 번만 호출되어야 함
|
||||||
|
verify(repository, times(1)).findById(1L);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue