This commit is contained in:
		
							parent
							
								
									542e04659b
								
							
						
					
					
						commit
						5e39cb1d53
					
				| @ -4,12 +4,16 @@ | ||||
|     <option name="autoReloadType" value="SELECTIVE" /> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="3a869f59-290a-4ab2-b036-a878ce801bc4" name="Changes" comment="Use @Sql instead of persit()"> | ||||
|     <list default="true" id="3a869f59-290a-4ab2-b036-a878ce801bc4" name="Changes" comment="Testcases (and failing test fixes) of TaskgroupService"> | ||||
|       <change afterPath="$PROJECT_DIR$/src/test/java/core/tasks/TaskServiceTest.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/taskgroup/TaskgroupFieldInfo.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/taskgroup/TaskgroupFieldInfo.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/tasks/TaskFieldInfo.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/tasks/TaskFieldInfo.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Task.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Task.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Taskgroup.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Taskgroup.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/services/TaskgroupService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/services/TaskgroupService.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/test/java/core/taskgroups/TaskgroupServiceTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/core/taskgroups/TaskgroupServiceTest.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/services/ServiceExitCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/services/ServiceExitCode.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/core/services/TaskService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/services/TaskService.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/test/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/resources/application.properties" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/src/test/resources/taskRepositoryEntries.sql" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/resources/taskRepositoryEntries.sql" afterDir="false" /> | ||||
|     </list> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
| @ -88,56 +92,71 @@ | ||||
|       <recent name="$PROJECT_DIR$/src/test/java/core/taskgroups" /> | ||||
|     </key> | ||||
|   </component> | ||||
|   <component name="RunManager" selected="JUnit.TaskgroupServiceTest.deleteTaskgroupByUser"> | ||||
|     <configuration name="TaskgroupServiceTest.addTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|   <component name="RunManager" selected="JUnit.TaskgroupServiceTest"> | ||||
|     <configuration name="TaskRepositoryTest.deleteByTaskID" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
|           <option name="PATTERN" value="core.taskgroups.*" /> | ||||
|           <option name="PATTERN" value="core.tasks.*" /> | ||||
|           <option name="ENABLED" value="true" /> | ||||
|         </pattern> | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.taskgroups" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="addTaskgroup" /> | ||||
|       <option name="PACKAGE_NAME" value="core.tasks" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.tasks.TaskRepositoryTest" /> | ||||
|       <option name="METHOD_NAME" value="deleteByTaskID" /> | ||||
|       <option name="TEST_OBJECT" value="method" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="TaskgroupServiceTest.deleteTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|     <configuration name="TaskServiceTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
|           <option name="PATTERN" value="core.taskgroups.*" /> | ||||
|           <option name="PATTERN" value="core.tasks.*" /> | ||||
|           <option name="ENABLED" value="true" /> | ||||
|         </pattern> | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.taskgroups" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="deleteTaskgroup" /> | ||||
|       <option name="PACKAGE_NAME" value="core.tasks" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.tasks.TaskServiceTest" /> | ||||
|       <option name="TEST_OBJECT" value="class" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="TaskServiceTest.createTask" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
|           <option name="PATTERN" value="core.tasks.*" /> | ||||
|           <option name="ENABLED" value="true" /> | ||||
|         </pattern> | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.tasks" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.tasks.TaskServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="createTask" /> | ||||
|       <option name="TEST_OBJECT" value="method" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="TaskgroupServiceTest.deleteTaskgroupByUser" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|     <configuration name="TaskServiceTest.deleteTask" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
|           <option name="PATTERN" value="core.taskgroups.*" /> | ||||
|           <option name="PATTERN" value="core.tasks.*" /> | ||||
|           <option name="ENABLED" value="true" /> | ||||
|         </pattern> | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.taskgroups" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="deleteTaskgroupByUser" /> | ||||
|       <option name="PACKAGE_NAME" value="core.tasks" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.tasks.TaskServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="deleteTask" /> | ||||
|       <option name="TEST_OBJECT" value="method" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="TaskgroupServiceTest.editTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|     <configuration name="TaskgroupServiceTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
| @ -147,24 +166,7 @@ | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.taskgroups" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="editTaskgroup" /> | ||||
|       <option name="TEST_OBJECT" value="method" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="TaskgroupServiceTest.getTopTaskgroupsByUser" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | ||||
|       <module name="demo" /> | ||||
|       <extension name="coverage"> | ||||
|         <pattern> | ||||
|           <option name="PATTERN" value="core.taskgroups.*" /> | ||||
|           <option name="ENABLED" value="true" /> | ||||
|         </pattern> | ||||
|       </extension> | ||||
|       <option name="PACKAGE_NAME" value="core.taskgroups" /> | ||||
|       <option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" /> | ||||
|       <option name="METHOD_NAME" value="getTopTaskgroupsByUser" /> | ||||
|       <option name="TEST_OBJECT" value="method" /> | ||||
|       <option name="TEST_OBJECT" value="class" /> | ||||
|       <method v="2"> | ||||
|         <option name="Make" enabled="true" /> | ||||
|       </method> | ||||
| @ -178,11 +180,11 @@ | ||||
|     </configuration> | ||||
|     <recent_temporary> | ||||
|       <list> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest.deleteTaskgroupByUser" /> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest.getTopTaskgroupsByUser" /> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest.deleteTaskgroup" /> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest.editTaskgroup" /> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest.addTaskgroup" /> | ||||
|         <item itemvalue="JUnit.TaskgroupServiceTest" /> | ||||
|         <item itemvalue="JUnit.TaskServiceTest" /> | ||||
|         <item itemvalue="JUnit.TaskServiceTest.createTask" /> | ||||
|         <item itemvalue="JUnit.TaskServiceTest.deleteTask" /> | ||||
|         <item itemvalue="JUnit.TaskRepositoryTest.deleteByTaskID" /> | ||||
|       </list> | ||||
|     </recent_temporary> | ||||
|   </component> | ||||
| @ -220,7 +222,7 @@ | ||||
|       <workItem from="1699466564154" duration="6646000" /> | ||||
|       <workItem from="1699473376129" duration="1423000" /> | ||||
|       <workItem from="1699639316405" duration="9267000" /> | ||||
|       <workItem from="1699684493731" duration="1121000" /> | ||||
|       <workItem from="1699684493731" duration="7709000" /> | ||||
|     </task> | ||||
|     <task id="LOCAL-00001" summary="Structure Taskgroups in Hierarchies"> | ||||
|       <option name="closed" value="true" /> | ||||
| @ -454,14 +456,21 @@ | ||||
|       <option name="project" value="LOCAL" /> | ||||
|       <updated>1699646291964</updated> | ||||
|     </task> | ||||
|     <option name="localTasksCounter" value="30" /> | ||||
|     <task id="LOCAL-00030" summary="Testcases (and failing test fixes) of TaskgroupService"> | ||||
|       <option name="closed" value="true" /> | ||||
|       <created>1699685656297</created> | ||||
|       <option name="number" value="00030" /> | ||||
|       <option name="presentableId" value="LOCAL-00030" /> | ||||
|       <option name="project" value="LOCAL" /> | ||||
|       <updated>1699685656297</updated> | ||||
|     </task> | ||||
|     <option name="localTasksCounter" value="31" /> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TypeScriptGeneratedFilesManager"> | ||||
|     <option name="version" value="3" /> | ||||
|   </component> | ||||
|   <component name="VcsManagerConfiguration"> | ||||
|     <MESSAGE value="Delete and clear Tasks (Frontend)" /> | ||||
|     <MESSAGE value="Define Entity BasicTaskSchedule and Taskcontroller" /> | ||||
|     <MESSAGE value="Delete Schedules" /> | ||||
|     <MESSAGE value="Deliver Schedule Path Info when fetching Schedules" /> | ||||
| @ -486,7 +495,8 @@ | ||||
|     <MESSAGE value="Test TaskRepository" /> | ||||
|     <MESSAGE value="Initialize Testing of Testservice" /> | ||||
|     <MESSAGE value="Use @Sql instead of persit()" /> | ||||
|     <option name="LAST_COMMIT_MESSAGE" value="Use @Sql instead of persit()" /> | ||||
|     <MESSAGE value="Testcases (and failing test fixes) of TaskgroupService" /> | ||||
|     <option name="LAST_COMMIT_MESSAGE" value="Testcases (and failing test fixes) of TaskgroupService" /> | ||||
|   </component> | ||||
|   <component name="XDebuggerManager"> | ||||
|     <breakpoint-manager> | ||||
| @ -511,6 +521,11 @@ | ||||
|           <line>57</line> | ||||
|           <option name="timeStamp" value="12" /> | ||||
|         </line-breakpoint> | ||||
|         <line-breakpoint enabled="true" type="java-line"> | ||||
|           <url>file://$PROJECT_DIR$/src/test/java/core/tasks/TaskServiceTest.java</url> | ||||
|           <line>188</line> | ||||
|           <option name="timeStamp" value="23" /> | ||||
|         </line-breakpoint> | ||||
|       </breakpoints> | ||||
|     </breakpoint-manager> | ||||
|   </component> | ||||
|  | ||||
| @ -14,6 +14,16 @@ public class TaskFieldInfo { | ||||
|     private LocalDate startDate; | ||||
|     private LocalDate deadline; | ||||
| 
 | ||||
|     public TaskFieldInfo() { | ||||
|     } | ||||
| 
 | ||||
|     public TaskFieldInfo(String taskName, int eta, LocalDate startDate, LocalDate deadline) { | ||||
|         this.taskName = taskName; | ||||
|         this.eta = eta; | ||||
|         this.startDate = startDate; | ||||
|         this.deadline = deadline; | ||||
|     } | ||||
| 
 | ||||
|     public String getTaskName() { | ||||
|         return taskName; | ||||
|     } | ||||
|  | ||||
| @ -12,7 +12,7 @@ import java.util.Set; | ||||
| public class Task { | ||||
| 
 | ||||
|     @Id | ||||
|     @GeneratedValue(strategy = GenerationType.AUTO) | ||||
|     @GeneratedValue(strategy = GenerationType.IDENTITY) | ||||
|     private long taskID; | ||||
| 
 | ||||
|     @ManyToOne | ||||
| @ -113,19 +113,6 @@ public class Task { | ||||
|         this.workTime += workTime; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean equals(Object o) { | ||||
|         if (this == o) return true; | ||||
|         if (o == null || getClass() != o.getClass()) return false; | ||||
|         Task task = (Task) o; | ||||
|         return taskID == task.taskID; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return Objects.hash(taskID); | ||||
|     } | ||||
| 
 | ||||
|     public void setTaskID(long taskID) { | ||||
|         this.taskID = taskID; | ||||
|     } | ||||
| @ -150,4 +137,31 @@ public class Task { | ||||
|     public void increaseActiveTime(int minutesSpent) { | ||||
|         this.workTime += minutesSpent; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean equals(Object o) { | ||||
|         if (this == o) return true; | ||||
|         if (o == null || getClass() != o.getClass()) return false; | ||||
|         Task task = (Task) o; | ||||
|         return taskID == task.taskID && eta == task.eta && finished == task.finished && workTime == task.workTime && Objects.equals(taskgroup, task.taskgroup) && Objects.equals(taskName, task.taskName) && Objects.equals(startDate, task.startDate) && Objects.equals(deadline, task.deadline); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return Objects.hash(taskID, taskgroup, taskName, startDate, deadline, eta, finished, workTime); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "Task{" + | ||||
|                 "taskID=" + taskID + | ||||
|                 ", taskgroup=" + taskgroup + | ||||
|                 ", taskName='" + taskName + '\'' + | ||||
|                 ", startDate=" + startDate + | ||||
|                 ", deadline=" + deadline + | ||||
|                 ", eta=" + eta + | ||||
|                 ", finished=" + finished + | ||||
|                 ", workTime=" + workTime + | ||||
|                 '}'; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -29,6 +29,7 @@ public class Taskgroup { | ||||
|     @JoinColumn(name = "parent_id") | ||||
|     private Taskgroup parent; | ||||
| 
 | ||||
| 
 | ||||
|     @OneToMany(mappedBy = "taskgroup", cascade = CascadeType.ALL, fetch = FetchType.EAGER) | ||||
|     private Set<Task> tasks; | ||||
| 
 | ||||
|  | ||||
| @ -5,5 +5,6 @@ public enum ServiceExitCode { | ||||
|     OK, | ||||
|     ENTITY_ALREADY_EXIST, | ||||
|     MISSING_ENTITY, | ||||
|     INVALID_OPERATION; | ||||
|     INVALID_OPERATION, | ||||
|     INVALID_PARAMETER; | ||||
| } | ||||
|  | ||||
| @ -11,6 +11,9 @@ import core.repositories.timemanager.TaskgroupRepository; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| import javax.persistence.EntityManager; | ||||
| import javax.persistence.PersistenceContext; | ||||
| import javax.transaction.Transactional; | ||||
| import java.time.LocalDate; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.*; | ||||
| @ -20,12 +23,17 @@ public class TaskService { | ||||
| 
 | ||||
|     private final TaskRepository taskRepository; | ||||
|     private final TaskScheduleService taskScheduleService; | ||||
|     private final TaskgroupRepository taskgroupRepository; | ||||
|     @PersistenceContext | ||||
|     private EntityManager entityManager; | ||||
| 
 | ||||
| 
 | ||||
|     public TaskService(@Autowired TaskRepository taskRepository, | ||||
|                        @Autowired TaskScheduleService taskScheduleService) { | ||||
|                        @Autowired TaskScheduleService taskScheduleService, | ||||
|                        TaskgroupRepository taskgroupRepository) { | ||||
|         this.taskRepository = taskRepository; | ||||
|         this.taskScheduleService = taskScheduleService; | ||||
|         this.taskgroupRepository = taskgroupRepository; | ||||
|     } | ||||
| 
 | ||||
|     public ServiceResult<Task> createTask(Taskgroup taskgroup, TaskFieldInfo taskFieldInfo) { | ||||
| @ -33,6 +41,11 @@ public class TaskService { | ||||
|             return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST); | ||||
|         } | ||||
| 
 | ||||
|         //Check for invalid date (deadline before start | ||||
|         if(taskFieldInfo.getStartDate() != null && taskFieldInfo.getDeadline() != null && | ||||
|                 taskFieldInfo.getDeadline().isBefore(taskFieldInfo.getStartDate())) { | ||||
|             return new ServiceResult<>(ServiceExitCode.INVALID_PARAMETER); | ||||
|         } | ||||
| 
 | ||||
|         Task task = new Task(taskgroup, taskFieldInfo.getTaskName(), taskFieldInfo.getStartDate(), taskFieldInfo.getDeadline(), taskFieldInfo.getEta()); | ||||
|         taskgroup.getTasks().add(task); | ||||
| @ -63,6 +76,12 @@ public class TaskService { | ||||
|         } else if(!task.getTaskName().equals(taskFieldInfo.getTaskName()) && existTaskByName(task.getTaskgroup().getTasks(), taskFieldInfo.getTaskName())) { | ||||
|             return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST); | ||||
|         } | ||||
| 
 | ||||
|         //Check for invalid date (deadline before start | ||||
|         if(taskFieldInfo.getStartDate() != null && taskFieldInfo.getDeadline() != null && | ||||
|                 taskFieldInfo.getDeadline().isBefore(taskFieldInfo.getStartDate())) { | ||||
|             return new ServiceResult<>(ServiceExitCode.INVALID_PARAMETER); | ||||
|         } | ||||
|         task.setEta(taskFieldInfo.getEta()); | ||||
|         task.setStartDate(taskFieldInfo.getStartDate()); | ||||
|         task.setDeadline(taskFieldInfo.getDeadline()); | ||||
| @ -70,9 +89,13 @@ public class TaskService { | ||||
|         return new ServiceResult<>(task); | ||||
|     } | ||||
| 
 | ||||
|     @Transactional | ||||
|     public void deleteTask(Task task) { | ||||
|         taskScheduleService.deleteScheduleByTask(task); | ||||
|         taskRepository.deleteByTaskID(task.getTaskID()); | ||||
| 
 | ||||
|         entityManager.flush(); | ||||
|         entityManager.detach(task); | ||||
|     } | ||||
| 
 | ||||
|     public void clearTasks(Taskgroup taskgroup) { | ||||
|  | ||||
							
								
								
									
										192
									
								
								backend/src/test/java/core/tasks/TaskServiceTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								backend/src/test/java/core/tasks/TaskServiceTest.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,192 @@ | ||||
| package core.tasks; | ||||
| 
 | ||||
| import core.api.models.timemanager.tasks.TaskFieldInfo; | ||||
| import core.entities.timemanager.Task; | ||||
| import core.entities.timemanager.Taskgroup; | ||||
| import core.repositories.timemanager.TaskRepository; | ||||
| import core.repositories.timemanager.TaskgroupRepository; | ||||
| import core.services.*; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.test.annotation.Rollback; | ||||
| import org.springframework.test.context.jdbc.Sql; | ||||
| import org.springframework.test.context.jdbc.SqlGroup; | ||||
| 
 | ||||
| import javax.persistence.EntityManager; | ||||
| import javax.transaction.Transactional; | ||||
| 
 | ||||
| import java.time.LocalDate; | ||||
| 
 | ||||
| import static org.assertj.core.api.AssertionsForClassTypes.assertThat; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| 
 | ||||
| @SpringBootTest | ||||
| public class TaskServiceTest { | ||||
| 
 | ||||
| 
 | ||||
|     @Autowired | ||||
|     private TaskService taskService; | ||||
|     @Autowired | ||||
|     private EntityManager entityManager; | ||||
| 
 | ||||
|     private static final String username = "Testuser1"; | ||||
|     private static final String username2 = "Testuser2"; | ||||
|     @Autowired | ||||
|     private TaskRepository taskRepository; | ||||
|     @Autowired | ||||
|     private TaskgroupRepository taskgroupRepository; | ||||
| 
 | ||||
|     @Test | ||||
|     @SqlGroup({ | ||||
|             @Sql("classpath:taskgroupRepositoryTestEntries.sql"), | ||||
|             @Sql("classpath:taskRepositoryEntries.sql") | ||||
|     }) | ||||
|     @Rollback(value = true) | ||||
|     void createTask() { | ||||
|         //Situation 1: Task with that name already exists in a taskgroup | ||||
|         TaskFieldInfo taskFieldInfo_1 = new TaskFieldInfo(entityManager.find(Task.class, 1L).getTaskName(), 0, null, null); | ||||
|         ServiceResult<Task> situation_1 = taskService.createTask(entityManager.find(Taskgroup.class, 2L), taskFieldInfo_1); | ||||
|         assertEquals(ServiceExitCode.ENTITY_ALREADY_EXIST, situation_1.getExitCode()); | ||||
| 
 | ||||
|         //Situation 2: Task with that name exists in another taskgroup | ||||
|         TaskFieldInfo taskFieldInfo_2 = new TaskFieldInfo(entityManager.find(Task.class, 1L).getTaskName(), 0, null, null); | ||||
|         ServiceResult<Task> result_2 = taskService.createTask(entityManager.find(Taskgroup.class, 1L), taskFieldInfo_2); | ||||
|         assertEquals(ServiceExitCode.OK, result_2.getExitCode()); | ||||
|         assertThat(entityManager.find(Task.class, result_2.getResult().getTaskID())).isNotNull(); | ||||
| 
 | ||||
|         //Situation 3: Normal, everything fine | ||||
|         TaskFieldInfo taskFieldInfo_3 = new TaskFieldInfo("Situation 3", 0, null, null); | ||||
|         ServiceResult<Task> result_3 = taskService.createTask(entityManager.find(Taskgroup.class, 1L), taskFieldInfo_3); | ||||
|         assertEquals(ServiceExitCode.OK, result_3.getExitCode()); | ||||
|         assertThat(entityManager.find(Task.class, result_3.getResult().getTaskID())).isNotNull(); | ||||
| 
 | ||||
|         //Robustness - Test for invalid dates | ||||
|         //Situation 4: Deadline, no start | ||||
|         TaskFieldInfo taskFieldInfo_4 = new TaskFieldInfo("Situation 4", 0, null, LocalDate.now()); | ||||
|         ServiceResult<Task> result_4 = taskService.createTask(entityManager.find(Taskgroup.class, 1L), taskFieldInfo_4); | ||||
|         assertEquals(ServiceExitCode.OK, result_4.getExitCode()); | ||||
|         assertThat(entityManager.find(Task.class, result_4.getResult().getTaskID())).isNotNull(); | ||||
| 
 | ||||
|         //Situation 5: Start but no deadline | ||||
|         TaskFieldInfo taskFieldInfo_5 = new TaskFieldInfo("Situation 5", 0, LocalDate.now(),null); | ||||
|         ServiceResult<Task> result_5 = taskService.createTask(entityManager.find(Taskgroup.class, 1L), taskFieldInfo_5); | ||||
|         assertEquals(ServiceExitCode.OK, result_5.getExitCode()); | ||||
|         assertThat(entityManager.find(Task.class, result_5.getResult().getTaskID())).isNotNull(); | ||||
| 
 | ||||
|         //Situation 6: Deadline before start (invalid) | ||||
|         TaskFieldInfo taskFieldInfo_6 = new TaskFieldInfo("Situation 6", 0, LocalDate.now(),LocalDate.of(2010, 3, 20)); | ||||
|         ServiceResult<Task> result_6= taskService.createTask(entityManager.find(Taskgroup.class, 1L), taskFieldInfo_6); | ||||
|         assertEquals(ServiceExitCode.INVALID_PARAMETER, result_6.getExitCode()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     @SqlGroup({ | ||||
|             @Sql("classpath:taskgroupRepositoryTestEntries.sql"), | ||||
|             @Sql("classpath:taskRepositoryEntries.sql") | ||||
|     }) | ||||
|     void getTaskPermissions() { | ||||
|         //Situation 1: correct task and username | ||||
|         PermissionResult<Task> permissionResult_1 = taskService.getTaskPermissions(1L, username); | ||||
|         assertEquals(ServiceExitCode.OK, permissionResult_1.getExitCode()); | ||||
|         assertTrue(permissionResult_1.isHasPermissions()); | ||||
|         assertEquals(entityManager.find(Task.class, 1L), permissionResult_1.getResult()); | ||||
| 
 | ||||
|         //Situation 2: invalid taskgroup | ||||
|         PermissionResult<Task> permissionResult_2 = taskService.getTaskPermissions(200L, username); | ||||
|         assertEquals(ServiceExitCode.MISSING_ENTITY, permissionResult_2.getExitCode()); | ||||
|         assertFalse(permissionResult_2.isHasPermissions()); | ||||
|         assertThat(permissionResult_2.getResult()).isNull(); | ||||
| 
 | ||||
|         //Situation 3: invalid user | ||||
|         PermissionResult<Task> permissionResult_3 = taskService.getTaskPermissions(1L, username2); | ||||
|         assertEquals(ServiceExitCode.OK, permissionResult_3.getExitCode()); | ||||
|         assertFalse(permissionResult_2.isHasPermissions()); | ||||
|         assertEquals(entityManager.find(Task.class, 1L), permissionResult_3.getResult()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     @SqlGroup({ | ||||
|             @Sql("classpath:taskgroupRepositoryTestEntries.sql"), | ||||
|             @Sql("classpath:taskRepositoryEntries.sql") | ||||
|     }) | ||||
|     void editTask() { | ||||
|         //Situation 1: Nothing is updated | ||||
|         Task task_1 = entityManager.find(Task.class, 1L); | ||||
|         TaskFieldInfo taskFieldInfo_1 = new TaskFieldInfo(entityManager.find(Task.class, 1L).getTaskName(), 0, null, null); | ||||
|         ServiceResult<Task> result_1 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_1); | ||||
|         assertEquals(ServiceExitCode.OK, result_1.getExitCode()); | ||||
|         assertEquals(task_1, result_1.getResult()); | ||||
| 
 | ||||
|         //Situation 2: Name is updated to name that already exists within another taskgroup | ||||
|         Task task_2 = entityManager.find(Task.class, 1L); | ||||
|         task_2.setTaskName(entityManager.find(Task.class, 2L).getTaskName()); | ||||
|         TaskFieldInfo taskFieldInfo_2 = new TaskFieldInfo(entityManager.find(Task.class, 2L).getTaskName(), 0, null, null); | ||||
|         ServiceResult<Task> result_2 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_2); | ||||
|         assertEquals(ServiceExitCode.ENTITY_ALREADY_EXIST, result_2.getExitCode()); | ||||
|         assertNotEquals(task_2, result_2.getResult()); | ||||
| 
 | ||||
|         //Situation 3: Name is updated to nonexistend Name | ||||
|         Task task_3 = entityManager.find(Task.class, 1L); | ||||
|         task_3.setTaskName("Situation 3"); | ||||
|         TaskFieldInfo taskFieldInfo_3 = new TaskFieldInfo("Situation 3", 0, null, null); | ||||
|         ServiceResult<Task> result_3 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_3); | ||||
|         assertEquals(ServiceExitCode.OK, result_3.getExitCode()); | ||||
|         assertEquals(task_3, result_3.getResult()); | ||||
| 
 | ||||
|         //Situation 4: eta is updated | ||||
|         Task task_4 = entityManager.find(Task.class, 1L); | ||||
|         task_4.setEta(90); | ||||
|         TaskFieldInfo taskFieldInfo_4 = new TaskFieldInfo(task_4.getTaskName(), 90, null, null); | ||||
|         ServiceResult<Task> result_4 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_4); | ||||
|         assertEquals(ServiceExitCode.OK, result_4.getExitCode()); | ||||
|         assertEquals(task_4, result_4.getResult()); | ||||
| 
 | ||||
|         //Situation 5: deadline and start is updated in a valid way | ||||
|         Task task_5 = entityManager.find(Task.class, 1L); | ||||
|         task_5.setStartDate(LocalDate.of(2023,4,9)); | ||||
|         task_5.setDeadline(LocalDate.of(2023,5,9)); | ||||
|         TaskFieldInfo taskFieldInfo_5 = new TaskFieldInfo(task_5.getTaskName(), task_5.getEta(), LocalDate.of(2023, 4, 9), LocalDate.of(2023,5,9)); | ||||
|         ServiceResult<Task> result_5 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_5); | ||||
|         assertEquals(ServiceExitCode.OK, result_5.getExitCode()); | ||||
|         assertEquals(task_5, result_5.getResult()); | ||||
| 
 | ||||
|         //Situation 6: Deadline and start are updated in a not valid way | ||||
|         Task task_6 = entityManager.find(Task.class, 1L); | ||||
|         task_6.setStartDate(LocalDate.of(2023,5,9)); | ||||
|         task_6.setDeadline(LocalDate.of(2023,4,9)); | ||||
|         TaskFieldInfo taskFieldInfo_6 = new TaskFieldInfo(task_5.getTaskName(), task_5.getEta(), LocalDate.of(2023, 5, 9), LocalDate.of(2023,4,9)); | ||||
|         ServiceResult<Task> result_6 = taskService.editTask(entityManager.find(Task.class, 1L), taskFieldInfo_6); | ||||
|         assertEquals(ServiceExitCode.INVALID_PARAMETER, result_6.getExitCode()); | ||||
|         assertNotEquals(task_6, result_6.getResult()); | ||||
| 
 | ||||
|         //Situation 10 Startdate = null; | ||||
|         Task task_10 = entityManager.find(Task.class, 5L); | ||||
|         task_10.setStartDate(null); | ||||
|         TaskFieldInfo taskFieldInfo_10 = new TaskFieldInfo(task_10.getTaskName(), task_10.getEta(),null, task_10.getDeadline()); | ||||
|         ServiceResult<Task> result_10 = taskService.editTask(entityManager.find(Task.class, 5L), taskFieldInfo_10); | ||||
|         assertEquals(ServiceExitCode.OK, result_10.getExitCode()); | ||||
|         assertEquals(task_10, result_10.getResult()); | ||||
| 
 | ||||
|         //Situation 11 Deadline = null | ||||
|         Task task_11 = entityManager.find(Task.class, 5L); | ||||
|         task_11.setDeadline(null); | ||||
|         TaskFieldInfo taskFieldInfo_11 = new TaskFieldInfo(task_11.getTaskName(), task_11.getEta(),task_11.getStartDate(), null); | ||||
|         ServiceResult<Task> result_11 = taskService.editTask(entityManager.find(Task.class, 5L), taskFieldInfo_11); | ||||
|         assertEquals(ServiceExitCode.OK, result_11.getExitCode()); | ||||
|         assertEquals(task_11, result_11.getResult()); | ||||
|     } | ||||
|     @Test | ||||
|     @SqlGroup({ | ||||
|             @Sql("classpath:taskgroupRepositoryTestEntries.sql"), | ||||
|             @Sql("classpath:taskRepositoryEntries.sql") | ||||
|     }) | ||||
|     void deleteTask() { | ||||
|         Task task = entityManager.find(Task.class, 1L); | ||||
|         task.getTaskgroup().getTasks().remove(task); | ||||
|         taskgroupRepository.save(task.getTaskgroup()); | ||||
|         Task updatedTask = entityManager.find(Task.class, 1L); | ||||
|         taskRepository.deleteByTaskID(entityManager.find(Task.class, 1L).getTaskID()); | ||||
|         assertThat(entityManager.find(Task.class, 1L)).isNull(); | ||||
|     } | ||||
| } | ||||
| @ -10,3 +10,4 @@ demo.webapp.jwtSecret=demoWebappSecretKey | ||||
| demo.webapp.jwtExpirationMS=86400000 | ||||
| spring.sql.init.mode=always | ||||
| spring.jpa.hibernate.ddl-auto=create-drop | ||||
| spring.jpa.show-sql=true | ||||
| @ -16,3 +16,4 @@ INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, f | ||||
| 
 | ||||
| INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (13, NULL, 0, '2022-03-20', 'Task 6', 2, true, 0); | ||||
| INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (14, '2044-03-20', 0, '2022-03-20', 'Task 6', 2, true, 0); | ||||
| INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (15, NULL, 0, NULL, 'Task 15', 2, false, 0); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user