diff --git a/maven-spring/src/main/java/com/poliveira/javaverse/controller/TaskController.java b/maven-spring/src/main/java/com/poliveira/javaverse/controller/TaskController.java index 05a39b4..b6b0834 100644 --- a/maven-spring/src/main/java/com/poliveira/javaverse/controller/TaskController.java +++ b/maven-spring/src/main/java/com/poliveira/javaverse/controller/TaskController.java @@ -3,6 +3,7 @@ import static org.springframework.http.HttpStatus.CREATED; import com.poliveira.javaverse.model.SimpleTaskVO; +import com.poliveira.javaverse.model.SuccessVO; import com.poliveira.javaverse.model.TaskVO; import com.poliveira.javaverse.service.TaskService; import java.util.List; @@ -41,9 +42,11 @@ public TaskVO updateTask(@PathVariable Long id, @RequestBody SimpleTaskVO taskVO } @DeleteMapping("/{id}") - public void deleteTask(@PathVariable Long id) { - // @TODO return object with delete status - taskService.deleteTask(id); + public SuccessVO deleteTask(@PathVariable Long id) { + return SuccessVO.builder() + .success(taskService.deleteTask(id)) + .message("Task deleted successfully") + .build(); } @GetMapping diff --git a/maven-spring/src/main/java/com/poliveira/javaverse/model/SuccessVO.java b/maven-spring/src/main/java/com/poliveira/javaverse/model/SuccessVO.java new file mode 100644 index 0000000..3caca11 --- /dev/null +++ b/maven-spring/src/main/java/com/poliveira/javaverse/model/SuccessVO.java @@ -0,0 +1,15 @@ +package com.poliveira.javaverse.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SuccessVO { + private boolean success; + private String message; +} diff --git a/maven-spring/src/main/java/com/poliveira/javaverse/service/TaskService.java b/maven-spring/src/main/java/com/poliveira/javaverse/service/TaskService.java index 3f74d75..c07f9fa 100644 --- a/maven-spring/src/main/java/com/poliveira/javaverse/service/TaskService.java +++ b/maven-spring/src/main/java/com/poliveira/javaverse/service/TaskService.java @@ -48,7 +48,12 @@ public TaskVO updateTask(Long id, SimpleTaskVO task) { return null; } - public void deleteTask(Long id) { - taskRepository.deleteById(id); + public boolean deleteTask(Long id) { + try { + taskRepository.deleteById(id); + return true; + } catch (Exception e) { + return false; + } } } diff --git a/maven-spring/src/test/java/com/poliveira/javaverse/TasksRepositoryTest.java b/maven-spring/src/test/java/com/poliveira/javaverse/TasksRepositoryTest.java index 01662ce..9958d5c 100644 --- a/maven-spring/src/test/java/com/poliveira/javaverse/TasksRepositoryTest.java +++ b/maven-spring/src/test/java/com/poliveira/javaverse/TasksRepositoryTest.java @@ -3,13 +3,14 @@ import static com.poliveira.javaverse.model.Status.TODO; import static java.lang.System.currentTimeMillis; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; -import com.poliveira.javaverse.model.SimpleTaskVO; import com.poliveira.javaverse.model.TaskVO; import com.poliveira.javaverse.repository.TaskRepository; +import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -26,13 +27,11 @@ public void setUp() {} @Test public void testCreateTask() { - SimpleTaskVO task = - SimpleTaskVO.builder().title("New Task").description("This is a new task").build(); TaskVO mockTaskVO = TaskVO.builder() .id(1L) - .title(task.getTitle()) - .description(task.getDescription()) + .title("New Task") + .description("This is a new task") .status(TODO) .createdAt(currentTimeMillis()) .updatedAt(currentTimeMillis()) @@ -42,8 +41,89 @@ public void testCreateTask() { TaskVO taskVO = taskRepository.save(mockTaskVO); assertTrue(taskVO.getId() > 0); - assertEquals(task.getTitle(), taskVO.getTitle()); - assertEquals(task.getDescription(), taskVO.getDescription()); + assertEquals(mockTaskVO.getTitle(), taskVO.getTitle()); + assertEquals(mockTaskVO.getDescription(), taskVO.getDescription()); assertEquals(TODO, taskVO.getStatus()); } + + @Test + public void testFindAllTasks() { + TaskVO task1 = + TaskVO.builder() + .id(1L) + .title("Task 1") + .description("Description 1") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + TaskVO task2 = + TaskVO.builder() + .id(2L) + .title("Task 2") + .description("Description 2") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + when(taskRepository.findAll()).thenReturn(List.of(task1, task2)); + + List tasks = taskRepository.findAll(); + assertEquals(2, tasks.size()); + assertEquals(task1.getTitle(), tasks.get(0).getTitle()); + assertEquals(task2.getTitle(), tasks.get(1).getTitle()); + } + + @Test + public void testFindById() { + TaskVO task1 = + TaskVO.builder() + .id(1L) + .title("Task 1") + .description("Description 1") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + when(taskRepository.findById(1L)).thenReturn(java.util.Optional.of(task1)); + + TaskVO foundTask = taskRepository.findById(1L).orElse(null); + assertNotNull(foundTask); + assertEquals(task1.getTitle(), foundTask.getTitle()); + assertEquals(task1.getDescription(), foundTask.getDescription()); + } + + @Test + public void testUpdateTask() { + TaskVO mockTaskVO = + TaskVO.builder() + .id(1L) + .title("New Task") + .description("This is an new task") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + when(taskRepository.save(any(TaskVO.class))).thenReturn(mockTaskVO); + + TaskVO taskVO1 = taskRepository.save(mockTaskVO); + assertTrue(taskVO1.getId() > 0); + assertEquals(mockTaskVO.getTitle(), taskVO1.getTitle()); + assertEquals(mockTaskVO.getDescription(), taskVO1.getDescription()); + assertEquals(TODO, taskVO1.getStatus()); + + // update the task + mockTaskVO.setTitle("Updated Task"); + when(taskRepository.save(any(TaskVO.class))).thenReturn(mockTaskVO); + + TaskVO taskVO2 = taskRepository.save(mockTaskVO); + assertTrue(taskVO2.getId() > 0); + assertEquals(mockTaskVO.getTitle(), taskVO2.getTitle()); + assertEquals(mockTaskVO.getDescription(), taskVO2.getDescription()); + assertEquals(TODO, taskVO2.getStatus()); + } } diff --git a/maven-spring/src/test/java/com/poliveira/javaverse/TasksServiceTest.java b/maven-spring/src/test/java/com/poliveira/javaverse/TasksServiceTest.java index 10f6e52..e48bd27 100644 --- a/maven-spring/src/test/java/com/poliveira/javaverse/TasksServiceTest.java +++ b/maven-spring/src/test/java/com/poliveira/javaverse/TasksServiceTest.java @@ -11,7 +11,8 @@ import com.poliveira.javaverse.model.TaskVO; import com.poliveira.javaverse.repository.TaskRepository; import com.poliveira.javaverse.service.TaskService; -import org.junit.jupiter.api.BeforeEach; +import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -22,16 +23,8 @@ public class TasksServiceTest { @Mock private TaskRepository taskRepository; - @InjectMocks private TaskService taskService; - @BeforeEach - public void setUp() { - SimpleTaskVO task = - SimpleTaskVO.builder().title("Test Task").description("This is a test task").build(); - taskService.createTask(task); - } - @Test public void testCreateTask() { SimpleTaskVO task = @@ -54,4 +47,54 @@ public void testCreateTask() { assertEquals(task.getDescription(), taskVO.getDescription()); assertEquals(TODO, taskVO.getStatus()); } + + @Test + public void testFindAll() { + TaskVO task = + TaskVO.builder() + .id(1L) + .title("Test Task") + .description("This is a test task") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + when(taskRepository.findAll()).thenReturn(List.of(task)); + + List tasks = taskService.getAllTasks(); + assertEquals(1, tasks.size()); + assertEquals(task.getTitle(), tasks.getFirst().getTitle()); + } + + @Test + public void testUpdateTask() { + TaskVO mockExistingTask = + TaskVO.builder() + .id(1L) + .title("Old Task") + .description("This is an old task") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + TaskVO mockUpdatedTask = + TaskVO.builder() + .id(1L) + .title("Updated Task") + .description("This is an updated task") + .status(TODO) + .createdAt(currentTimeMillis()) + .updatedAt(currentTimeMillis()) + .build(); + + when(taskRepository.findById(1L)).thenReturn(Optional.of(mockExistingTask)); + when(taskRepository.save(any(TaskVO.class))).thenReturn(mockUpdatedTask); + + SimpleTaskVO task = + SimpleTaskVO.builder().title("Updated Task").description("This is an updated task").build(); + TaskVO updatedTask = taskService.updateTask(1L, task); + assertEquals(task.getTitle(), updatedTask.getTitle()); + assertEquals(task.getDescription(), updatedTask.getDescription()); + } }