轻松聘AI开发
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

213 lines
11 KiB

package com.mydreamjob.common.exception;
import com.mydreamjob.common.api.ApiResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockHttpServletRequest;
import static org.junit.jupiter.api.Assertions.*;
class GlobalExceptionHandlerHttpStatusTest {
private GlobalExceptionHandler handler;
private MockHttpServletRequest request;
@BeforeEach
void setUp() {
handler = new GlobalExceptionHandler(new com.mydreamjob.common.logging.RequestIdAccessor());
request = new MockHttpServletRequest();
request.setRequestURI("/api/v1/test");
}
// ── 403 ───────────────────────────────────────────────────
@Test
void forbiddenError_shouldReturnHttp403() {
BusinessException ex = new BusinessException(ErrorCode.FORBIDDEN);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.FORBIDDEN.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.FORBIDDEN.getCode(), resp.getBody().getCode());
}
// ── 404 ───────────────────────────────────────────────────
@Test
void companyNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.COMPANY_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
}
@Test
void jobNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.JOB_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.JOB_NOT_FOUND.getCode(), resp.getBody().getCode());
}
@Test
void applicationNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.APPLICATION_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
}
// ── 409 ───────────────────────────────────────────────────
@Test
void companyAlreadyExists_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.COMPANY_ALREADY_EXISTS);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.COMPANY_ALREADY_EXISTS.getCode(), resp.getBody().getCode());
}
@Test
void applicationDuplicate_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.APPLICATION_DUPLICATE);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.APPLICATION_DUPLICATE.getCode(), resp.getBody().getCode());
}
@Test
void invalidJobStatusTransition_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.INVALID_JOB_STATUS_TRANSITION);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
}
@Test
void invalidApplicationStatusTransition_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.INVALID_APPLICATION_STATUS_TRANSITION);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
}
@Test
void duplicateReview_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.DUPLICATE_REVIEW);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.DUPLICATE_REVIEW.getCode(), resp.getBody().getCode());
}
@Test
void reviewNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.REVIEW_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.REVIEW_NOT_FOUND.getCode(), resp.getBody().getCode());
}
@Test
void conversationNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.CONVERSATION_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.CONVERSATION_NOT_FOUND.getCode(), resp.getBody().getCode());
}
@Test
void privacySettingsConcurrentUpdate_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.PRIVACY_SETTINGS_CONCURRENT_UPDATE);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.PRIVACY_SETTINGS_CONCURRENT_UPDATE.getCode(), resp.getBody().getCode());
}
// ── 400 ───────────────────────────────────────────────────
@Test
void genericBusinessError_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.BAD_REQUEST);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.BAD_REQUEST.getCode(), resp.getBody().getCode());
}
@Test
void interviewOnlineUrlRequired_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.INTERVIEW_ONLINE_URL_REQUIRED);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.INTERVIEW_ONLINE_URL_REQUIRED.getCode(), resp.getBody().getCode());
}
@Test
void interviewOfflineAddressRequired_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.INTERVIEW_OFFLINE_ADDRESS_REQUIRED);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.INTERVIEW_OFFLINE_ADDRESS_REQUIRED.getCode(), resp.getBody().getCode());
}
@Test
void unauthorized_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.UNAUTHORIZED);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.UNAUTHORIZED.getCode(), resp.getBody().getCode());
}
// ── Offer 进阶错误码映射 ─────────────────────────────────
@Test
void offerCounterOfferNotFound_shouldReturnHttp404() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COUNTER_OFFER_NOT_FOUND);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.NOT_FOUND.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COUNTER_OFFER_NOT_FOUND.getCode(), resp.getBody().getCode());
}
@Test
void offerCounterOfferExists_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COUNTER_OFFER_EXISTS);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COUNTER_OFFER_EXISTS.getCode(), resp.getBody().getCode());
}
@Test
void offerCounterOfferNotPending_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COUNTER_OFFER_NOT_PENDING);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COUNTER_OFFER_NOT_PENDING.getCode(), resp.getBody().getCode());
}
@Test
void offerCounterOfferExpired_shouldReturnHttp409() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COUNTER_OFFER_EXPIRED);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.CONFLICT.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COUNTER_OFFER_EXPIRED.getCode(), resp.getBody().getCode());
}
@Test
void offerNotWithdrawable_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_NOT_WITHDRAWABLE);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_NOT_WITHDRAWABLE.getCode(), resp.getBody().getCode());
}
@Test
void offerCompareTooMany_shouldReturnHttp400() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COMPARE_TOO_MANY);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.BAD_REQUEST.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COMPARE_TOO_MANY.getCode(), resp.getBody().getCode());
}
@Test
void offerCompareNotOwner_shouldReturnHttp403() {
BusinessException ex = new BusinessException(ErrorCode.OFFER_COMPARE_NOT_OWNER);
ResponseEntity<ApiResponse<Void>> resp = handler.handleBusinessException(ex, request);
assertEquals(HttpStatus.FORBIDDEN.value(), resp.getStatusCode().value());
assertEquals(ErrorCode.OFFER_COMPARE_NOT_OWNER.getCode(), resp.getBody().getCode());
}
}