test: 添加SysConfigHandler单元测试

- 测试系统配置Handler的9个方法
- 覆盖查询、创建、更新、删除等功能
- 使用Mockito模拟Service层依赖
- 使用StepVerifier验证响应式流
This commit is contained in:
张翔
2026-03-14 16:35:10 +08:00
parent 28ed7a8ed0
commit db046bcb3c
@@ -0,0 +1,213 @@
package cn.novalon.manage.sys.handler.config;
import cn.novalon.manage.sys.core.domain.SysConfig;
import cn.novalon.manage.sys.core.service.ISysConfigService;
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 SysConfigHandlerTest {
@Mock
private ISysConfigService configService;
private SysConfigHandler configHandler;
private SysConfig testConfig;
@BeforeEach
void setUp() {
configHandler = new SysConfigHandler(configService);
testConfig = new SysConfig();
testConfig.setId(1L);
testConfig.setConfigName("系统名称");
testConfig.setConfigKey("system.name");
testConfig.setConfigValue("Novalon管理系统");
testConfig.setConfigType("string");
testConfig.setCreatedAt(LocalDateTime.now());
testConfig.setUpdatedAt(LocalDateTime.now());
}
@Test
void testGetAllConfigs() {
when(configService.findAll()).thenReturn(Flux.just(testConfig));
ServerRequest request = MockServerRequest.builder().build();
Mono<ServerResponse> response = configHandler.getAllConfigs(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.OK)
.verifyComplete();
verify(configService).findAll();
}
@Test
void testGetConfigById() {
when(configService.findById(1L)).thenReturn(Mono.just(testConfig));
ServerRequest request = MockServerRequest.builder()
.pathVariable("id", "1")
.build();
Mono<ServerResponse> response = configHandler.getConfigById(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.OK)
.verifyComplete();
verify(configService).findById(1L);
}
@Test
void testGetConfigById_NotFound() {
when(configService.findById(999L)).thenReturn(Mono.empty());
ServerRequest request = MockServerRequest.builder()
.pathVariable("id", "999")
.build();
Mono<ServerResponse> response = configHandler.getConfigById(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.NOT_FOUND)
.verifyComplete();
verify(configService).findById(999L);
}
@Test
void testGetConfigByKey() {
when(configService.findByConfigKey("system.name")).thenReturn(Mono.just(testConfig));
ServerRequest request = MockServerRequest.builder()
.pathVariable("configKey", "system.name")
.build();
Mono<ServerResponse> response = configHandler.getConfigByKey(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.OK)
.verifyComplete();
verify(configService).findByConfigKey("system.name");
}
@Test
void testGetConfigByKey_NotFound() {
when(configService.findByConfigKey("unknown.key")).thenReturn(Mono.empty());
ServerRequest request = MockServerRequest.builder()
.pathVariable("configKey", "unknown.key")
.build();
Mono<ServerResponse> response = configHandler.getConfigByKey(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.NOT_FOUND)
.verifyComplete();
verify(configService).findByConfigKey("unknown.key");
}
@Test
void testCreateConfig() {
SysConfig newConfig = new SysConfig();
newConfig.setConfigName("新配置");
newConfig.setConfigKey("new.config");
newConfig.setConfigValue("value");
newConfig.setConfigType("string");
when(configService.save(any())).thenReturn(Mono.just(testConfig));
ServerRequest request = MockServerRequest.builder()
.body(Mono.just(newConfig));
Mono<ServerResponse> response = configHandler.createConfig(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.CREATED)
.verifyComplete();
verify(configService).save(any());
}
@Test
void testUpdateConfig() {
SysConfig updateConfig = new SysConfig();
updateConfig.setConfigName("更新配置");
updateConfig.setConfigValue("updated_value");
updateConfig.setConfigType("string");
when(configService.findById(1L)).thenReturn(Mono.just(testConfig));
when(configService.save(any())).thenReturn(Mono.just(testConfig));
ServerRequest request = MockServerRequest.builder()
.pathVariable("id", "1")
.body(Mono.just(updateConfig));
Mono<ServerResponse> response = configHandler.updateConfig(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.OK)
.verifyComplete();
verify(configService).findById(1L);
verify(configService).save(any());
}
@Test
void testUpdateConfig_NotFound() {
SysConfig updateConfig = new SysConfig();
updateConfig.setConfigName("更新配置");
when(configService.findById(999L)).thenReturn(Mono.empty());
ServerRequest request = MockServerRequest.builder()
.pathVariable("id", "999")
.body(Mono.just(updateConfig));
Mono<ServerResponse> response = configHandler.updateConfig(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.NOT_FOUND)
.verifyComplete();
verify(configService).findById(999L);
}
@Test
void testDeleteConfig() {
when(configService.deleteById(1L)).thenReturn(Mono.empty());
ServerRequest request = MockServerRequest.builder()
.pathVariable("id", "1")
.build();
Mono<ServerResponse> response = configHandler.deleteConfig(request);
StepVerifier.create(response)
.expectNextMatches(serverResponse ->
serverResponse.statusCode() == HttpStatus.NO_CONTENT)
.verifyComplete();
verify(configService).deleteById(1L);
}
}