From 8491c9b3cfdc54da1d3d61205e0ce58fea804412 Mon Sep 17 00:00:00 2001 From: MAILLAL Anas Date: Wed, 19 Mar 2025 22:02:28 +0100 Subject: [PATCH] added minor change --- .../ServiceTests/AdminApiServiceTest.java | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 MyINPulse-back/src/test/java/enseirb/myinpulse/ServiceTests/AdminApiServiceTest.java diff --git a/MyINPulse-back/src/test/java/enseirb/myinpulse/ServiceTests/AdminApiServiceTest.java b/MyINPulse-back/src/test/java/enseirb/myinpulse/ServiceTests/AdminApiServiceTest.java new file mode 100644 index 0000000..abd21fb --- /dev/null +++ b/MyINPulse-back/src/test/java/enseirb/myinpulse/ServiceTests/AdminApiServiceTest.java @@ -0,0 +1,173 @@ +package enseirb.myinpulse; + +import static enseirb.myinpulse.model.ProjectDecisionValue.*; + +import static org.junit.jupiter.api.Assertions.*; + +import enseirb.myinpulse.model.Administrator; +import enseirb.myinpulse.model.Project; +import enseirb.myinpulse.model.ProjectDecision; +import enseirb.myinpulse.service.AdminApiService; +import enseirb.myinpulse.service.database.AdministratorService; +import enseirb.myinpulse.service.database.ProjectService; + +import org.junit.jupiter.api.BeforeAll; +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 org.springframework.web.server.ResponseStatusException; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@SpringBootTest +@Transactional +public class AdminApiServiceTest { + private static long administratorid; + @Autowired private AdminApiService adminApiService; + @Autowired private ProjectService projectService; + + @BeforeAll + static void setup( + @Autowired AdministratorService administratorService, + @Autowired ProjectService projectService) { + administratorService.addAdministrator( + new Administrator( + "admin", + "admin", + "testAdminEmpty@example.com", + "testAdmin@example.com", + "")); + Administrator a = + administratorService.addAdministrator( + new Administrator( + "admin2", + "admin2", + "testAdminFull@example.com", + "testAdmin@example.com", + "")); + administratorid = a.getIdUser(); + projectService.addNewProject( + new Project( + "sampleProjectAdminApiService", + null, + LocalDate.now(), + ACTIVE, + administratorService.getAdministratorByPrimaryMain( + "testAdminFull@example.com"))); + } + + private List IterableToList(Iterable iterable) { + List l = new ArrayList<>(); + iterable.forEach(l::add); + return l; + } + + @Test + void getProjectOfAdminIsEmpty() { + Iterable projects = + adminApiService.getProjectsOfAdmin("testAdminEmpty@example.com"); + assertEquals(0, IterableToList(projects).size()); + } + + @Test + void getProjectOfInexistantAdminFails() { + String nonExistentAdminEmail = "testInexistantAdmin@example.com"; + + assertThrows( + ResponseStatusException.class, + () -> { + adminApiService.getProjectsOfAdmin(nonExistentAdminEmail); + }); + } + + @Test + void getProjectOfAdminNotEmpty() { + Iterable projects = + adminApiService.getProjectsOfAdmin("testAdminFull@example.com"); + List l = IterableToList(projects); + assertEquals(1, l.size()); + Project p = l.getFirst(); + assertEquals(p.getProjectName(), "sampleProjectAdminApiService"); + } + + @Test + void getPendingProjectsEmpty() { + assertEquals(0, IterableToList(this.adminApiService.getPendingProjects()).size()); + } + + @Test + void getPendingProjectsNotEmpty() { + this.projectService.addNewProject( + new Project( + "PendingProjectAdminApiService1", null, LocalDate.now(), PENDING, null)); + this.projectService.addNewProject( + new Project( + "PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null)); + Iterable pendingProjects = this.adminApiService.getPendingProjects(); + List pendingProjectsList = IterableToList(pendingProjects); + assertEquals(2, pendingProjectsList.size()); + assertTrue( + List.of("PendingProjectAdminApiService1", "PendingProjectAdminApiService2") + .contains(pendingProjectsList.getFirst().getProjectName())); + assertTrue( + List.of("PendingProjectAdminApiService1", "PendingProjectAdminApiService2") + .contains(pendingProjectsList.getLast().getProjectName())); + } + + @Test + void validateInexistantProject() { + ProjectDecision d = new ProjectDecision(-1, 0, 1); + assertThrows(ResponseStatusException.class, () -> this.adminApiService.validateProject(d)); + } + + @Test + void validateExistantProject() { + Project p = + new Project("PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null); + this.projectService.addNewProject(p); + assertEquals(PENDING, p.getProjectStatus()); + ProjectDecision d = new ProjectDecision(p.getIdProject(), administratorid, 1); + this.adminApiService.validateProject(d); + assertEquals(ACTIVE, p.getProjectStatus()); + + // Check if the project was really updated in the database + assertEquals(0, IterableToList(this.adminApiService.getPendingProjects()).size()); + } + + @Test + void refuseExistantProject() { + Project p = + new Project("PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null); + this.projectService.addNewProject(p); + assertEquals(PENDING, p.getProjectStatus()); + ProjectDecision d = new ProjectDecision(p.getIdProject(), administratorid, 0); + this.adminApiService.validateProject(d); + assertEquals(REJECTED, p.getProjectStatus()); + + // Check if the project was really updated in the database + assertEquals(0, IterableToList(this.adminApiService.getPendingProjects()).size()); + } + + @Test + void addProject() { + assertEquals(0, IterableToList(this.adminApiService.getPendingProjects()).size()); + Project p1 = + new Project("PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null); + this.adminApiService.addNewProject(p1); + + assertEquals(1, IterableToList(this.adminApiService.getPendingProjects()).size()); + } + + @Test + void addDuplicateProject() { + Project p1 = + new Project("PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null); + Project p2 = + new Project("PendingProjectAdminApiService2", null, LocalDate.now(), PENDING, null); + this.adminApiService.addNewProject(p1); + assertThrows(ResponseStatusException.class, () -> this.adminApiService.addNewProject(p2)); + } +}