diff --git a/src/test/java/com/klaroworks/runtime/role/RoleMatrixRuntimeTest.java b/src/test/java/com/klaroworks/runtime/role/RoleMatrixRuntimeTest.java new file mode 100644 index 0000000..8446c89 --- /dev/null +++ b/src/test/java/com/klaroworks/runtime/role/RoleMatrixRuntimeTest.java @@ -0,0 +1,123 @@ +package com.klaroworks.runtime.role; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Nested; + +import static org.junit.jupiter.api.Assertions.*; + +@DisplayName("RoleMatrixRuntime 테스트") +class RoleMatrixRuntimeTest { + + private RoleMatrixRuntime runtime; + + @BeforeEach + void setUp() { + runtime = new RoleMatrixRuntime(); + } + + @Nested + @DisplayName("evaluateRole 메서드 테스트") + class EvaluateRoleTests { + + @Test + @DisplayName("유효한 역할 평가") + void testEvaluateValidRole() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + context.setRoles(new String[]{"admin", "user"}); + + boolean result = runtime.evaluateRole("admin", context); + assertTrue(result, "유효한 역할은 true를 반환해야 함"); + } + + @Test + @DisplayName("유효하지 않은 역할 평가") + void testEvaluateInvalidRole() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + context.setRoles(new String[]{"user"}); + + boolean result = runtime.evaluateRole("admin", context); + assertFalse(result, "유효하지 않은 역할은 false를 반환해야 함"); + } + + @Test + @DisplayName("null 역할 평가 시 false 반환") + void testEvaluateNullRole() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + + boolean result = runtime.evaluateRole(null, context); + assertFalse(result, "null 역할은 false를 반환해야 함"); + } + + @Test + @DisplayName("빈 역할 평가 시 false 반환") + void testEvaluateEmptyRole() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + + boolean result = runtime.evaluateRole("", context); + assertFalse(result, "빈 역할은 false를 반환해야 함"); + } + + @Test + @DisplayName("null 컨텍스트 평가 시 false 반환") + void testEvaluateNullContext() { + boolean result = runtime.evaluateRole("admin", null); + assertFalse(result, "null 컨텍스트는 false를 반환해야 함"); + } + } + + @Nested + @DisplayName("hasPermission 메서드 테스트") + class HasPermissionTests { + + @Test + @DisplayName("권한 있음") + void testHasPermission() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + context.setRoles(new String[]{"admin"}); + + boolean result = runtime.hasPermission(context, "read", "resource-001"); + assertTrue(result, "권한이 있으면 true를 반환해야 함"); + } + + @Test + @DisplayName("권한 없음") + void testNoPermission() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + context.setRoles(new String[]{"user"}); + + boolean result = runtime.hasPermission(context, "delete", "resource-001"); + assertFalse(result, "권한이 없으면 false를 반환해야 함"); + } + } + + @Nested + @DisplayName("컨텍스트 관리 테스트") + class ContextManagementTests { + + @Test + @DisplayName("컨텍스트 생성") + void testCreateContext() { + RoleContext context = runtime.createContext("user-001", new String[]{"admin"}); + assertNotNull(context, "컨텍스트가 생성되어야 함"); + assertEquals("user-001", context.getUserId(), "사용자 ID가 일치해야 함"); + } + + @Test + @DisplayName("컨텍스트 정리") + void testClearContext() { + RoleContext context = new RoleContext(); + context.setUserId("user-001"); + + runtime.clearContext(context); + assertNull(context.getUserId(), "컨텍스트가 정리되어야 함"); + } + } +}