Skip to content

Commit

Permalink
Merge pull request #62 from T2-Papillon/ProjectListTest_v0.1.0/dana
Browse files Browse the repository at this point in the history
[ADD] 프로젝트목록P_로그인한 사용자가 참여하는 프로젝트 검색 테스트 코드 작성
  • Loading branch information
dana096 authored Apr 7, 2024
2 parents 759377d + be42a12 commit 168ec40
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 91 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.boogle.papplan.service.project;

import com.boogle.papplan.dto.project.ProjectDTO;
import com.boogle.papplan.repository.*;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@SpringBootTest
@Transactional
public class ProjectServiceImplTest {

@Autowired
private ProjectRepository projectRepository;

@Autowired
private EmployeeRepository employeeRepository;

@Autowired
private ProjectService projectService;

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

@Test
@DisplayName("로그인한 사용자가 참여한 프로젝트 검색 - 프로젝트명 기준")
void searchByProjTitleForLoggedInUserProject() {

// given
String searchTerm = "장바구니 결제 로직 변경 요청 건";

// when
List<ProjectDTO> foundProjects = projectService.searchProjects(searchTerm, 0, 10);

// then
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");
Assertions.assertTrue(foundProjects.stream().anyMatch(project -> project.getProjTitle().contains(searchTerm)),
"검색된 프로젝트 중 하나 이상은 검색어를 포함해야 합니다.");
}

@Test
@DisplayName("로그인한 사용자가 참여한 프로젝트 검색 - PM 기준")
void searchByProjPmForLoggedInUserProject() {

// given
String searchTerm = "서현우";

// when
List<ProjectDTO> foundProjects = projectService.searchProjects(searchTerm, 0, 10);

// then
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");
Assertions.assertTrue(foundProjects.stream().anyMatch(project -> project.getProjPm().equals(searchTerm)),
"검색된 프로젝트 중 하나 이상은 검색어와 일치하는 PM을 가져야 합니다.");
}

@Test
@DisplayName("로그인한 사용자가 참여한 프로젝트 검색 - Contributor 기준")
void searchByContributorForLoggedInUserProject() {

// given
String searchTerm = "정윤서";

// when
List<ProjectDTO> foundProjects = projectService.searchProjects(searchTerm, 0, 10);

// then
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");
boolean found = foundProjects.stream()
.flatMap(projectDTO -> projectDTO.getContributors().stream())
.anyMatch(contributorDTO -> contributorDTO.getName().equals(searchTerm));
Assertions.assertTrue(found, "검색된 프로젝트 중 적어도 하나는 검색어와 일치하는 Contributor를 포함해야 합니다.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@
import com.boogle.papplan.entity.*;
import com.boogle.papplan.repository.*;
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.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.Date;
import java.util.List;

@SpringBootTest
Expand All @@ -31,137 +28,68 @@ public class SearchServiceImplTest {
@Autowired
private EmployeeRepository employeeRepository;

@Autowired
private DepartmentRepository departmentRepository;

@Autowired
private PositionRepository positionRepository;

@Autowired
private SearchService searchService;

@BeforeEach
void beforeSearch() {

// ProjectPriority 생성 및 저장
ProjectPriority projectPriority = new ProjectPriority();
projectPriority.setProjectPriorityId("LV0");
projectPriority.setProjectPriorityName("긴급");
projectPriorityRepository.save(projectPriority);

// ProjectStatus 생성 및 저장
ProjectStatus projectStatus = new ProjectStatus();
projectStatus.setProjectStatusId("TODO");
projectStatus.setProjectStatusName("진행예정");
projectStatusRepository.save(projectStatus);

// Department 생성 및 저장
Department department = new Department();
department.setDept_no("FIN"); // 실제 부서 코드
department.setDept_name("재무팀"); // 실제 부서명
departmentRepository.save(department);

// Position 생성 및 저장
Position position = new Position();
position.setPosition_id("STAFF"); // 실제 직책 코드
position.setPosition_name("사원"); // 실제 직책명
positionRepository.save(position);

// Employees 객체 생성 및 설정
Employees employees = new Employees();
employees.setName("홍길동");
employees.setEmail("finance5@boogle.com");
employees.setPassword("finpass5");
employees.setDepartment(department);
employees.setPosition(position);
employeeRepository.save(employees);

// Project 설정
Project project = new Project();
project.setProjTitle("장바구니 결제 로직 변경 요청 건");
project.setProjPm("서현우");
project.setProjCreateDate(new Date());
project.setProjDesc("이 프로젝트는 장바구니 결제 로직을 변경하기 위한 것입니다.");
project.setProjEndDate(new Date());
project.setProjStartDate(new Date());
project.setProjectPriority(projectPriority);
project.setProjectStatus(projectStatus);

// Contributor 설정 및 프로젝트에 추가
Contributor contributor = new Contributor();
contributor.setEmployees(employees);
contributor.setProject(project);
List<Contributor> contributors = new ArrayList<>();
contributors.add(contributor);
project.setContributors(contributors);

projectRepository.save(project);
}

@Test
@DisplayName("전체 프로젝트에서 프로젝트명으로 프로젝트 검색")
void searchByProjTitleInAll() {

// given
String searchTerm = "장바구니 결제 로직 변경 요청 건";

// when
List<ProjectDTO> foundProjects = searchService.searchProjects("장바구니 결제 로직 변경 요청 건", 1, 1);
List<ProjectDTO> foundProjects = searchService.searchProjects(searchTerm, 0, 10);

// then
// 검증: 검색된 프로젝트 리스트는 비어있지 않고, 올바른 프로젝트 타이틀을 가져야 합니다.
// 결과가 null이 아님을 검증
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");

// 리스트가 비어있지 않음을 검증
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");

// 첫 번째 프로젝트의 제목이 예상과 일치하는지 검증
Assertions.assertTrue(foundProjects.get(0).getProjTitle().equals("장바구니 결제 로직 변경 요청 건"),
"첫 번째 프로젝트의 제목이 예상과 일치해야 합니다.");
Assertions.assertTrue(foundProjects.stream().anyMatch(project -> project.getProjTitle().contains(searchTerm)),
"검색 결과에는 '" + searchTerm + "'이(가) 포함된 프로젝트가 있어야 합니다.");
}

@Test
@DisplayName("전체 프로젝트에서 PM으로 프로젝트 검색")
public void searchByProjPMInAll() {

// given
String pmName = "서현우";

// when
List<ProjectDTO> foundProjects = searchService.searchProjects("서현우", 0, 1);
List<ProjectDTO> foundProjects = searchService.searchProjects(pmName, 0, 10);

// then
// 검증
// 결과 리스트가 null이 아닌지 확인
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");

// 결과 리스트가 비어있지 않은지 확인
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");

// 첫 번째 프로젝트의 PM이 기대한 값과 일치하는지 확인
Assertions.assertEquals("서현우", foundProjects.get(0).getProjPm(), "첫 번째 프로젝트의 PM이 기대한 값과 일치해야 합니다.");
Assertions.assertTrue(foundProjects.stream().anyMatch(project -> project.getProjPm().equals(pmName)),
"검색 결과에는 PM이 '" + pmName + "'인 프로젝트가 있어야 합니다.");
}

@Test
@DisplayName("전체 프로젝트에서 참여자로 프로젝트 검색")
public void searchByContributorInAll() {

// given
String contributorName = "정윤서";

// when
List<ProjectDTO> foundProjects = searchService.searchProjects("정윤서", 0, 1);
List<ProjectDTO> foundProjects = searchService.searchProjects(contributorName, 0, 10);


// then
// 검증: 검색된 프로젝트 리스트가 null이 아니고 비어있지 않아야 함
Assertions.assertNotNull(foundProjects, "검색된 프로젝트 리스트는 null이 아니어야 합니다.");
Assertions.assertFalse(foundProjects.isEmpty(), "검색된 프로젝트 리스트는 비어있지 않아야 합니다.");

// 검증: 검색된 프로젝트들 중 하나라도 정윤서를 Contributor로 포함하는지 확인
boolean hasContributor = foundProjects.stream()
.flatMap(projectDTO -> projectDTO.getContributors().stream())
.anyMatch(EmployeeDTO -> EmployeeDTO.getName().equals("정윤서"));
Assertions.assertTrue(hasContributor, "검색된 프로젝트들은 '정윤서'를 Contributor로 포함해야 합니다.");
.anyMatch(contributor -> contributor.getName().equals(contributorName));
Assertions.assertTrue(hasContributor, "검색된 프로젝트들 중 최소 하나는 '" + contributorName + "'를 Contributor로 포함해야 합니다.");
}

// 프로젝트 객체 생성을 돕는 헬퍼 메소드
private Project createProject(String title, String pm, String contributor) {
Project project = new Project();
project.setProjTitle(title);
project.setProjPm(pm);
// 프로젝트 생성 로직에 따라 contributor 설정 필요
return project;
}
}

0 comments on commit 168ec40

Please sign in to comment.