Skip to content

Commit

Permalink
Merge pull request #83 from T2-Papillon/test-projectprogress/rahee
Browse files Browse the repository at this point in the history
[TEST] 하위업무에 평균에 따른 프로젝트 진도율 반영
  • Loading branch information
raheego authored Apr 13, 2024
2 parents 044deb0 + e159fa2 commit 9912205
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 27 deletions.
2 changes: 2 additions & 0 deletions papplan/src/main/java/com/boogle/papplan/entity/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class Task {
// 외래키
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assignee_eno", referencedColumnName = "eno", nullable = false)
@ToString.Exclude
private Employees assignee; // 담당자

@Temporal(TemporalType.DATE)
Expand Down Expand Up @@ -74,4 +75,5 @@ public class Task {
@JoinColumn(name = "task_priority_id", nullable = false) // 업무우선순위번호 외래키
private TaskPriority taskPriority; // 업무우선순위번호


}
Original file line number Diff line number Diff line change
Expand Up @@ -85,32 +85,6 @@ public TaskDTO updateTask(Integer projNo, Integer taskNo, TaskDTO taskDto) {
// 프로젝트 ID와 태스크 ID를 사용하여 해당하는 태스크를 조회합니다.
Optional<Task> optionalTask = Optional.ofNullable(taskRepository.findByProjectProjNoAndTaskNo(projNo, taskNo));

/* // Project 번호
Project project = task.getProject();
project.setProjNo(taskDto.getProjNo());*/

/*task.setTaskTitle(taskDto.getTaskTitle()); // 업무 제목
task.setAssignee(taskDto.getAssignee()); // 업무 담당자 이름
task.setTaskDesc(taskDto.getTaskDesc()); // 업무 설명
// 업무 우선순위
TaskPriority taskPriority = new TaskPriority();
taskPriority.setTaskPriorityId(taskDto.getTaskPriority());
task.setTaskPriority(taskPriority);
// 업무 진행상태
TaskStatus taskStatus = new TaskStatus();
taskStatus.setTaskStatusId(taskDto.getTaskStatus());
task.setTaskStatus(taskStatus);
task.setTaskStartDate(taskDto.getTaskStartDate()); // 업무 시작일
task.setTaskEndDate(taskDto.getTaskEndDate()); // 업무 종료일
task.setTaskPercent(taskDto.getTaskPercent()); // 업무 진행 정도(xx%)
if(taskDto.getTaskTest() != null)
task.setTaskTest(taskDto.getTaskTest()); // 업무 테스트 진행 여부
task.setTaskCreateDate(taskDto.getTaskCreateDate()); // 업무 생성일
task.setTaskUpdateDate((taskDto.getTaskUpdateDate())); // 수정일*/

if (optionalTask.isEmpty()) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
package com.boogle.papplan.service.project;

import com.boogle.papplan.dto.TaskDTO;
import com.boogle.papplan.dto.project.ProjectDTO;
import com.boogle.papplan.entity.Project;
import com.boogle.papplan.entity.Task;
import com.boogle.papplan.repository.*;
import com.boogle.papplan.service.task.TaskService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;

@SpringBootTest
@Transactional
Expand All @@ -24,6 +36,12 @@ public class ProjectServiceImplTest {
@Autowired
private ProjectService projectService;

/* 라희 */

@Autowired
private TaskService taskService;


private String email = "finance2@boogle.com";

@Test
Expand Down Expand Up @@ -80,4 +98,67 @@ void searchByContributorForLoggedInUserProject() {
}


}
@BeforeEach
void setUp() {
taskService = mock(TaskService.class); // TaskService의 Mock 객체 생성
projectRepository = mock(ProjectRepository.class); // ProjectRepository의 Mock 객체 생성
// ProjectServiceImpl 객체 초기화, projectRepository와 taskService를 인자로 전달
projectService = new ProjectServiceImpl(projectRepository, null, null, taskService);
}

@Test
@DisplayName("프로젝트 진행률 업데이트 테스트")
void testUpdateProjectProgress() {
// given
Integer projNo = 1;
// 테스트에 필요한 더미 TaskDTO 객체들을 생성하고 각각의 작업 진행률을 설정합
TaskDTO task1 = new TaskDTO();
task1.setTaskPercent(50);
TaskDTO task2 = new TaskDTO();
task2.setTaskPercent(75);

List<TaskDTO> tasks = Arrays.asList(task1, task2);

// 새 프로젝트 객체를 생성하고 프로젝트 번호를 설정
Project project = new Project();
project.setProjNo(projNo);
// 생성한 프로젝트 객체를 Optional로 감싸서 생성 ( null 값 다루기 )
Optional<Project> projectOptional = Optional.of(project);

// Mock 설정: taskService가 주어진 프로젝트 번호에 해당하는 작업 목록을 반환하도록 설정
when(taskService.getTasksByProjectId(projNo)).thenReturn(tasks);
// Mock 설정: projectRepository가 주어진 프로젝트 번호로 프로젝트를 찾을 때 Optional<Project>를 반환하도록 설정
when(projectRepository.findById(projNo)).thenReturn(projectOptional);

// when
projectService.updateProjectProgress(projNo);

// then
// 프로젝트 저장 메서드가 정확히 한 번 호출되었는지 확인
Mockito.verify(projectRepository, times(1)).save(project);
// 업데이트된 프로젝트 진행률이 예상대로인지 확인
// 예상 진행률은 주어진 작업들의 평균 진행률인데, 여기서는 (50 + 75) / 2 = 62.5가 예상되며, 반올림하여 63이어야 합니다.
assertEquals(63, project.getProjPercent());

// // 가상의 프로젝트 번호
// long projNo = 12345L; // long 타입으로 변경
//
// // 가상의 작업 목록
// List<TaskDTO> tasks = new ArrayList<>();
// // 작업 추가
// TaskDTO task1 = new TaskDTO();
// task1.setTaskPercent(50); // 작업 진행률 설정
// tasks.add(task1);
// TaskDTO task2 = new TaskDTO();
// task2.setTaskPercent(75); // 작업 진행률 설정
// tasks.add(task2);
//
// // 주어진 프로젝트 번호에 해당하는 작업 목록을 반환하도록 설정
// when(taskService.getTasksByProjectId((int) projNo)).thenReturn(tasks);
//
// // 프로젝트 진행률 업데이트 메서드 호출
// projectService.updateProjectProgress((int) projNo);

}
}

Binary file modified papplan/target/classes/com/boogle/papplan/entity/Task.class
Binary file not shown.
Binary file not shown.

0 comments on commit 9912205

Please sign in to comment.