package com.tcm.training.admin.common; import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class GlobalExceptionHandlerTest { private final GlobalExceptionHandler handler = new GlobalExceptionHandler(); @Test void handleIllegalStateShouldReturnBusinessMessage() { ApiResponse response = handler.handleIllegalState( new IllegalStateException("短信发送失败,请稍后重试"), mockRequest() ); assertEquals(500, response.getCode()); assertEquals("短信发送失败,请稍后重试", response.getMsg()); } @Test void handleIllegalStateShouldReturnFriendlyFallbackWhenMessageBlank() { ApiResponse response = handler.handleIllegalState( new IllegalStateException(" "), mockRequest() ); assertEquals(500, response.getCode()); assertEquals("服务器开小差啦,请稍后重试", response.getMsg()); } @Test void handleExceptionShouldHideInternalMessage() { ApiResponse response = handler.handleException( new RuntimeException("database down"), mockRequest() ); assertEquals(500, response.getCode()); assertEquals("服务器开小差啦,请稍后重试", response.getMsg()); } private HttpServletRequest mockRequest() { HttpServletRequest request = mock(HttpServletRequest.class); when(request.getMethod()).thenReturn("POST"); when(request.getRequestURI()).thenReturn("/api/app/auth/sms-code"); return request; } }