From ecc70bca55123558dceed8ccb4f670e340be8021 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Tue, 14 Jul 2026 10:32:08 +0000 Subject: [PATCH] =?UTF-8?q?Reviewer=20=EC=97=AD=ED=95=A0=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=B3=B4=EA=B3=A0=EC=84=9C=20smoke=20(runtime-role?= =?UTF-8?q?-matrix-live-20260714101723-v7-reviewer-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runtime/role/RoleValidatorTest.java | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/test/java/com/klaroworks/runtime/role/RoleValidatorTest.java diff --git a/src/test/java/com/klaroworks/runtime/role/RoleValidatorTest.java b/src/test/java/com/klaroworks/runtime/role/RoleValidatorTest.java new file mode 100644 index 0000000..e86c152 --- /dev/null +++ b/src/test/java/com/klaroworks/runtime/role/RoleValidatorTest.java @@ -0,0 +1,146 @@ +package com.klaroworks.runtime.role; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * Test class for RoleValidator. + * Tests context validation and permission validation. + */ +@DisplayName("RoleValidator Tests") +public class RoleValidatorTest { + + private RoleValidator validator; + + @BeforeEach + void setUp() { + validator = new RoleValidator(); + } + + @Nested + @DisplayName("ValidateContextTests") + class ValidateContextTests { + + @Test + @DisplayName("should validate valid context") + void shouldValidateValidContext() { + RoleContext context = RoleContext.SimpleRoleContext.of("user1", "ADMIN"); + RoleValidator.ValidationResult result = validator.validateContext(context); + + assertTrue(result.isValid()); + assertTrue(result.getErrorMessage().isEmpty()); + } + + @Test + @DisplayName("should reject null context") + void shouldRejectNullContext() { + RoleValidator.ValidationResult result = validator.validateContext(null); + + assertFalse(result.isValid()); + assertEquals("Context cannot be null", result.getErrorMessage().orElse("")); + } + + @Test + @DisplayName("should reject context with null user ID") + void shouldRejectContextWithNullUserId() { + RoleContext context = new RoleContext.SimpleRoleContext(null, "ADMIN", Map.of()); + RoleValidator.ValidationResult result = validator.validateContext(context); + + assertFalse(result.isValid()); + assertTrue(result.getErrorMessage().orElse("").contains("User ID")); + } + + @Test + @DisplayName("should reject context with blank role") + void shouldRejectContextWithBlankRole() { + RoleContext context = new RoleContext.SimpleRoleContext("user1", "", Map.of()); + RoleValidator.ValidationResult result = validator.validateContext(context); + + assertFalse(result.isValid()); + assertTrue(result.getErrorMessage().orElse("").contains("Role")); + } + + @Test + @DisplayName("should reject context with unknown role") + void shouldRejectContextWithUnknownRole() { + RoleContext context = new RoleContext.SimpleRoleContext("user1", "UNKNOWN_ROLE", Map.of()); + RoleValidator.ValidationResult result = validator.validateContext(context); + + assertFalse(result.isValid()); + assertTrue(result.getErrorMessage().orElse("").contains("Unknown role")); + } + } + + @Nested + @DisplayName("ValidatePermissionTests") + class ValidatePermissionTests { + + @Test + @DisplayName("should validate allowed permission") + void shouldValidateAllowedPermission() { + RoleValidator.ValidationResult result = validator.validatePermission("USER", "read"); + + assertTrue(result.isValid()); + } + + @Test + @DisplayName("should reject disallowed permission") + void shouldRejectDisallowedPermission() { + RoleValidator.ValidationResult result = validator.validatePermission("USER", "delete"); + + assertFalse(result.isValid()); + assertTrue(result.getErrorMessage().orElse("").contains("not allowed")); + } + + @Test + @DisplayName("should allow wildcard permission for ADMIN") + void shouldAllowWildcardPermissionForAdmin() { + RoleValidator.ValidationResult result = validator.validatePermission("ADMIN", "anyPermission"); + + assertTrue(result.isValid()); + } + + @Test + @DisplayName("should reject permission for unknown role") + void shouldRejectPermissionForUnknownRole() { + RoleValidator.ValidationResult result = validator.validatePermission("UNKNOWN", "read"); + + assertFalse(result.isValid()); + } + } + + @Nested + @DisplayName("RoleLevelTests") + class RoleLevelTests { + + @Test + @DisplayName("should return correct role levels") + void shouldReturnCorrectRoleLevels() { + assertEquals(100, validator.getRoleLevel("ADMIN")); + assertEquals(50, validator.getRoleLevel("MANAGER")); + assertEquals(10, validator.getRoleLevel("USER")); + assertEquals(1, validator.getRoleLevel("GUEST")); + } + + @Test + @DisplayName("should return zero for unknown role") + void shouldReturnZeroForUnknownRole() { + assertEquals(0, validator.getRoleLevel("UNKNOWN")); + } + + @Test + @DisplayName("should compare role privileges correctly") + void shouldCompareRolePrivilegesCorrectly() { + assertTrue(validator.hasHigherPrivilege("ADMIN", "USER")); + assertTrue(validator.hasHigherPrivilege("MANAGER", "GUEST")); + assertFalse(validator.hasHigherPrivilege("USER", "ADMIN")); + assertFalse(validator.hasHigherPrivilege("USER", "USER")); + } + } +}