Skip to content

test: CourseController @WebMvcTest 파일럿 추가 + JPA Auditing 설정 분리 - #226

Merged
unam98 merged 1 commit into
devfrom
tests/course-controller-webmvc-test
Aug 6, 2026
Merged

test: CourseController @WebMvcTest 파일럿 추가 + JPA Auditing 설정 분리#226
unam98 merged 1 commit into
devfrom
tests/course-controller-webmvc-test

Conversation

@unam98

@unam98 unam98 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

작업 배경

  • 서비스 레이어 단위 테스트 스윕에 이어, 컨트롤러 레이어(라우팅, @Valid 검증, @userid 인증 리졸버, 예외→HTTP 상태코드 매핑)를 검증하는 @WebMvcTest 슬라이스 테스트를 파일럿으로 도입한다.

변경 사항

영역 내용
ServerApplication.java 루트 설정 클래스에 붙어있던 @EnableJpaAuditing을 제거
config/jpa/JpaAuditingConfig.java (신규) @EnableJpaAuditing을 별도 @Configuration 클래스로 분리
course/controller/CourseControllerTest.java (신규) CourseController 5개 엔드포인트에 대한 @WebMvcTest 파일럿 (8 테스트)

영향 범위

  • @EnableJpaAuditing이 루트 @SpringBootApplication 클래스에 있으면, @WebMvcTest가 엔티티를 전혀 스캔하지 않는 상태에서도 JPA Auditing 인프라(jpaMappingContext)를 억지로 초기화하려다 JPA metamodel must not be empty!로 컨텍스트 로딩 자체가 실패하는 문제가 있었음. 별도 @Configuration 클래스로 분리하면 슬라이스 테스트의 컴포넌트 스캔 필터에서 제외되어 문제가 해결됨.
  • 런타임 동작(전체 컨텍스트 기준 JPA Auditing 활성화)은 동일 — ServerApplicationTests.contextLoads() 포함 전체 196개 테스트 로컬 DB/Redis 기동 후 통과 확인.
  • 컨트롤러 레이어 자체 로직 변경 없음 (테스트 전용 변경).

검증 매트릭스

영향 범위 테스트 코드
POST /api/course 정상 생성 (multipart) 정상_생성
POST /api/course 인증 헤더 없으면 400, 서비스 미호출 인증헤더_없음
POST /api/course title 빈값이면 400 유효성검증_실패
GET /api/course/user 정상 조회 정상_조회
GET /api/course/detail/{id} NotFoundException → 400 매핑 존재하지_않는_코스
PATCH /api/course/{id} 정상 수정 정상_수정
PATCH /api/course/{id} title 빈값이면 400 빈_제목
PUT /api/course 정상 삭제 정상_삭제

Test Plan

  • ./gradlew test --tests "...CourseControllerTest" 8/8 통과
  • 로컬 postgres/redis 기동 후 ./gradlew test 전체 196/196 통과 (ServerApplicationTests.contextLoads() 포함)
  • 나머지 컨트롤러(Record/PublicCourse/User/Scrap/Health/Auth/Banner)로 @WebMvcTest 확대

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Improved the reliability of data change tracking across application features.
  • Tests

    • Added comprehensive coverage for course creation, retrieval, updates, and deletion.
    • Added validation for authentication, request errors, response formatting, and failure handling.

서비스 레이어 단위 테스트에 이어 컨트롤러 레이어(라우팅/@Valid/@userid 인증/예외→HTTP 매핑)
검증을 위해 @WebMvcTest 슬라이스 테스트를 시작한다. 도입 과정에서 @EnableJpaAuditing이
ServerApplication(루트 설정 클래스)에 붙어있으면 슬라이스 테스트가 엔티티 없이도
JpaMetamodelMappingContext를 만들려다 "JPA metamodel must not be empty" 로 컨텍스트 로딩에
실패하는 문제를 발견해, 별도 JpaAuditingConfig로 분리했다.
@unam98 unam98 self-assigned this Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b4c36eb6-6019-49cf-8d2c-775ae5dc4530

📥 Commits

Reviewing files that changed from the base of the PR and between c75f765 and dc2ce33.

📒 Files selected for processing (3)
  • src/main/java/org/runnect/server/ServerApplication.java
  • src/main/java/org/runnect/server/config/jpa/JpaAuditingConfig.java
  • src/test/java/org/runnect/server/course/controller/CourseControllerTest.java
💤 Files with no reviewable changes (1)
  • src/main/java/org/runnect/server/ServerApplication.java

📝 Walkthrough

Walkthrough

The change moves JPA auditing to a dedicated configuration class and adds CourseController tests for authentication, validation, service interactions, response mapping, and bulk deletion.

Changes

JPA auditing configuration

Layer / File(s) Summary
Dedicated auditing configuration
src/main/java/org/runnect/server/ServerApplication.java, src/main/java/org/runnect/server/config/jpa/JpaAuditingConfig.java
ServerApplication no longer enables JPA auditing directly. JpaAuditingConfig enables auditing through Spring configuration.

Course controller tests

Layer / File(s) Summary
Controller test setup
src/test/java/org/runnect/server/course/controller/CourseControllerTest.java
The test suite configures mocked dependencies, valid-token authentication, request helpers, and reusable course data.
Course endpoint scenarios
src/test/java/org/runnect/server/course/controller/CourseControllerTest.java
Tests cover course creation, retrieval, updates, validation failures, exception mapping, and bulk deletion.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes both primary changes: adding CourseController @WebMvcTest coverage and separating JPA Auditing configuration.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch tests/course-controller-webmvc-test

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@unam98
unam98 merged commit 105bda3 into dev Aug 6, 2026
2 checks passed
@unam98
unam98 deleted the tests/course-controller-webmvc-test branch August 6, 2026 06:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants