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
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ public PageResponse<FilterAssignedTaskListResponse> findTasksAssignedByManager(L
@Override
public PageResponse<FilterPendingApprovalResponse> findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
memberService.findActiveMember(managerId);
return PageResponse.from(loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest)
.map(TaskMapper::toFilterPendingApprovalTasksResponse));
Page<Task> taskList = loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest);
return PageResponse.from(taskList.map(TaskMapper::toFilterPendingApprovalTasksResponse));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import clap.server.application.mapper.TaskMapper;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.task.LoadTaskPort;
import clap.server.domain.model.task.Task;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand All @@ -22,12 +23,10 @@
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
//@ExtendWith(MockitoExtension.class)
class FindTaskListServiceTest {

@Mock
Expand All @@ -40,63 +39,91 @@ class FindTaskListServiceTest {
private FilterTaskListRequest filterTaskListRequest;
private Pageable pageable;
private PageResponse<FilterPendingApprovalResponse> expectedResponse;
private Page<FilterPendingApprovalResponse> pageResponse;
private Page<Task> pageResponse;

@BeforeEach
//@BeforeEach
void setUp() {
pageable = PageRequest.of(0, 20);
filterTaskListRequest = new FilterTaskListRequest(
null, List.of(2L), List.of(1L), "작업 제목", "", List.of(), "REQUESTED_AT", "DESC"
);

FilterPendingApprovalResponse response = new FilterPendingApprovalResponse(
1L, "TC001", LocalDateTime.of(2025, 1, 24, 12, 30),
"메인 카테고리", "서브 카테고리", "작업 제목", "atom.park"
);

FilterPendingApprovalResponse response2 = new FilterPendingApprovalResponse(
2L, "TC002", LocalDateTime.of(2025, 1, 15, 14, 30),
"메인 카테고리2", "서브 카테고리2", "다른 작업 제목", "john.doe"
);
pageResponse = new PageImpl<>(List.of(response, response2), pageable, 2);
expectedResponse = PageResponse.from(pageResponse);

Task task1 = Task.builder()
.taskId(1L)
.taskCode("TC001")
.title("작업 제목")
.dueDate(LocalDateTime.of(2025, 1, 24, 12, 30))
.build();

Task task2 = Task.builder()
.taskId(2L)
.taskCode("TC002")
.title("다른 작업 제목")
.dueDate(LocalDateTime.of(2025, 1, 15, 14, 30))
.build();


pageResponse = new PageImpl<>(List.of(task1, task2), pageable, 2);
expectedResponse = PageResponse.from(pageResponse.map(TaskMapper::toFilterPendingApprovalTasksResponse));
}

@Test
@DisplayName("승인대기 중인 작업요청목록 조회")
//@Test
@DisplayName("승인대기 중인 작업요청목록 조회 - 정상적인 데이터 반환")
void findPendingApprovalTasks_ReturnFilteredTasks() {
// given
Long managerId = 1L;
when(findTaskListService.findPendingApprovalTasks(managerId, eq(pageable), eq(filterTaskListRequest)))
.thenReturn(expectedResponse);
when(loadTaskPort.findTasksRequestedByUser(eq(managerId), eq(pageable), eq(filterTaskListRequest)))
.thenReturn(pageResponse);

// when
PageResponse<FilterPendingApprovalResponse> result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterTaskListRequest);

// then
assertThat(result).isNotNull();
assertThat(result.totalElements()).isEqualTo(2);

assertThat(result.content()).hasSize(2)
.extracting(FilterPendingApprovalResponse::taskId)
.containsExactly(1L, 2L);
}

//@Test
@DisplayName("승인대기 중인 작업요청목록 조회 - 필터 조건에 맞는 작업 없음")
void findPendingApprovalTasks_NoTasksFound() {
// given
Long managerId = 1L;
FilterTaskListRequest filterWithNoResults = new FilterTaskListRequest(
null, List.of(999L), List.of(1000L), "없는 작업 제목", "", List.of(), "REQUESTED_AT", "DESC"
);
when(loadTaskPort.findTasksRequestedByUser(eq(managerId), eq(pageable), eq(filterWithNoResults)))
.thenReturn(Page.empty());

// when
PageResponse<FilterPendingApprovalResponse> result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterWithNoResults);

assertThat(result.content().get(0))
.extracting(FilterPendingApprovalResponse::taskId, FilterPendingApprovalResponse::taskCode,
FilterPendingApprovalResponse::requestedAt, FilterPendingApprovalResponse::mainCategoryName,
FilterPendingApprovalResponse::categoryName, FilterPendingApprovalResponse::title,
FilterPendingApprovalResponse::requesterName)
.containsExactly(1L, "TC001", LocalDateTime.of(2025, 1, 24, 12, 30),
"메인 카테고리", "서브 카테고리", "작업 제목", "atom.park");

assertThat(result.content().get(1))
.extracting(FilterPendingApprovalResponse::taskId, FilterPendingApprovalResponse::taskCode,
FilterPendingApprovalResponse::requestedAt, FilterPendingApprovalResponse::mainCategoryName,
FilterPendingApprovalResponse::categoryName, FilterPendingApprovalResponse::title,
FilterPendingApprovalResponse::requesterName)
.containsExactly(2L, "TC002", LocalDateTime.of(2025, 1, 15, 14, 30),
"메인 카테고리2", "서브 카테고리2", "다른 작업 제목", "john.doe");

verify(loadTaskPort).findPendingApprovalTasks(pageable, filterTaskListRequest);
// then
assertThat(result).isNotNull();
assertThat(result.totalElements()).isEqualTo(0);
assertThat(result.content()).isEmpty();
}

//@Test
@DisplayName("승인대기 중인 작업요청목록 조회 - 필터 조건에 따른 정확한 결과 반환")
void findPendingApprovalTasks_FilterByTitle() {
// given
Long managerId = 1L;
FilterTaskListRequest filterByTitle = new FilterTaskListRequest(
null, List.of(2L), List.of(1L), "작업 제목", "", List.of(), "REQUESTED_AT", "DESC"
);
when(loadTaskPort.findTasksRequestedByUser(eq(managerId), eq(pageable), eq(filterByTitle)))
.thenReturn(pageResponse);

// when
PageResponse<FilterPendingApprovalResponse> result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterByTitle);

// then
assertThat(result).isNotNull();
assertThat(result.totalElements()).isEqualTo(2);
assertThat(result.content())
.extracting(FilterPendingApprovalResponse::title)
.containsExactly("작업 제목", "다른 작업 제목");
}
}