Skip to content

Conversation

@kjeongh
Copy link
Contributor

@kjeongh kjeongh commented Nov 30, 2025

요약


피드백, 줌, 태스크, 인프라 테스트코드 작성

작업 내용


피드백, 줌, 태스크, 인프라 서비스로직 테스트코드 작성

참고 사항



관련 이슈

BACKEND-



Summary by CodeRabbit

  • Tests
    • 피드백 서비스의 CRUD 작업 및 역할 기반 접근 제어에 대한 포괄적인 테스트 추가
    • 작업 서비스의 요청 처리 및 메시지 큐 상호작용에 대한 테스트 추가
    • Zoom 출석 API 연동 및 웹훅 이벤트 처리에 대한 테스트 추가
    • Zoom 통계 조회 및 순위 기능에 대한 테스트 추가

✏️ Tip: You can customize this high-level summary in your review settings.

@kjeongh kjeongh self-assigned this Nov 30, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 30, 2025

Walkthrough

네 개의 새로운 테스트 클래스를 추가하여 FeedbackService, TaskService, ZoomAttendanceService, ZoomStatisticsService의 단위 테스트 커버리지를 확대합니다. Mockito 기반의 종합적인 테스트 스위트로 주요 기능, 예외 처리, 접근 제어를 검증합니다.

Changes

Cohort / File(s) 요약
피드백 도메인 테스트
techeerzip/src/test/java/backend/techeerzip/domain/feedback/service/FeedbackServiceTest.java
FeedbackService의 CRUD 작업, 역할 기반 권한 검증, 예외 처리를 포함한 종합 테스트 스위트 추가. 피드백 요청 생성/승인/거절, 조회, 업데이트, 삭제 기능 검증
작업 도메인 테스트
techeerzip/src/test/java/backend/techeerzip/domain/task/service/TaskServiceTest.java
TaskService의 다양한 작업 요청(블로그 크롤링, 이력서 추출, CS 채점) 기능에 대한 테스트. 큐 상호작용, Redis 상태 업데이트 검증
Zoom 도메인 테스트
techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomAttendanceServiceTest.java, techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomStatisticsServiceTest.java
Zoom 출석 기록 관리(참가자 입장/퇴장 이벤트 처리)와 사용자별 통계 조회 기능에 대한 테스트

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

추가 검토 주의 사항:

  • ZoomStatisticsServiceTest: 시니어 검토 필요 태그 포함되어 있음
  • 권한 검증 로직: FeedbackServiceTest의 역할 기반 접근 제어 시나리오 검증 정확성 확인
  • 이벤트 핸들링: ZoomAttendanceServiceTest의 null 처리 및 엣지 케이스 검증 논리 검토
  • Mockito 설정: 모든 테스트에서 lenient 모드 사용 여부 및 검증 전략의 일관성 확인

Possibly related PRs

Suggested reviewers

  • dlwhsk0
  • dongwooooooo
  • jungeunyooon
  • yuripbong
  • printSANO

Poem

🐰 테스트의 정원에 새 꽃들이 피었네,
피드백과 줌, 그리고 작업들까지,
목(Mock)의 친구들과 함께 춤을 추며,
예외를 잡고 경로를 밝히니,
품질의 나무가 한 뼘 더 자랐어! 🌱✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.03% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 변경 내용의 주요 내용을 정확하게 반영하고 있습니다. 피드백, 줌, 태스크 서비스의 테스트 코드 추가라는 핵심 변경을 간결하게 표현했습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch BACKEND-192

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomStatisticsServiceTest.java (1)

31-31: 사용하지 않는 import 제거

Role 클래스가 import 되었지만 실제로 사용되지 않습니다.

-import backend.techeerzip.domain.role.entity.Role;
techeerzip/src/test/java/backend/techeerzip/domain/task/service/TaskServiceTest.java (2)

140-152: 빈 리스트 처리 테스트가 잘 작성되었습니다.

빈 URL 리스트에 대해 큐 전송이 발생하지 않음을 올바르게 검증합니다. 단, Arrays.asList()보다 List.of() 또는 Collections.emptyList()가 더 명확합니다.

-            List<String> emptyBlogUrls = Arrays.asList();
+            List<String> emptyBlogUrls = List.of();

275-309: 테스트 이름과 실제 검증 내용 불일치

validateGoMQDataFormatvalidatePythonMQDataFormat 테스트는 실제로 데이터 형식을 검증하지 않고 큐 타입만 확인합니다. 테스트 이름을 명확하게 하거나 ArgumentCaptor를 사용하여 실제 데이터 구조를 검증하는 것을 고려해 주세요.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f66bc1 and 4b1f930.

📒 Files selected for processing (4)
  • techeerzip/src/test/java/backend/techeerzip/domain/feedback/service/FeedbackServiceTest.java (1 hunks)
  • techeerzip/src/test/java/backend/techeerzip/domain/task/service/TaskServiceTest.java (1 hunks)
  • techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomAttendanceServiceTest.java (1 hunks)
  • techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomStatisticsServiceTest.java (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomStatisticsServiceTest.java (1)
techeerzip/src/main/java/backend/techeerzip/domain/user/exception/UserNotFoundException.java (1)
  • UserNotFoundException (6-10)
techeerzip/src/test/java/backend/techeerzip/domain/feedback/service/FeedbackServiceTest.java (5)
techeerzip/src/main/java/backend/techeerzip/domain/feedback/exception/FeedbackInvalidRecipientException.java (1)
  • FeedbackInvalidRecipientException (6-10)
techeerzip/src/main/java/backend/techeerzip/domain/feedback/exception/FeedbackInvalidTypeException.java (1)
  • FeedbackInvalidTypeException (6-10)
techeerzip/src/main/java/backend/techeerzip/domain/feedback/exception/FeedbackNotFoundException.java (1)
  • FeedbackNotFoundException (6-10)
techeerzip/src/main/java/backend/techeerzip/domain/feedback/exception/FeedbackSelfRequestException.java (1)
  • FeedbackSelfRequestException (6-10)
techeerzip/src/main/java/backend/techeerzip/domain/user/exception/UserNotFoundException.java (1)
  • UserNotFoundException (6-10)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (15)
techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomStatisticsServiceTest.java (3)

47-121: 테스트 구조가 잘 작성되었습니다.

사용자 Zoom 통계 조회 테스트가 given/when/then 패턴을 잘 따르고 있으며, 성공 케이스, 사용자 미존재 예외, 빈 데이터 반환 케이스를 모두 검증하고 있습니다.


123-236: 월별 1등 사용자 조회 테스트가 잘 작성되었습니다.

다양한 시나리오(데이터 존재, 데이터 없음, 미등록 사용자, 다중 사용자)를 커버하여 서비스 로직의 정확성을 효과적으로 검증합니다.


238-263: 헬퍼 메서드가 잘 구성되었습니다.

Mock 객체 생성을 위한 헬퍼 메서드들이 코드 중복을 줄이고 테스트의 가독성을 높입니다.

techeerzip/src/test/java/backend/techeerzip/domain/task/service/TaskServiceTest.java (3)

60-106: 블로그 크롤링 태스크 테스트가 적절합니다.

SIGNUP_BLOG_FETCH와 DAILY_UPDATE 태스크 타입에 대해 올바른 큐 타입과 Redis 상호작용을 검증하고 있습니다.


178-273: 이력서 추출 및 CS 채점 테스트가 잘 구성되었습니다.

다양한 사용자 ID와 빈 데이터 케이스를 포함하여 Redis 상태 업데이트와 올바른 큐 타입 사용을 검증합니다.


311-355: TaskType별 큐 매핑 검증이 잘 작성되었습니다.

여러 TaskType에 대해 올바른 큐로 전송되는지 효율적으로 검증합니다.

techeerzip/src/test/java/backend/techeerzip/domain/zoom/service/ZoomAttendanceServiceTest.java (5)

40-71: API 연결 테스트가 적절합니다.

성공과 실패 케이스를 모두 검증하며 ZoomApiClient 호출을 확인합니다.


73-128: 웹훅 이벤트 처리 테스트가 잘 구성되었습니다.

입장, 퇴장, 알 수 없는 이벤트 타입에 대한 처리를 명확하게 검증합니다.


130-202: 참가자 입장 이벤트 테스트가 우수합니다.

argThat을 사용한 상세 검증과 null/누락된 정보에 대한 엣지 케이스 처리가 잘 되어 있습니다.


204-285: 참가자 퇴장 이벤트 테스트가 포괄적입니다.

퇴장 시간 업데이트, 기록 없음, 소회의실 이벤트 무시, null 처리 등 다양한 시나리오를 잘 커버합니다. 특히 소회의실 관련 이벤트 필터링 테스트가 Zoom 도메인 특성을 잘 반영합니다.


287-324: 헬퍼 메서드가 잘 설계되었습니다.

다양한 웹훅 이벤트 시나리오를 생성하는 헬퍼 메서드들이 테스트의 가독성과 유지보수성을 높입니다.

techeerzip/src/test/java/backend/techeerzip/domain/feedback/service/FeedbackServiceTest.java (4)

62-101: 테스트 픽스처 설정이 잘 구성되었습니다.

멘토/비멘토 역할, 다양한 사용자, 피드백 엔티티, 사용자 주체 등 필요한 모든 mock 객체가 명확하게 설정되어 있습니다.


103-219: 피드백 생성 테스트가 포괄적입니다.

성공 케이스와 함께 요청자 미존재, 잘못된 수신자, 자기 자신에게 요청, 잘못된 타입 등 모든 검증 시나리오를 커버합니다. 자기 요청 테스트(Line 178-180)에서 수신자 검증을 통과하도록 멘토 역할을 설정한 것이 적절합니다.


221-265: 피드백 승인 테스트가 잘 작성되었습니다.

권한 검증(멘토 여부)과 유효성 검증(시간 선택)을 포함하여 주요 시나리오를 커버합니다.


267-500: 나머지 테스트 메서드들이 일관되게 작성되었습니다.

거절, 조회, 수정, 삭제, 가이드라인 관리 등 모든 CRUD 작업에 대해 성공/실패 케이스를 일관된 패턴으로 검증합니다. 특히 멘토 가이드라인 수정 시 권한 검증 테스트(Lines 488-499)가 적절합니다.

@sonarqubecloud
Copy link

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