Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/com/issueDive/dto/IssueFilterRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.util.List;

public record IssueFilterRequest(
@Pattern(regexp = "open|closed|OPEN|CLOSED") String status,
@Pattern(regexp = "open|closed|in_progress|OPEN|CLOSED|IN_PROGRESS", message = "상태 값은 open, closed, in_progress 중 하나여야 합니다.") String status,
Long authorId,
Long assigneeId,
List<Long> labelIds,
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/issueDive/entity/IssueStatus.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.issueDive.entity;

public enum IssueStatus {
OPEN, CLOSED
OPEN, IN_PROGRESS, CLOSED
}
4 changes: 2 additions & 2 deletions src/main/java/com/issueDive/service/IssueService.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public IssueResponse updateIssue(Long id, UpdateIssueRequest request) {
/**
* 이슈 상태 변경
* @param id 상태 변경할 Issue ID
* @param status 변경할 상태 (OPEN, CLOSED)
* @param status 변경할 상태 (OPEN, IN_PROGRESS, CLOSED)
* @return 상태가 변경된 IssueResponse
*/
public IssueResponse changeIssueStatus(Long id, String status) {
Expand All @@ -165,7 +165,7 @@ public IssueResponse changeIssueStatus(Long id, String status) {
try {
newStatus = IssueStatus.valueOf(status.toUpperCase());
} catch (IllegalArgumentException e) {
throw new ValidationException(ErrorCode.InvalidStatus, "status must be either OPEN or CLOSED");
throw new ValidationException(ErrorCode.InvalidStatus, "status must be one of OPEN, IN_PROGRESS, or CLOSED");
}

issue.setStatus(newStatus);
Expand Down
19 changes: 13 additions & 6 deletions src/test/java/com/issueDive/service/IssueServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@
import com.issueDive.repository.LabelRepository;
import com.issueDive.repository.UserRepository;
import com.issueDive.service.IssueService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
Expand Down Expand Up @@ -212,9 +215,11 @@ void deleteIssue_success() {
* 이슈 상태 변경 테스트
* 정상 케이스: OPEN 또는 CLOSED 상태로 변경 시 정상 응답 확인
*/
@Test
void changeIssueStatus_validStatus_success() {
// given
@ParameterizedTest
@ValueSource(strings = {"OPEN", "IN_PROGRESS", "CLOSED"})
@DisplayName("유효한 상태값(OPEN, IN_PROGRESS, CLOSED)으로 이슈 상태 변경 성공")
void changeIssueStatus_validStatus_success(String validStatus) {
// given
Issue issue = Issue.builder()
.id(1L)
.status(IssueStatus.OPEN)
Expand All @@ -225,10 +230,10 @@ void changeIssueStatus_validStatus_success() {
when(issueRepository.save(any(Issue.class))).thenAnswer(invocation -> invocation.getArgument(0));

//when
IssueResponse response = issueService.changeIssueStatus(1L, "CLOSED");
IssueResponse response = issueService.changeIssueStatus(1L, validStatus);

// then
assertEquals("CLOSED", response.status());
assertEquals(validStatus, response.status());
verify(issueRepository).save(issue);
}

Expand All @@ -237,6 +242,7 @@ void changeIssueStatus_validStatus_success() {
* 예외 케이스1: 존재하지 않는 이슈 ID 요청 시 NotFoundException 발생 확인
*/
@Test
@DisplayName("존재하지 않는 이슈의 상태 변경 시도 시 NotFoundException 발생")
void changeIssueStatus_issueNotFound() {
// given
when(issueRepository.findById(99L)).thenReturn(Optional.empty());
Expand All @@ -253,6 +259,7 @@ void changeIssueStatus_issueNotFound() {
* 예외 케이스2: 유효하지 않은 상태 값 요청 시 ValidationException 발생 확인
*/
@Test
@DisplayName("유효하지 않은 상태값으로 이슈 상태 변경 시도 시 ValidationException 발생")
void changeIssueStatus_invalidStatus_throwsValidationException() {
// given
Issue issue = Issue.builder()
Expand All @@ -267,7 +274,7 @@ void changeIssueStatus_invalidStatus_throwsValidationException() {
ValidationException ex = assertThrows(ValidationException.class,
() -> issueService.changeIssueStatus(1L, "INVALID_STATUS"));

assertTrue(ex.getMessage().contains("status must be either OPEN or CLOSED"));
assertTrue(ex.getMessage().contains("status must be one of OPEN, IN_PROGRESS, or CLOSED"));
}

/**
Expand Down