# EAPIM ExceptionHandler 테스트

## 개요
에러 응답이 `MessageUtil.makeJsonErrorMessage()` 포맷으로 통일되는지 검증

**에러 응답 포맷**:
```json
{"error":"에러코드","error_description":"에러메시지"}
```

## 테스트 케이스

### OAuth2 토큰 발급 성공 (OAuth2TokenSuccessTest)
- **URL**: `http://127.0.0.1:30110/oauth/token`
- **Content-Type**: `application/x-www-form-urlencoded`
- **파라미터**: grant_type, client_id, client_secret, scope
- **테스트 대상**: AuthorizationServerConfig 표준 OAuth2 토큰 발급
- **검증**: HTTP 200, access_token, token_type, expires_in

### Bearer 토큰 인증 성공 (OAuth2BearerAuthTest)
- **Step 1**: 토큰 발급 (`/oauth/token`)
- **Step 2**: Bearer 토큰으로 API 호출 (POST)
- **URL**: `http://127.0.0.1:30110/api/auth/case009?transactionId=1234567890`
- **Authorization**: `Bearer {access_token}`
- **요청**: `{}`
- **테스트 대상**: Bearer 토큰 인증 API
- **검증**: HTTP 200, 정상 응답

### Bearer 토큰 인증 404 에러 (OAuth2BearerAuth404ErrorTest)
- **Step 1**: 토큰 발급 (`/oauth/token`)
- **Step 2**: 존재하지 않는 API 호출 (POST)
- **URL**: `http://127.0.0.1:30110/api/auth/caseXXX`
- **Authorization**: `Bearer {access_token}`
- **요청**: `{}`
- **테스트 대상**: WebMvcConfig @ExceptionHandler(NoHandlerFoundException)
- **검증**: HTTP 404, MessageUtil 포맷

### 400 에러 (ExceptionHandler400ErrorTest)
- **URL**: `http://127.0.0.1:30110/mapi/oauth2/token`
- **요청**: `{}`
- **테스트 대상**: KjbMGOAuth2Controller JwtAuthException 처리
- **검증**: HTTP 400, MessageUtil 포맷

### 404 에러 (ExceptionHandler404ErrorTest)
- **URL**: `http://127.0.0.1:30110/oauth/token/v2`
- **요청**: `{}`
- **테스트 대상**: WebMvcConfig @ExceptionHandler(NoHandlerFoundException)
- **검증**: HTTP 404, MessageUtil 포맷

### 일반 API 정상 응답 (ExceptionHandlerSuccessTest)
- **URL**: `http://localhost:30110/api/test/case001`
- **요청**: `{"serviceId": "TST10001", "aaa": "aaaa", "bbb": "bbbb"}`
- **테스트 대상**: 일반 컨트롤러 정상 응답
- **검증**: HTTP 200, transactionId, status="approved"

### Bearer 토큰 발급 성공 (BearerTokenSuccessTest)
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **Content-Type**: `application/x-www-form-urlencoded`
- **파라미터**: grant_type, client_id, client_secret, scope
- **테스트 대상**: BearerTokenContoller CA Bearer Token 발급
- **검증**: HTTP 200, access_token, token_type="Bearer", expires_in, scope

### Bearer 토큰 발급 에러 (BearerTokenErrorTest)
#### testCase001_잘못된GrantType
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **grant_type**: `password` (잘못된 값)
- **테스트 대상**: BearerTokenContoller JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷

#### testCase002_존재하지않는ClientId
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **client_id**: `INVALID_CLIENT_ID`
- **테스트 대상**: BearerTokenContoller JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷

#### testCase003_잘못된ClientSecret
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **client_secret**: `WRONG_SECRET`
- **테스트 대상**: BearerTokenContoller JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷

#### testCase004_Scope없음
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **scope**: `` (빈 값)
- **테스트 대상**: BearerTokenContoller JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷

#### testCase005_허용되지않은Scope
- **URL**: `http://127.0.0.1:30110/auth/oauth/v2/token`
- **scope**: `invalid_scope`
- **테스트 대상**: BearerTokenContoller JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷

### Bearer 토큰 필터 에러 (BearerTokenFilterErrorTest)
- **URL**: `http://127.0.0.1:30110/api/auth/case009?transactionId=1234567890`
- **Authorization**: `Bearer INVALID_TOKEN_12345`
- **요청**: `{}`
- **테스트 대상**: BearerTokenFilter JwtAuthException 처리
- **검증**: HTTP 401, MessageUtil 포맷
