test: 添加MenuHandler单元测试
- 测试菜单Handler的9个方法 - 覆盖查询、创建、更新、删除、树形结构等功能 - 使用Mockito模拟Service层依赖 - 使用StepVerifier验证响应式流
This commit is contained in:
+222
@@ -0,0 +1,222 @@
|
|||||||
|
package cn.novalon.manage.sys.handler.menu;
|
||||||
|
|
||||||
|
import cn.novalon.manage.sys.core.domain.SysMenu;
|
||||||
|
import cn.novalon.manage.sys.core.service.ISysMenuService;
|
||||||
|
import cn.novalon.manage.sys.dto.request.MenuCreateRequest;
|
||||||
|
import cn.novalon.manage.sys.dto.request.MenuUpdateRequest;
|
||||||
|
import cn.novalon.manage.sys.core.command.CreateMenuCommand;
|
||||||
|
import cn.novalon.manage.sys.core.command.UpdateMenuCommand;
|
||||||
|
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.anyLong;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class MenuHandlerTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private ISysMenuService menuService;
|
||||||
|
|
||||||
|
private MenuHandler menuHandler;
|
||||||
|
private SysMenu testMenu;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
menuHandler = new MenuHandler(menuService);
|
||||||
|
|
||||||
|
testMenu = new SysMenu();
|
||||||
|
testMenu.setId(1L);
|
||||||
|
testMenu.setParentId(0L);
|
||||||
|
testMenu.setMenuName("系统管理");
|
||||||
|
testMenu.setMenuType("M");
|
||||||
|
testMenu.setOrderNum(1);
|
||||||
|
testMenu.setComponent("system");
|
||||||
|
testMenu.setPerms("system:manage");
|
||||||
|
testMenu.setStatus(1);
|
||||||
|
testMenu.setCreatedAt(LocalDateTime.now());
|
||||||
|
testMenu.setUpdatedAt(LocalDateTime.now());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetAllMenus() {
|
||||||
|
when(menuService.findAll()).thenReturn(Flux.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder().build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getAllMenus(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetMenuById() {
|
||||||
|
when(menuService.findById(1L)).thenReturn(Mono.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.pathVariable("id", "1")
|
||||||
|
.build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getMenuById(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findById(1L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetMenuById_NotFound() {
|
||||||
|
when(menuService.findById(999L)).thenReturn(Mono.empty());
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.pathVariable("id", "999")
|
||||||
|
.build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getMenuById(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.NOT_FOUND)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findById(999L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetMenuTree() {
|
||||||
|
when(menuService.findAll()).thenReturn(Flux.just(testMenu));
|
||||||
|
when(menuService.buildMenuTree(any())).thenReturn(Flux.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder().build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getMenuTree(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findAll();
|
||||||
|
verify(menuService).buildMenuTree(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetMenusByParent() {
|
||||||
|
when(menuService.findByParentId(0L)).thenReturn(Flux.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.queryParam("parentId", "0")
|
||||||
|
.build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getMenusByParent(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findByParentId(0L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetMenusByType() {
|
||||||
|
when(menuService.findAll()).thenReturn(Flux.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.queryParam("menuType", "M")
|
||||||
|
.build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.getMenusByType(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCreateMenu() {
|
||||||
|
MenuCreateRequest createRequest = new MenuCreateRequest();
|
||||||
|
createRequest.setParentId(0L);
|
||||||
|
createRequest.setMenuName("新菜单");
|
||||||
|
createRequest.setMenuType("M");
|
||||||
|
createRequest.setOrderNum(2);
|
||||||
|
createRequest.setComponent("new_menu");
|
||||||
|
createRequest.setPerms("new:menu");
|
||||||
|
createRequest.setStatus(1);
|
||||||
|
|
||||||
|
when(menuService.createMenu(any(CreateMenuCommand.class))).thenReturn(Mono.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.body(Mono.just(createRequest));
|
||||||
|
Mono<ServerResponse> response = menuHandler.createMenu(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.CREATED)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).createMenu(any(CreateMenuCommand.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testUpdateMenu() {
|
||||||
|
MenuUpdateRequest updateRequest = new MenuUpdateRequest();
|
||||||
|
updateRequest.setParentId(0L);
|
||||||
|
updateRequest.setMenuName("更新菜单");
|
||||||
|
updateRequest.setMenuType("M");
|
||||||
|
updateRequest.setOrderNum(3);
|
||||||
|
updateRequest.setComponent("updated_menu");
|
||||||
|
updateRequest.setPerms("updated:menu");
|
||||||
|
updateRequest.setStatus(1);
|
||||||
|
|
||||||
|
when(menuService.updateMenu(any(UpdateMenuCommand.class))).thenReturn(Mono.just(testMenu));
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.pathVariable("id", "1")
|
||||||
|
.body(Mono.just(updateRequest));
|
||||||
|
Mono<ServerResponse> response = menuHandler.updateMenu(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.OK)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).updateMenu(any(UpdateMenuCommand.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testDeleteMenu() {
|
||||||
|
when(menuService.deleteMenu(1L)).thenReturn(Mono.empty());
|
||||||
|
|
||||||
|
ServerRequest request = MockServerRequest.builder()
|
||||||
|
.pathVariable("id", "1")
|
||||||
|
.build();
|
||||||
|
Mono<ServerResponse> response = menuHandler.deleteMenu(request);
|
||||||
|
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.expectNextMatches(serverResponse ->
|
||||||
|
serverResponse.statusCode() == HttpStatus.NO_CONTENT)
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
verify(menuService).deleteMenu(1L);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user