forked from baskbuddy/zhangshun
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
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());
|
|
}
|
|
}
|
|
|