diff --git a/novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/handler/role/SysRoleHandlerTest.java b/novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/handler/role/SysRoleHandlerTest.java new file mode 100644 index 0000000..3477b68 --- /dev/null +++ b/novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/handler/role/SysRoleHandlerTest.java @@ -0,0 +1,279 @@ +package cn.novalon.manage.sys.handler.role; + +import cn.novalon.manage.sys.core.domain.SysRole; +import cn.novalon.manage.sys.core.service.ISysRoleService; +import cn.novalon.manage.sys.dto.request.RoleCreateRequest; +import cn.novalon.manage.sys.dto.request.RoleUpdateRequest; +import cn.novalon.manage.sys.core.command.CreateRoleCommand; +import cn.novalon.manage.sys.core.command.UpdateRoleCommand; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.mock.web.reactive.function.server.MockServerRequest; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +import java.time.LocalDateTime; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class SysRoleHandlerTest { + + @Mock + private ISysRoleService roleService; + + private SysRoleHandler roleHandler; + private SysRole testRole; + + @BeforeEach + void setUp() { + roleHandler = new SysRoleHandler(roleService); + + testRole = new SysRole(); + testRole.setId(1L); + testRole.setRoleName("ADMIN"); + testRole.setRoleKey("admin"); + testRole.setRoleSort(1); + testRole.setStatus(1); + testRole.setCreatedAt(LocalDateTime.now()); + testRole.setUpdatedAt(LocalDateTime.now()); + } + + @Test + void testGetAllRoles() { + when(roleService.findAll()).thenReturn(Flux.just(testRole)); + + ServerRequest request = MockServerRequest.builder().build(); + Mono response = roleHandler.getAllRoles(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).findAll(); + } + + @Test + void testGetRoleCount() { + when(roleService.count()).thenReturn(Mono.just(5L)); + + ServerRequest request = MockServerRequest.builder().build(); + Mono response = roleHandler.getRoleCount(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).count(); + } + + @Test + void testGetRoleByName() { + when(roleService.findByRoleName("ADMIN")).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("roleName", "ADMIN") + .build(); + Mono response = roleHandler.getRoleByName(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).findByRoleName("ADMIN"); + } + + @Test + void testGetRoleByName_NotFound() { + when(roleService.findByRoleName("UNKNOWN")).thenReturn(Mono.empty()); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("roleName", "UNKNOWN") + .build(); + Mono response = roleHandler.getRoleByName(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.NOT_FOUND) + .verifyComplete(); + + verify(roleService).findByRoleName("UNKNOWN"); + } + + @Test + void testCheckNameExists() { + when(roleService.existsByRoleName("ADMIN")).thenReturn(Mono.just(true)); + + ServerRequest request = MockServerRequest.builder() + .queryParam("name", "ADMIN") + .build(); + Mono response = roleHandler.checkNameExists(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).existsByRoleName("ADMIN"); + } + + @Test + void testGetRoleById() { + when(roleService.findById(1L)).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "1") + .build(); + Mono response = roleHandler.getRoleById(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).findById(1L); + } + + @Test + void testGetRoleById_NotFound() { + when(roleService.findById(999L)).thenReturn(Mono.empty()); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "999") + .build(); + Mono response = roleHandler.getRoleById(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.NOT_FOUND) + .verifyComplete(); + + verify(roleService).findById(999L); + } + + @Test + void testCreateRole() { + RoleCreateRequest createRequest = new RoleCreateRequest(); + createRequest.setRoleName("NEW_ROLE"); + createRequest.setRoleKey("new_role"); + createRequest.setRoleSort(2); + createRequest.setStatus(1); + + when(roleService.createRole(any(CreateRoleCommand.class))).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .body(Mono.just(createRequest)); + Mono response = roleHandler.createRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.CREATED) + .verifyComplete(); + + verify(roleService).createRole(any(CreateRoleCommand.class)); + } + + @Test + void testUpdateRole() { + RoleUpdateRequest updateRequest = new RoleUpdateRequest(); + updateRequest.setRoleName("UPDATED_ROLE"); + updateRequest.setRoleKey("updated_role"); + updateRequest.setRoleSort(3); + updateRequest.setStatus(0); + + when(roleService.updateRole(any(UpdateRoleCommand.class))).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "1") + .body(Mono.just(updateRequest)); + Mono response = roleHandler.updateRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).updateRole(any(UpdateRoleCommand.class)); + } + + @Test + void testDeleteRole() { + when(roleService.logicalDeleteRole(1L)).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "1") + .build(); + Mono response = roleHandler.deleteRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).logicalDeleteRole(1L); + } + + @Test + void testDeleteRole_NotFound() { + when(roleService.logicalDeleteRole(999L)).thenReturn(Mono.empty()); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "999") + .build(); + Mono response = roleHandler.deleteRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.NOT_FOUND) + .verifyComplete(); + + verify(roleService).logicalDeleteRole(999L); + } + + @Test + void testRestoreRole() { + when(roleService.restoreRole(1L)).thenReturn(Mono.just(testRole)); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "1") + .build(); + Mono response = roleHandler.restoreRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.OK) + .verifyComplete(); + + verify(roleService).restoreRole(1L); + } + + @Test + void testRestoreRole_NotFound() { + when(roleService.restoreRole(999L)).thenReturn(Mono.empty()); + + ServerRequest request = MockServerRequest.builder() + .pathVariable("id", "999") + .build(); + Mono response = roleHandler.restoreRole(request); + + StepVerifier.create(response) + .expectNextMatches(serverResponse -> + serverResponse.statusCode() == HttpStatus.NOT_FOUND) + .verifyComplete(); + + verify(roleService).restoreRole(999L); + } +} \ No newline at end of file