Skip to content

Commit

Permalink
refacto create project
Browse files Browse the repository at this point in the history
  • Loading branch information
melazaar authored and salemsd committed Feb 3, 2025
1 parent ca1c89a commit 88dc7ac
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;


@Data
@Builder(toBuilder = true)
Expand All @@ -13,4 +15,5 @@
public class ProjectInputDto {
String name;
String description;
List<String> tags;
}
Original file line number Diff line number Diff line change
Expand Up @@ -178,17 +178,26 @@ private void checkIfUserHasALreadyMaxPinnedProjects(String userId) {

@Override
public ProjectEntity createProject(ProjectInputDto projectInputDto) {
if (StringUtils.isBlank(projectInputDto.getName())) {
throw new IllegalArgumentException("Project name is required.");
}

Optional<ProjectEntity> existingProject = projectRepository.findByName(projectInputDto.getName());

if (existingProject.isPresent()) {
throw new IllegalArgumentException("A project with the same name already exists.");
}

if (projectInputDto.getTags() != null && projectInputDto.getTags().size() > 6) {
throw new IllegalArgumentException("A project cannot have more than 6 tags.");
}

ProjectEntity newProject = new ProjectEntity();
newProject.setName(projectInputDto.getName());
newProject.setCreationDate(LocalDateTime.now());
newProject.setCreatedBy("pegase");
newProject.setDescription(projectInputDto.getDescription());
newProject.setTags(projectInputDto.getTags());
return projectRepository.save(newProject);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import com.rte_france.antares.datamanager_back.dto.ProjectInputDto;
import com.rte_france.antares.datamanager_back.exception.BadRequestException;
import com.rte_france.antares.datamanager_back.exception.ResourceNotFoundException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rte_france.antares.datamanager_back.dto.ProjectInputDto;
import com.rte_france.antares.datamanager_back.repository.model.ProjectEntity;
import com.rte_france.antares.datamanager_back.service.ProjectService;
import org.junit.jupiter.api.BeforeEach;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ void getProjectsByUser_returnsEmptyWhenNoneExist() {
}

@Test
void deletePinnedProjectToUser_shouldCallDeleteMethod() {
void deletePinnedProjectToUser_shouldCallDeleteMethod() {
// Given
String userId = "userId";
Integer projectId = 1;
Expand Down Expand Up @@ -135,16 +135,16 @@ void deletePinnedProjectForGivenUser_shouldThrowException_whenProjectDoesNotExis
}

@Test
void getProjectDetailsById(){
void getProjectDetailsById() {
//Given
Integer projectId = 1;
ProjectEntity expectedProject= new ProjectEntity();
ProjectEntity expectedProject = new ProjectEntity();
expectedProject.setId(1);
expectedProject.setCreatedBy("User1");
expectedProject.setName("BP 2050");

when(projectRepository.findById(projectId)).thenReturn(Optional.of(expectedProject));
ProjectEntity projectResult =projectService.findProjectById(projectId);
ProjectEntity projectResult = projectService.findProjectById(projectId);
//Then
assertEquals(projectResult, expectedProject);

Expand Down Expand Up @@ -220,115 +220,137 @@ void pinProjectForUser_throwsExceptionWhenUserHasMaxPinnedProjects() {
}

@Test
void deleteProjectById_deletesProjectWhenNoStudies() {
Integer projectId = 1;
ProjectEntity project = new ProjectEntity();
project.setId(projectId);
void deleteProjectById_deletesProjectWhenNoStudies() {
Integer projectId = 1;
ProjectEntity project = new ProjectEntity();
project.setId(projectId);

when(projectRepository.findById(projectId)).thenReturn(Optional.of(project));
when(projectRepository.findById(projectId)).thenReturn(Optional.of(project));

projectService.deleteProjectById(projectId);
projectService.deleteProjectById(projectId);

verify(projectRepository, times(1)).deleteById(projectId);
}
verify(projectRepository, times(1)).deleteById(projectId);
}

@Test
void deleteProjectById_throwsExceptionWhenProjectNotFound() {
Integer projectId = 1;
@Test
void deleteProjectById_throwsExceptionWhenProjectNotFound() {
Integer projectId = 1;

when(projectRepository.findById(projectId)).thenReturn(Optional.empty());
when(projectRepository.findById(projectId)).thenReturn(Optional.empty());

ResourceNotFoundException exception = assertThrows(
ResourceNotFoundException.class,
() -> projectService.deleteProjectById(projectId)
);
ResourceNotFoundException exception = assertThrows(
ResourceNotFoundException.class,
() -> projectService.deleteProjectById(projectId)
);

assertEquals("Project not found with ID: 1", exception.getMessage());
verify(projectRepository, never()).deleteById(projectId);
}
assertEquals("Project not found with ID: 1", exception.getMessage());
verify(projectRepository, never()).deleteById(projectId);
}

@Test
void deleteProjectById_throwsExceptionWhenProjectContainsStudies() {
Integer projectId = 1;
ProjectEntity project = new ProjectEntity();
project.setId(projectId);
project.setStudies(List.of(new StudyEntity()));
@Test
void deleteProjectById_throwsExceptionWhenProjectContainsStudies() {
Integer projectId = 1;
ProjectEntity project = new ProjectEntity();
project.setId(projectId);
project.setStudies(List.of(new StudyEntity()));

when(projectRepository.findById(projectId)).thenReturn(Optional.of(project));
when(projectRepository.findById(projectId)).thenReturn(Optional.of(project));

BadRequestException exception = assertThrows(
BadRequestException.class,
() -> projectService.deleteProjectById(projectId)
);
BadRequestException exception = assertThrows(
BadRequestException.class,
() -> projectService.deleteProjectById(projectId)
);

assertEquals("Project contains studies and cannot be deleted", exception.getMessage());
verify(projectRepository, never()).deleteById(projectId);
}
assertEquals("Project contains studies and cannot be deleted", exception.getMessage());
verify(projectRepository, never()).deleteById(projectId);
}

@Test
void searchProjectsByNameReturnsMatchingProjects() {
ProjectEntity projectEntity = new ProjectEntity();
projectEntity.setId(1);
projectEntity.setName("Project 1");
when(projectRepository.findByNameContainingIgnoreCase("Proj")).thenReturn(List.of(projectEntity));
@Test
void searchProjectsByNameReturnsMatchingProjects() {
ProjectEntity projectEntity = new ProjectEntity();
projectEntity.setId(1);
projectEntity.setName("Project 1");
when(projectRepository.findByNameContainingIgnoreCase("Proj")).thenReturn(List.of(projectEntity));

List<ProjectDto> result = projectService.searchProjectsByName("Proj");
List<ProjectDto> result = projectService.searchProjectsByName("Proj");

assertEquals(1, result.size());
assertEquals("Project 1", result.get(0).getName());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase("Proj");
}
assertEquals(1, result.size());
assertEquals("Project 1", result.get(0).getName());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase("Proj");
}

@Test
void searchProjectsByNameReturnsEmptyListWhenNoMatches() {
when(projectRepository.findByNameContainingIgnoreCase("NonExistent")).thenReturn(List.of());
@Test
void searchProjectsByNameReturnsEmptyListWhenNoMatches() {
when(projectRepository.findByNameContainingIgnoreCase("NonExistent")).thenReturn(List.of());

List<ProjectDto> result = projectService.searchProjectsByName("NonExistent");
List<ProjectDto> result = projectService.searchProjectsByName("NonExistent");

assertEquals(0, result.size());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase("NonExistent");
}
assertEquals(0, result.size());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase("NonExistent");
}

@Test
void searchProjectsByNameHandlesNullInput() {
List<ProjectDto> result = projectService.searchProjectsByName(null);
@Test
void searchProjectsByNameHandlesNullInput() {
List<ProjectDto> result = projectService.searchProjectsByName(null);

assertEquals(0, result.size());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase(null);
}

assertEquals(0, result.size());
verify(projectRepository, times(1)).findByNameContainingIgnoreCase(null);
}
@Test
void createProject_returnsProjectEntity_whenProjectDoesNotExistAndAllStudiesExist() {
void createProject_throwsException_whenProjectNameIsBlank() {
ProjectInputDto projectInputDto = new ProjectInputDto();
projectInputDto.setName("testProject");
projectInputDto.setName("");

when(projectRepository.findByName(any(String.class))).thenReturn(Optional.empty());
when(projectRepository.save(any(ProjectEntity.class))).thenAnswer(i -> i.getArguments()[0]);
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> projectService.createProject(projectInputDto)
);

ProjectEntity projectEntity = projectService.createProject(projectInputDto);
assertEquals("Project name is required.", exception.getMessage());
}

assertEquals(projectInputDto.getName(), projectEntity.getName());
@Test
void createProject_throwsException_whenProjectWithSameNameExists() {
ProjectInputDto projectInputDto = new ProjectInputDto();
projectInputDto.setName("existingProject");

when(projectRepository.findByName(any(String.class))).thenReturn(Optional.of(new ProjectEntity()));

IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> projectService.createProject(projectInputDto)
);

assertEquals("A project with the same name already exists.", exception.getMessage());
}

@Test
void createProject_throwsException_whenProjectExists() {
void createProject_throwsException_whenTagsExceedLimit() {
ProjectInputDto projectInputDto = new ProjectInputDto();
projectInputDto.setName("testProject");
projectInputDto.setTags(List.of("tag1", "tag2", "tag3", "tag4", "tag5", "tag6", "tag7"));

when(projectRepository.findByName(any(String.class))).thenReturn(Optional.of(new ProjectEntity()));
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> projectService.createProject(projectInputDto)
);

assertThrows(IllegalArgumentException.class, () -> projectService.createProject(projectInputDto));
assertEquals("A project cannot have more than 6 tags.", exception.getMessage());
}

@Test
void createProject_createsProject_whenOneStudyProvided() {
void createProject_createsProjectSuccessfully_whenValidInput() {
ProjectInputDto projectInputDto = new ProjectInputDto();
projectInputDto.setName("testProject");
projectInputDto.setTags(List.of("tag1", "tag2"));

when(projectRepository.findByName(any(String.class))).thenReturn(Optional.empty());
when(projectRepository.save(any(ProjectEntity.class))).thenAnswer(i -> i.getArguments()[0]);

ProjectEntity projectEntity = projectService.createProject(projectInputDto);

assertEquals(projectInputDto.getName(), projectEntity.getName());
assertEquals(projectInputDto.getTags(), projectEntity.getTags());
}
}

0 comments on commit 88dc7ac

Please sign in to comment.