Skip to content

[feat] 비공개 방 비밀번호 입력 검증 api 개발#57

Merged
hd0rable merged 18 commits intodevelopfrom
feat/#54-post-room-password-verify
Jul 9, 2025
Merged

[feat] 비공개 방 비밀번호 입력 검증 api 개발#57
hd0rable merged 18 commits intodevelopfrom
feat/#54-post-room-password-verify

Conversation

@hd0rable
Copy link
Member

@hd0rable hd0rable commented Jul 8, 2025

#️⃣ 연관된 이슈

closes #54

📝 작업 내용

  • 비공개 방 비밀번호 입력 검증 api를 개발했습니다.
  • 비공개 방 비밀번호 입력 검증 api 흐름은 다음과 같습니다
controller : 유효성 검증 & request dto -> query로 매핑 & Usecase로 query 전달
application : User,Book commandport에서 검증, Rome 도메인 에서 비밀번호 유효성 검증 
  • 도메인 Room은 다음과 같은 비밀번호 검증을 진행합니다.
  1. 모집기간이 만료된 방인지
  2. 공개방인지
  3. 비밀번호가 일치하는지
  • isRecruitmentPeriodExpired() 같은 경우 방 참여하기 시 재사용가능할 것 같아 public 메서드로 작성하였습니다
  • 비공개 방 생성시 비밀번호 해싱 후 저장시에 누락되었던 엔티티에 칼럼 제약조건을 삭제했습니다.
  • 관련 통합, 단위 테스트도 작성하였습니다

📸 스크린샷

image image

💬 리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

  • 신규 기능

    • 비공개 방의 비밀번호 검증 API가 추가되었습니다.
    • 비밀번호 검증 실패, 공개방 비밀번호 불필요, 모집기간 만료에 대한 새로운 에러 코드가 도입되었습니다.
    • 방 도메인에 비밀번호 검증 및 모집기간 만료 확인 기능이 추가되었습니다.
  • 버그 수정

    • 비밀번호 입력값 및 모집기간 만료 등 다양한 예외 상황에 대한 검증 로직이 강화되었습니다.
  • 테스트

    • 비밀번호 검증 API와 도메인 로직에 대한 통합 및 단위 테스트가 추가되었습니다.
    • 입력값 유효성 검사 및 에러 응답에 대한 테스트가 포함되었습니다.

@hd0rable hd0rable requested a review from seongjunnoh July 8, 2025 16:24
@coderabbitai
Copy link

coderabbitai bot commented Jul 8, 2025

"""

Walkthrough

비공개 방의 비밀번호 검증 API가 새롭게 도입되었습니다. 이를 위해 도메인, 서비스, 컨트롤러, 요청/응답 DTO, 예외 코드가 추가 및 확장되었고, 관련 단위 및 통합 테스트가 구현되었습니다. 또한, 불필요한 더미 클래스가 삭제되었습니다.

Changes

파일/경로 그룹 변경 요약
src/main/java/konkuk/thip/common/exception/code/ErrorCode.java 방 관련 비밀번호 오류, 모집기간 만료 오류 등 3개 에러코드 추가
src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java 비공개 방 비밀번호 검증 POST 엔드포인트 추가
src/main/java/konkuk/thip/room/adapter/in/web/request/RoomVerifyPasswordRequest.java 비밀번호 요청 DTO 및 toQuery 변환 메서드 추가
src/main/java/konkuk/thip/room/application/port/in/RoomVerifyPasswordUseCase.java 비밀번호 검증 유스케이스 인터페이스 추가
src/main/java/konkuk/thip/room/application/port/in/dto/RoomVerifyPasswordQuery.java 비밀번호 검증용 쿼리 DTO 레코드 추가
src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java 비밀번호 검증 서비스 구현체 추가
src/main/java/konkuk/thip/room/domain/Room.java 모집기간 만료/비밀번호 검증 메서드 추가
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java password 필드의 @column(length=4) 어노테이션 제거
src/main/java/konkuk/thip/room/application/port/in/dto/DummyQuery.java 더미 쿼리 클래스 삭제
src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java 비밀번호 검증 API 통합 테스트 추가
src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordControllerTest.java 비밀번호 검증 컨트롤러 단위 테스트 추가
src/test/java/konkuk/thip/room/domain/RoomTest.java 모집기간 만료/비밀번호 검증 도메인 테스트 추가

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Controller as RoomQueryController
    participant Service as RoomVerifyPasswordService
    participant RoomPort as RoomCommandPort
    participant Room as Room(domain)

    Client->>Controller: POST /rooms/{roomId}/password (password)
    Controller->>Service: verifyRoomPassword(query)
    Service->>RoomPort: findById(roomId)
    Service->>Room: verifyPassword(password)
    Room-->>Service: (예외 또는 성공)
    Service-->>Controller: Void
    Controller-->>Client: BaseResponse<Void>
Loading

Assessment against linked issues

Objective Addressed Explanation
비공개 방 비밀번호 입력 API 개발 (#54)

Poem

🐇
비공개 방에 비밀문이 생겼네,
네 자리 숫자, 맞춰야만 입장해!
모집기간도 꼼꼼히 살피고,
틀리면 에러코드가 인사하네.
테스트도 빵빵, 토끼는 신나네!
🎉
"""


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 70df261 and c0feed8.

📒 Files selected for processing (4)
  • src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/in/web/request/RoomVerifyPasswordRequest.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/port/in/dto/RoomVerifyPasswordQuery.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1)
src/main/java/konkuk/thip/room/adapter/in/web/RoomCommandController.java (1)
  • RestController (14-26)
⏰ 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 (4)
src/main/java/konkuk/thip/room/application/port/in/dto/RoomVerifyPasswordQuery.java (1)

1-7: 깔끔한 구현입니다!

비밀번호 검증을 위한 간단하고 명확한 레코드 구현입니다. 불변성과 데이터 캡슐화가 잘 구현되어 있습니다.

src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1)

14-22: REST API 구현이 우수합니다!

  • RESTful한 엔드포인트 설계 (/rooms/{roomId}/password)
  • 적절한 HTTP 메서드 사용 (POST)
  • @Valid 어노테이션을 통한 입력 검증
  • 기존 코드베이스와 일관된 응답 형태 (BaseResponse<Void>)
  • 한국어 주석으로 명확한 의도 표현
src/main/java/konkuk/thip/room/adapter/in/web/request/RoomVerifyPasswordRequest.java (2)

9-11: 검증 로직이 잘 구현되어 있습니다!

  • @NotBlank로 필수 입력 검증
  • @Pattern으로 정확히 4자리 숫자 검증
  • 사용자 친화적인 한국어 오류 메시지
  • 정규표현식 \\d{4}가 요구사항에 적합

13-17: DTO 변환 메서드가 적절합니다!

toQuery 메서드가 요청 DTO를 쿼리 DTO로 깔끔하게 변환하고 있습니다. 레이어 간 데이터 전달 패턴이 잘 구현되어 있습니다.

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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: 1

🧹 Nitpick comments (3)
src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java (1)

21-32: 반환 타입 개선 제안

메서드가 Void를 반환하고 null을 리턴하는 것보다 void를 사용하는 것이 더 명확합니다:

@Override
-public Void verifyRoomPassword(RoomVerifyPasswordQuery query) {
+public void verifyRoomPassword(RoomVerifyPasswordQuery query) {
    //유저 검증
    userCommandPort.findById(query.userId());
    
    //방 검증
    Room room = roomCommandPort.findById(query.roomId());
    
    //도메인에서 비밀번호 검증 로직 수행
    room.verifyPassword(query.password());
-   return null;
}

이는 UseCase 인터페이스도 함께 수정해야 합니다.

src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordControllerTest.java (1)

84-95: 경로 매개변수 검증 테스트

roomId 누락 시나리오 테스트가 적절합니다. 다만 더 구체적인 검증이 가능합니다:

@Test
@DisplayName("roomId가 없을 때 400 error")
void missing_roomId() throws Exception {
    Map<String, Object> req = buildValidRequest();
    req.remove("roomId");
    mockMvc.perform(post("/rooms//password")
                    .requestAttr("userId", req.get("userId"))
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(objectMapper.writeValueAsString(req)))
-           .andExpect(status().is4xxClientError());
+           .andExpect(status().isNotFound());
}

404 Not Found가 더 구체적인 응답입니다.

src/main/java/konkuk/thip/room/domain/Room.java (1)

119-126: 에러 메시지 개선 제안

현재 에러 메시지에 마감일 정보를 포함하고 있는 것이 좋습니다. 다만 메시지 일관성을 위해 소폭 개선할 수 있습니다:

if (isRecruitmentPeriodExpired()) {
-   String message = String.format("모집기간(%s까지)이 만료된 방에는 참여할 수 없습니다.", deadline);
+   String message = String.format("모집기간이 만료된 방입니다. (마감일: %s)", deadline);
    throw new BusinessException(
        ErrorCode.ROOM_RECRUITMENT_PERIOD_EXPIRED, new IllegalArgumentException(message)
    );
}

이는 테스트의 에러 메시지 검증과도 일치합니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a83cb05 and c6eeb85.

📒 Files selected for processing (12)
  • src/main/java/konkuk/thip/common/exception/code/ErrorCode.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/in/web/request/RoomVerifyPasswordRequest.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java (0 hunks)
  • src/main/java/konkuk/thip/room/application/port/in/RoomVerifyPasswordUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/port/in/dto/DummyQuery.java (0 hunks)
  • src/main/java/konkuk/thip/room/application/port/in/dto/RoomVerifyPasswordQuery.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java (1 hunks)
  • src/main/java/konkuk/thip/room/domain/Room.java (2 hunks)
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (1 hunks)
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordControllerTest.java (1 hunks)
  • src/test/java/konkuk/thip/room/domain/RoomTest.java (3 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java
  • src/main/java/konkuk/thip/room/application/port/in/dto/DummyQuery.java
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1)
src/main/java/konkuk/thip/room/adapter/in/web/RoomCommandController.java (1)
  • RestController (14-26)
🔇 Additional comments (17)
src/main/java/konkuk/thip/room/application/port/in/dto/RoomVerifyPasswordQuery.java (1)

3-8: 깔끔한 쿼리 DTO 구현입니다

레코드 클래스를 사용하여 불변 객체로 구현되었고, 필드 타입과 명명이 적절합니다. 쿼리 DTO 레이어에서는 검증 로직이 없는 것이 맞습니다.

src/main/java/konkuk/thip/room/application/port/in/RoomVerifyPasswordUseCase.java (1)

5-7: 인터페이스 구현이 적절합니다

단일 책임 원칙을 잘 따르고 있으며, 메서드명이 명확합니다. Void 반환 타입은 예외 기반 오류 처리 방식에 적합합니다.

src/main/java/konkuk/thip/common/exception/code/ErrorCode.java (1)

72-74: 에러 코드 정의가 체계적입니다

새로운 에러 코드들이 기존 패턴을 잘 따르고 있으며, 코드 번호 체계와 HTTP 상태 코드가 적절합니다. 에러 메시지도 명확하고 일관성이 있습니다.

src/main/java/konkuk/thip/room/adapter/in/web/RoomQueryController.java (1)

17-24: 컨트롤러 구현이 우수합니다

기존 패턴을 잘 따르고 있으며, 파라미터 검증과 응답 구조가 적절합니다. @UserId 어노테이션과 @Valid 검증이 올바르게 적용되었습니다.

src/main/java/konkuk/thip/room/adapter/in/web/request/RoomVerifyPasswordRequest.java (2)

9-11: 검증 로직이 적절합니다

@NotBlank@Pattern 어노테이션을 사용한 검증이 올바르게 구현되었습니다. 4자리 숫자 패턴이 방 비밀번호 요구사항에 적합합니다.


13-18: 변환 메서드 구현이 깔끔합니다

toQuery 메서드가 간결하고 명확하게 구현되었습니다. 파라미터 순서와 명명이 적절합니다.

src/test/java/konkuk/thip/room/domain/RoomTest.java (2)

194-206: 리플렉션 사용이 적절합니다

모집기간 만료 상태를 테스트하기 위해 ReflectionTestUtils.setField를 사용하는 것이 좋은 접근입니다. 이는 도메인 로직의 시간 의존성을 제거하여 테스트 가능하게 만듭니다.


208-240: 포괄적인 예외 시나리오 테스트

다양한 예외 상황에 대한 테스트가 잘 구성되어 있습니다:

  • 공개방에 비밀번호 입력 시 ROOM_PASSWORD_NOT_REQUIRED
  • 비밀번호 불일치 시 ROOM_PASSWORD_MISMATCH
  • 성공 시나리오도 포함

각 테스트가 적절한 에러 코드를 검증하고 있어 도메인 로직의 정확성을 보장합니다.

src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java (1)

1-34: 잘 구현된 서비스 클래스

서비스 구현이 깔끔하고 Clean Architecture 원칙을 잘 따르고 있습니다:

  • @Transactional(readOnly = true) 적절한 사용
  • 의존성 주입을 통한 포트 활용
  • 사용자와 방 존재 검증 후 도메인 로직 위임
  • 단일 책임 원칙 준수

도메인 로직에 위임하여 비즈니스 규칙을 도메인 계층에서 처리하는 것이 올바른 접근입니다.

src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordControllerTest.java (2)

36-52: 유용한 테스트 헬퍼 메서드

buildValidRequest()assertBad() 헬퍼 메서드가 테스트 코드의 가독성과 재사용성을 높입니다. 테스트 구조가 깔끔하고 DRY 원칙을 잘 따르고 있습니다.


57-79: 포괄적인 비밀번호 검증 테스트

비밀번호 검증 시나리오가 잘 구성되어 있습니다:

  • 4자리 숫자가 아닌 경우
  • 길이가 4자리가 아닌 경우
  • 빈 값인 경우

각 테스트가 적절한 에러 메시지를 검증하고 있어 사용자 경험을 보장합니다.

src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (4)

70-134: 잘 구성된 테스트 셋업

통합 테스트를 위한 데이터 준비가 체계적으로 구성되어 있습니다:

  • 사용자, 별칭, 책, 카테고리 엔티티 생성
  • 비공개방과 공개방 모두 준비
  • 적절한 연관관계 설정

테스트 데이터 격리를 위한 @BeforeEach@AfterEach 설정도 적절합니다.


145-179: 핵심 시나리오 테스트 커버리지

성공 시나리오와 실패 시나리오가 모두 포함되어 있어 API의 동작을 종합적으로 검증합니다:

  • 정상 비밀번호 입력 시 성공
  • 비밀번호 불일치 시 적절한 에러 응답

응답 구조(isSuccess, code, message) 검증이 일관되게 이루어지고 있습니다.


181-215: 모집기간 만료 시나리오 테스트

모집기간 만료 상황을 시뮬레이션하는 방식이 명확합니다:

  • startDate를 오늘로 설정하여 모집 마감일이 어제가 되도록 함
  • 주석으로 로직 설명 추가

실제 도메인 로직과 일치하는 테스트 시나리오입니다.


217-234: 공개방 비밀번호 입력 시나리오

공개방에 비밀번호를 입력하는 잘못된 시나리오를 적절히 테스트하고 있습니다. 에러 코드 ROOM_PASSWORD_NOT_REQUIRED와 적절한 메시지를 검증합니다.

src/main/java/konkuk/thip/room/domain/Room.java (2)

117-137: 잘 구현된 도메인 비즈니스 로직

verifyPassword 메서드가 도메인 규칙을 명확하게 구현하고 있습니다:

  1. 모집기간 만료 체크
  2. 공개방 비밀번호 입력 방지
  3. 비밀번호 일치 검증

각 단계에서 적절한 BusinessException과 에러 코드를 사용하여 명확한 오류 처리를 하고 있습니다.


139-143: 재사용 가능한 유틸리티 메서드

isRecruitmentPeriodExpired 메서드가 public으로 선언되어 다른 곳에서도 재사용할 수 있도록 설계되었습니다.

로직이 명확합니다:

  • 모집 마감일: startDate.minusDays(1)
  • 현재 날짜가 마감일 이후인지 체크

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 (1)
src/test/java/konkuk/thip/room/domain/RoomTest.java (1)

181-191: Reflection 사용 대신 더 자연스러운 테스트 방법 고려

현재 reflection을 사용하여 private field를 수정하는 방식은 동작하지만, 더 자연스러운 방법을 고려해볼 수 있습니다.

다음 중 하나의 방법을 고려해보세요:

  1. Room 도메인에 테스트용 정적 팩토리 메서드 추가:
// Room 클래스에 추가
public static Room withExpiredRecruitmentPeriod(String title, String description, 
    boolean isPublic, String password, LocalDate endDate, int maxParticipants, 
    Long bookId, Long leaderId) {
    // 만료된 모집기간을 가진 Room 생성
    return new Room(title, description, isPublic, password, 
        LocalDate.now().minusDays(1), endDate, maxParticipants, bookId, leaderId);
}
  1. 과거 날짜로 시작하는 Room 생성 허용 (도메인 규칙 변경이 필요한 경우):
LocalDate pastStart = LocalDate.now().minusDays(1);
Room room = Room.withoutId(
    "제목", "설명", false, "1234",
    pastStart, pastStart.plusDays(10), 5, 123L, 456L
);

현재 구현도 동작하지만, 위 방법들이 더 명확하고 유지보수하기 쉬운 코드가 될 수 있습니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c6eeb85 and 19702a1.

📒 Files selected for processing (1)
  • src/test/java/konkuk/thip/room/domain/RoomTest.java (3 hunks)
🔇 Additional comments (8)
src/test/java/konkuk/thip/room/domain/RoomTest.java (8)

3-3: 새로운 테스트 기능에 필요한 import 문들이 적절히 추가됨

비즈니스 예외 처리 테스트와 reflection 기반 테스트를 위한 필수 import들이 정확히 추가되었습니다.

Also applies to: 5-5, 14-14


16-16: 테스트 분류를 위한 Display name 개선

"[단위]" 접두사 추가로 테스트 유형을 명확히 구분할 수 있어 좋습니다.


159-167: 모집기간 만료 로직의 정상 케이스 테스트 구현

모집기간이 만료되지 않은 경우를 올바르게 테스트하고 있습니다.


169-179: 모집마감일 당일 케이스 테스트 구현

오늘이 모집마감일인 경우 아직 만료되지 않은 것으로 처리하는 비즈니스 로직을 정확히 검증하고 있습니다.


193-206: 모집기간 만료 시 예외 처리 테스트 구현

비즈니스 예외 발생과 에러 코드 검증을 정확히 수행하고 있습니다. reflection 사용으로 만료 상태를 시뮬레이션하는 방법도 적절합니다.


208-218: 공개방 비밀번호 입력 예외 처리 테스트

공개방에 비밀번호를 입력했을 때의 예외 처리를 올바르게 검증하고 있습니다.


220-230: 비밀번호 불일치 예외 처리 테스트

잘못된 비밀번호 입력 시 적절한 에러 코드와 함께 예외가 발생하는지 정확히 검증하고 있습니다.


232-240: 정상적인 비밀번호 검증 성공 케이스 테스트

모든 조건이 만족되었을 때 예외가 발생하지 않는 것을 확인하는 중요한 테스트입니다.

@sonarqubecloud
Copy link

sonarqubecloud bot commented Jul 9, 2025

Copy link
Collaborator

@seongjunnoh seongjunnoh left a comment

Choose a reason for hiding this comment

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

LGTM

@hd0rable hd0rable merged commit ef6d146 into develop Jul 9, 2025
3 checks passed
@hd0rable hd0rable deleted the feat/#54-post-room-password-verify branch July 9, 2025 11:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[THIP2025-94] [feat] 비공개 방 비밀번호 입력 api 개발

2 participants