diff --git a/source/backend/challenge/modules/task/dtos/TaskDTO.java b/source/backend/challenge/modules/task/dtos/TaskDTO.java index d73cf02..042ecd4 100644 --- a/source/backend/challenge/modules/task/dtos/TaskDTO.java +++ b/source/backend/challenge/modules/task/dtos/TaskDTO.java @@ -16,5 +16,4 @@ public class TaskDTO { private String title; private String description; - } diff --git a/source/backend/challenge/modules/task/dtos/TaskProgressDTO.java b/source/backend/challenge/modules/task/dtos/TaskProgressDTO.java index ee6277f..1efcd10 100644 --- a/source/backend/challenge/modules/task/dtos/TaskProgressDTO.java +++ b/source/backend/challenge/modules/task/dtos/TaskProgressDTO.java @@ -13,5 +13,4 @@ public class TaskProgressDTO { private Long id; private int progress; - } diff --git a/source/backend/challenge/modules/task/infra/http/controllers/TaskController.java b/source/backend/challenge/modules/task/infra/http/controllers/TaskController.java index 6a06a52..6d63c5b 100644 --- a/source/backend/challenge/modules/task/infra/http/controllers/TaskController.java +++ b/source/backend/challenge/modules/task/infra/http/controllers/TaskController.java @@ -1,5 +1,6 @@ package backend.challenge.modules.task.infra.http.controllers; +import backend.challenge.modules.task.dtos.TaskDTO; import backend.challenge.modules.task.infra.http.views.TaskView; import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.services.*; @@ -7,6 +8,7 @@ import javax.inject.Inject; import javax.inject.Singleton; +import java.util.List; @Singleton @Path("tasks") @@ -20,56 +22,81 @@ public class TaskController { @Inject public TaskController( - final ICreateTaskService createTaskService, - final IDeleteTaskService deleteTaskService, - final IRetrieveAllTasksService retrieveAllTasksService - ) { + final ICreateTaskService createTaskService, + final IDeleteTaskService deleteTaskService, + final IRetrieveAllTasksService retrieveAllTasksService, + final IRetrieveTaskByIdService retrieveTaskByIdService, + final IUpdateTaskService updateTaskService + ){ this.createTaskService = createTaskService; this.deleteTaskService = deleteTaskService; this.retrieveAllTasksService = retrieveAllTasksService; - this.retrieveTaskByIdService = null; - this.updateTaskService = null; + this.retrieveTaskByIdService = retrieveTaskByIdService; + this.updateTaskService = updateTaskService; } - @GET public Response show() { - // TODO: Rota que lista todas as tarefas - - return DefaultResponse.ok().entity("Hello world"); + try { + List allTasks = retrieveAllTasksService.execute(); + return DefaultResponse.ok().entity(allTasks); + } catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } - @GET @Path("single/{taskId}") public Response index(@PathParam("taskId") Long taskId) { - // TODO: A rota deve retornar somente a tarefa a qual o id corresponder - - return DefaultResponse.ok().entity("Hello world"); + try { + Task task = retrieveTaskByIdService.execute(taskId); + if (task == null) { + return DefaultResponse.notFound(); + } + return DefaultResponse.ok().entity(task); + } catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } - @POST public Response create(TaskView task) { - // TODO: A rota deve receber title e description, sendo o `title` o título da tarefa e `description` uma descrição da tarefa. - - return DefaultResponse.ok().entity("Hello world"); + try { + TaskDTO taskDto = TaskDTO.create(); + taskDto.setTitle(task.getTitle()); + taskDto.setDescription(task.getDescription()); + Task newTask = createTaskService.execute(taskDto); + return DefaultResponse.created().entity(newTask); + } catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } - @PUT @Path("single/{taskId}") public Response update(@PathParam("taskId") Long taskId, Task task) { - /* - TODO: A rota deve alterar apenas o title e description da tarefa - que possua o id igual ao id correspondente nos parâmetros da rota. - */ - - return DefaultResponse.ok().entity("Hello world"); + try { + Task updateTask = retrieveTaskByIdService.execute(taskId); + if (updateTask == null) { + return DefaultResponse.notFound(); + } + updateTask.setTitle(task.getTitle()); + updateTask.setDescription(task.getDescription()); + Task updatedTask = updateTaskService.execute(updateTask, task); + return DefaultResponse.ok().entity(updatedTask); + } catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } - @DELETE @Path("single/{taskId}") public Response delete(@PathParam("taskId") Long taskId) { - // TODO: A rota deve deletar a tarefa com o id correspondente nos parâmetros da rota - - return DefaultResponse.ok().entity("Hello world"); + try { + Task deleteTask = retrieveTaskByIdService.execute(taskId); + if (deleteTask == null) { + return DefaultResponse.notFound(); + } + deleteTaskService.execute(taskId); + + return DefaultResponse.noContent(); + }catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } - } diff --git a/source/backend/challenge/modules/task/infra/http/controllers/TaskProgressController.java b/source/backend/challenge/modules/task/infra/http/controllers/TaskProgressController.java index 4a25520..1e3065d 100644 --- a/source/backend/challenge/modules/task/infra/http/controllers/TaskProgressController.java +++ b/source/backend/challenge/modules/task/infra/http/controllers/TaskProgressController.java @@ -1,5 +1,6 @@ package backend.challenge.modules.task.infra.http.controllers; +import backend.challenge.modules.task.dtos.TaskProgressDTO; import backend.challenge.modules.task.infra.http.views.TaskProgressView; import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.services.*; @@ -13,11 +14,13 @@ public class TaskProgressController { private final IUpdateTaskProgressService updateTaskProgressService; + private final IRetrieveTaskByIdService retrieveTaskByIdService; @Inject - public TaskProgressController(final IUpdateTaskProgressService updateTaskProgressService) { + public TaskProgressController(final IUpdateTaskProgressService updateTaskProgressService, final IRetrieveTaskByIdService retrieveTaskByIdService) { this.updateTaskProgressService = updateTaskProgressService; - } + this.retrieveTaskByIdService = retrieveTaskByIdService; + } @PUT @Path("single/{taskId}") @@ -29,7 +32,25 @@ public Response updateProgress(@PathParam("taskId") Long taskId, TaskProgressVie o `status` deve ser alterado para `COMPLETE` */ - return DefaultResponse.ok().entity("Hello world"); + try { + if (taskProgressView.getProgress() < 1 || taskProgressView.getProgress() > 100) { + return DefaultResponse.badRequest().entity("Enter a value between 1 and 100"); + } + + TaskProgressDTO taskProgressDTO = TaskProgressDTO.create(); + taskProgressDTO.setId(taskId); + taskProgressDTO.setProgress(taskProgressView.getProgress()); + Task taskToUpdate = retrieveTaskByIdService.execute(taskId); + + if (taskToUpdate == null) { + return DefaultResponse.notFound(); + } + + taskToUpdate = updateTaskProgressService.execute(taskProgressDTO); + return DefaultResponse.ok().entity(taskToUpdate); + } catch (Exception e) { + return DefaultResponse.badRequest().entity(e.getMessage()); + } } } diff --git a/source/backend/challenge/modules/task/models/Task.java b/source/backend/challenge/modules/task/models/Task.java index 123f10c..105fae6 100644 --- a/source/backend/challenge/modules/task/models/Task.java +++ b/source/backend/challenge/modules/task/models/Task.java @@ -3,7 +3,6 @@ import backend.challenge.modules.task.enums.TaskStatus; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.experimental.Accessors; @@ -11,13 +10,14 @@ @Getter @Setter +@NoArgsConstructor +@Accessors(chain = true) public class Task { - private Long id; - private String title; - private String description; - private int progress; - private TaskStatus status; - private Date createdAt; - + private Long id; + private String title; + private String description; + private int progress; + private TaskStatus status; + private Date createdAt; } diff --git a/source/backend/challenge/modules/task/repositories/ITaskRepository.java b/source/backend/challenge/modules/task/repositories/ITaskRepository.java index 527450a..7f4ef3c 100644 --- a/source/backend/challenge/modules/task/repositories/ITaskRepository.java +++ b/source/backend/challenge/modules/task/repositories/ITaskRepository.java @@ -1,6 +1,7 @@ package backend.challenge.modules.task.repositories; import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.dtos.TaskProgressDTO; import backend.challenge.modules.task.models.Task; import java.util.List; @@ -12,5 +13,6 @@ public interface ITaskRepository { Task create(TaskDTO taskDTO); Task update(Task task); void delete(Long taskId); + Task UpdateProgress(TaskProgressDTO taskProgressDTO); } diff --git a/source/backend/challenge/modules/task/repositories/TaskRepository.java b/source/backend/challenge/modules/task/repositories/TaskRepository.java index c47c8fd..196b21a 100644 --- a/source/backend/challenge/modules/task/repositories/TaskRepository.java +++ b/source/backend/challenge/modules/task/repositories/TaskRepository.java @@ -1,46 +1,73 @@ package backend.challenge.modules.task.repositories; import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.dtos.TaskProgressDTO; +import backend.challenge.modules.task.enums.TaskStatus; import backend.challenge.modules.task.models.Task; import javax.inject.Singleton; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.UUID; @Singleton public class TaskRepository implements ITaskRepository { + private final static List tasks = new ArrayList<>(); + @Override public Task index(final Long taskId) { - // TODO: Criar método responsável por retornar tarefa por id - - return null; + return tasks.stream().filter(task -> task.getId().equals(taskId)).findFirst().orElse(null); } @Override public List show() { - // TODO: Criar método responsável por retornar todas as tarefas - - return null; + return tasks; } @Override public Task create(final TaskDTO taskDTO) { - // TODO: Criar método responsável por criar uma tarefa + Task newTask = new Task(); + + newTask.setId(UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE); + newTask.setTitle(taskDTO.getTitle()); + newTask.setDescription(taskDTO.getDescription()); + newTask.setProgress(0); + newTask.setStatus(TaskStatus.PROGRESS); + newTask.setCreatedAt(new Date()); + tasks.add(newTask); - return null; + return newTask; } @Override public Task update(final Task task) { - // TODO: Criar método responsável por atualizar uma tarefa + Task taskUpdate = this.index(task.getId()); + taskUpdate.setTitle(task.getTitle()); + taskUpdate.setDescription(task.getDescription()); - return null; + return taskUpdate; } @Override public void delete(final Long taskId) { - // TODO: Criar método responsável por deletar tarefa por id + Task taskToDelete = this.index(taskId); + tasks.remove(taskToDelete); + } + + @Override + public Task UpdateProgress(TaskProgressDTO taskProgressDTO) { + Task task = index(taskProgressDTO.getId()); + if (taskProgressDTO.getProgress() > 0 && taskProgressDTO.getProgress() <= 100) { + task.setProgress(taskProgressDTO.getProgress()); + if (taskProgressDTO.getProgress() == 100) { + task.setStatus(TaskStatus.COMPLETE); + } + } + return task; } + } diff --git a/source/backend/challenge/modules/task/services/CreateTaskService.java b/source/backend/challenge/modules/task/services/CreateTaskService.java index 46b144b..12b2f2a 100644 --- a/source/backend/challenge/modules/task/services/CreateTaskService.java +++ b/source/backend/challenge/modules/task/services/CreateTaskService.java @@ -19,9 +19,8 @@ public CreateTaskService(final ITaskRepository taskRepository) { @Override public Task execute(TaskDTO taskDTO) { - // TODO: Criar serviço responsável por criar uma tarefa - return null; + return taskRepository.create(taskDTO); } } diff --git a/source/backend/challenge/modules/task/services/DeleteTaskService.java b/source/backend/challenge/modules/task/services/DeleteTaskService.java index c957d70..cded391 100644 --- a/source/backend/challenge/modules/task/services/DeleteTaskService.java +++ b/source/backend/challenge/modules/task/services/DeleteTaskService.java @@ -17,7 +17,7 @@ public DeleteTaskService(final ITaskRepository taskRepository) { @Override public void execute(Long taskId) { - // TODO: Criar serviço responsável por deletar a tarefa + taskRepository.delete(taskId); } } diff --git a/source/backend/challenge/modules/task/services/IUpdateTaskService.java b/source/backend/challenge/modules/task/services/IUpdateTaskService.java index 3da8340..cfde50a 100644 --- a/source/backend/challenge/modules/task/services/IUpdateTaskService.java +++ b/source/backend/challenge/modules/task/services/IUpdateTaskService.java @@ -4,6 +4,5 @@ public interface IUpdateTaskService { - Task execute(Task task); - + Task execute(Task task, Task newTask); } diff --git a/source/backend/challenge/modules/task/services/RetrieveAllTasksService.java b/source/backend/challenge/modules/task/services/RetrieveAllTasksService.java index 52a4149..26f7ae7 100644 --- a/source/backend/challenge/modules/task/services/RetrieveAllTasksService.java +++ b/source/backend/challenge/modules/task/services/RetrieveAllTasksService.java @@ -19,9 +19,7 @@ public RetrieveAllTasksService(final ITaskRepository taskRepository) { @Override public List execute() { - // TODO: Criar serviço responsável por recuperar todas as tarefas - - return null; + return taskRepository.show(); } } diff --git a/source/backend/challenge/modules/task/services/RetrieveTaskByIdService.java b/source/backend/challenge/modules/task/services/RetrieveTaskByIdService.java new file mode 100644 index 0000000..88d52a1 --- /dev/null +++ b/source/backend/challenge/modules/task/services/RetrieveTaskByIdService.java @@ -0,0 +1,24 @@ +package backend.challenge.modules.task.services; + +import backend.challenge.modules.task.models.Task; +import backend.challenge.modules.task.repositories.ITaskRepository; + +import javax.inject.Inject; +import javax.inject.Singleton; + +@Singleton +public class RetrieveTaskByIdService implements IRetrieveTaskByIdService{ + private final ITaskRepository taskRepository; + + @Inject + public RetrieveTaskByIdService(final ITaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + @Override + public Task execute(Long taskID) { + return this.taskRepository.index(taskID); + } + + +} diff --git a/source/backend/challenge/modules/task/services/UpdateTaskProgressService.java b/source/backend/challenge/modules/task/services/UpdateTaskProgressService.java new file mode 100644 index 0000000..ed0e90d --- /dev/null +++ b/source/backend/challenge/modules/task/services/UpdateTaskProgressService.java @@ -0,0 +1,21 @@ +package backend.challenge.modules.task.services; + +import backend.challenge.modules.task.dtos.TaskProgressDTO; +import backend.challenge.modules.task.models.Task; +import backend.challenge.modules.task.repositories.ITaskRepository; + +import javax.inject.Inject; + +public class UpdateTaskProgressService implements IUpdateTaskProgressService { + private final ITaskRepository taskRepository; + + @Inject + public UpdateTaskProgressService(ITaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + @Override + public Task execute(TaskProgressDTO taskProgressDTO) { + return this.taskRepository.UpdateProgress(taskProgressDTO); + } +} \ No newline at end of file diff --git a/source/backend/challenge/modules/task/services/UpdateTaskService.java b/source/backend/challenge/modules/task/services/UpdateTaskService.java new file mode 100644 index 0000000..b0708a0 --- /dev/null +++ b/source/backend/challenge/modules/task/services/UpdateTaskService.java @@ -0,0 +1,22 @@ +package backend.challenge.modules.task.services; + +import backend.challenge.modules.task.models.Task; +import backend.challenge.modules.task.repositories.ITaskRepository; + +import javax.inject.Inject; +import javax.inject.Singleton; + +@Singleton +public class UpdateTaskService implements IUpdateTaskService { + + private final ITaskRepository taskRepository; + @Inject + public UpdateTaskService(ITaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + @Override + public Task execute(Task task, Task newTask) { + return taskRepository.update(task); + } +} \ No newline at end of file diff --git a/tests/Runner.java b/tests/Runner.java index 1ff4b19..71637f8 100644 --- a/tests/Runner.java +++ b/tests/Runner.java @@ -1,7 +1,6 @@ package backend.challenge; import kikaha.core.test.KikahaServerRunner; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/tests/backend/challenge/modules/task/services/CreateTaskServiceTest.java b/tests/backend/challenge/modules/task/services/CreateTaskServiceTest.java index 684dc44..c9bda55 100644 --- a/tests/backend/challenge/modules/task/services/CreateTaskServiceTest.java +++ b/tests/backend/challenge/modules/task/services/CreateTaskServiceTest.java @@ -1,10 +1,12 @@ package backend.challenge.modules.task.services; +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.repositories.ITaskRepository; import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,14 +18,16 @@ public class CreateTaskServiceTest { @Before public void init() { final ITaskRepository taskRepository = new TaskRepository(); - createTaskService = new CreateTaskService(taskRepository); } @Test public void shouldBeAbleToCreateANewTask() { - // TODO: Para que esse teste passe, sua aplicação deve permitir que - // uma tarefa seja criado, e retorne um json com a tarefa criada. + TaskDTO taskDTO = Utils.newTaskDTO(); + Task newTask = createTaskService.execute(taskDTO); + + Assert.assertNotNull(newTask); + } diff --git a/tests/backend/challenge/modules/task/services/DeleteTaskServiceTest.java b/tests/backend/challenge/modules/task/services/DeleteTaskServiceTest.java index 93497a5..d674db3 100644 --- a/tests/backend/challenge/modules/task/services/DeleteTaskServiceTest.java +++ b/tests/backend/challenge/modules/task/services/DeleteTaskServiceTest.java @@ -1,10 +1,12 @@ package backend.challenge.modules.task.services; +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.repositories.ITaskRepository; import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,20 +14,24 @@ public class DeleteTaskServiceTest { private IDeleteTaskService deleteTaskService; + private ICreateTaskService createTaskService; + private IRetrieveTaskByIdService retrieveTaskByIdService; @Before public void init() { final ITaskRepository taskRepository = new TaskRepository(); - deleteTaskService = new DeleteTaskService(taskRepository); + createTaskService = new CreateTaskService(taskRepository); + retrieveTaskByIdService = new RetrieveTaskByIdService(taskRepository); } @Test public void shouldBeAbleToDeleteTaskById() { - // TODO: Para que esse teste passe, sua aplicação deve permitir que tarefas sejam deletadas por id. - } - - - + TaskDTO taskDTO = Utils.newTaskDTO(); + Task newTask = createTaskService.execute(taskDTO); + deleteTaskService.execute(newTask.getId()); + Task task = retrieveTaskByIdService.execute(newTask.getId()); + Assert.assertNull(task); + } } \ No newline at end of file diff --git a/tests/backend/challenge/modules/task/services/RetrieveAllTasksServiceTest.java b/tests/backend/challenge/modules/task/services/RetrieveAllTasksServiceTest.java index 68f0012..eaf2531 100644 --- a/tests/backend/challenge/modules/task/services/RetrieveAllTasksServiceTest.java +++ b/tests/backend/challenge/modules/task/services/RetrieveAllTasksServiceTest.java @@ -1,31 +1,38 @@ package backend.challenge.modules.task.services; +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.repositories.ITaskRepository; import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.List; + @RunWith( KikahaRunner.class ) public class RetrieveAllTasksServiceTest { private IRetrieveAllTasksService retrieveAllTasksService; + private ICreateTaskService createTaskService; @Before public void init() { final ITaskRepository taskRepository = new TaskRepository(); - retrieveAllTasksService = new RetrieveAllTasksService(taskRepository); + createTaskService = new CreateTaskService(taskRepository); + } @Test public void shouldBeAbleToListTheTasks() { - /* - TODO: Para que esse teste passe, sua aplicação deve permitir que seja - retornado um array com todas as tarefas que foram criadas até o momento. - */ + TaskDTO taskDTO = Utils.newTaskDTO(); + createTaskService.execute(taskDTO); + List tasks = retrieveAllTasksService.execute(); + Assert.assertNotNull(tasks.get(0)); + } } \ No newline at end of file diff --git a/tests/backend/challenge/modules/task/services/RetrieveTaskByIdServiceTest.java b/tests/backend/challenge/modules/task/services/RetrieveTaskByIdServiceTest.java index eb96b15..b041d40 100644 --- a/tests/backend/challenge/modules/task/services/RetrieveTaskByIdServiceTest.java +++ b/tests/backend/challenge/modules/task/services/RetrieveTaskByIdServiceTest.java @@ -1,9 +1,11 @@ package backend.challenge.modules.task.services; - +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.repositories.ITaskRepository; import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,13 +14,22 @@ public class RetrieveTaskByIdServiceTest { private IRetrieveTaskByIdService retrieveTaskByIdService; + private ICreateTaskService createTaskService; + + @Before + public void init () { + final ITaskRepository taskRepository = new TaskRepository(); + retrieveTaskByIdService = new RetrieveTaskByIdService(taskRepository); + createTaskService = new CreateTaskService(taskRepository); + } @Test public void shouldBeAbleToListTheTaskById() { - /* - TODO: Para que esse teste passe, sua aplicação deve permitir que seja - retornado uma tarefa com o mesmo id informado. - */ + + TaskDTO taskDTO = Utils.newTaskDTO(); + Task newTask = createTaskService.execute(taskDTO); + Task taskByID = retrieveTaskByIdService.execute(newTask.getId()); + Assert.assertEquals(taskByID.getId(),newTask.getId()); } } diff --git a/tests/backend/challenge/modules/task/services/UpdateTaskProgressServiceTest.java b/tests/backend/challenge/modules/task/services/UpdateTaskProgressServiceTest.java index e6b0bf6..1848372 100644 --- a/tests/backend/challenge/modules/task/services/UpdateTaskProgressServiceTest.java +++ b/tests/backend/challenge/modules/task/services/UpdateTaskProgressServiceTest.java @@ -1,27 +1,64 @@ package backend.challenge.modules.task.services; - +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.dtos.TaskProgressDTO; +import backend.challenge.modules.task.enums.TaskStatus; +import backend.challenge.modules.task.models.Task; +import backend.challenge.modules.task.repositories.ITaskRepository; +import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; + @RunWith( KikahaRunner.class ) public class UpdateTaskProgressServiceTest { + private ICreateTaskService createTaskService; + private IUpdateTaskService updateTaskService; + private IUpdateTaskProgressService updateTaskProgressService; + + @Before + public void init() { + final ITaskRepository taskRepository = new TaskRepository(); + createTaskService = new CreateTaskService(taskRepository); + updateTaskService = new UpdateTaskService(taskRepository); + updateTaskProgressService = new UpdateTaskProgressService(taskRepository); + } @Test public void shouldBeAbleToUpdateTaskProgress() { - /* - TODO: Para que esse teste passe, sua aplicação deve permitir que sejam - alterados apenas o campo `progress`. - */ + TaskDTO standardTaskDTO = Utils.newTaskDTO(); + Task standardTask = createTaskService.execute(standardTaskDTO); + int standardProgress = standardTask.getProgress(); + + TaskProgressDTO newProgressDTO = Utils.newTaskProgressDTO(standardTask.getId()); + Task taskUpdated = updateTaskProgressService.execute(newProgressDTO); + + Assert.assertEquals(taskUpdated.getId(), standardTask.getId()); + Assert.assertNotEquals(taskUpdated.getProgress(), standardProgress); + } @Test public void shouldBeAbleToUpdateOnlyTaskStatusWhenProgressEqualsOneHundred() { - /* - TODO: Para que esse teste passe, sua aplicação deve permitir que sejam - alterado apenas o campo `status`, quando o progresso for igual a 100. - */ + TaskDTO standardTaskDTO = Utils.newTaskDTO(); + Task standardTask = createTaskService.execute(standardTaskDTO); + + TaskDTO newTaskDTO = Utils.newTaskDTOUpdate(); + Task newTask = createTaskService.execute(newTaskDTO); + newTask.setProgress(85); + newTask.setStatus(TaskStatus.COMPLETE); + + Task updateTask = updateTaskService.execute(standardTask, newTask); + Assert.assertEquals(updateTask.getStatus(), TaskStatus.PROGRESS); + + TaskProgressDTO newProgressDTO = Utils.newTaskProgressDTO(standardTask.getId()); + newProgressDTO.setProgress(100); + + Task taskCompleted = updateTaskProgressService.execute(newProgressDTO); + Assert.assertEquals(taskCompleted.getStatus(), TaskStatus.COMPLETE); } } diff --git a/tests/backend/challenge/modules/task/services/UpdateTaskServiceTest.java b/tests/backend/challenge/modules/task/services/UpdateTaskServiceTest.java index 53a4082..789e551 100644 --- a/tests/backend/challenge/modules/task/services/UpdateTaskServiceTest.java +++ b/tests/backend/challenge/modules/task/services/UpdateTaskServiceTest.java @@ -1,10 +1,15 @@ package backend.challenge.modules.task.services; +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.enums.TaskStatus; +import backend.challenge.modules.task.infra.http.controllers.TaskController; +import backend.challenge.modules.task.models.Task; import backend.challenge.modules.task.repositories.ITaskRepository; import backend.challenge.modules.task.repositories.TaskRepository; import kikaha.core.test.KikahaRunner; +import kikaha.urouting.api.Response; +import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,32 +17,50 @@ public class UpdateTaskServiceTest { private IUpdateTaskService updateTaskService; + private ICreateTaskService createTaskService; + private TaskController taskController; + @Before + public void init() { + final ITaskRepository taskRepository = new TaskRepository(); + createTaskService = new CreateTaskService(taskRepository); + updateTaskService = new UpdateTaskService(taskRepository); + IRetrieveTaskByIdService retrieveTaskByIdService = new RetrieveTaskByIdService(taskRepository); + IRetrieveAllTasksService retrieveAllTasksService = new RetrieveAllTasksService(taskRepository); + IDeleteTaskService deleteTaskService = new DeleteTaskService(taskRepository); + taskController = new TaskController(createTaskService, deleteTaskService, + retrieveAllTasksService, + retrieveTaskByIdService, updateTaskService); + + } @Test public void shouldBeAbleToUpdateTask() { - /* - TODO: Para que esse teste passe, sua aplicação deve permitir que sejam - alterados apenas os campos `title` e `observation`. - */ + TaskDTO standardTaskDTO = Utils.newTaskDTO(); + Task standardTask = createTaskService.execute(standardTaskDTO); + + TaskDTO newTaskDTO = Utils.newTaskDTOUpdate(); + Task newTask = createTaskService.execute(newTaskDTO); + Task updateTask = updateTaskService.execute(standardTask, newTask); + Assert.assertEquals(updateTask, standardTask); } @Test public void shouldNotBeAbleToUpdateATaskThatDoesNotExist() { - /* - TODO: Para que esse teste passe, você deve validar na sua rota de update se - o id da tarefa enviada pela url existe ou não. Caso não exista, retornar um erro com status 400. - */ + Response httpStatus = taskController.index(1234L); + Assert.assertEquals(httpStatus.statusCode(),404); } @Test public void shouldNotBeAbleToUpdateTaskStatusManually() { - /* - TODO: Para que esse teste passe, você não deve permitir que sua rota de update - altere diretamente o `status` dessa tarefa, mantendo o mesmo status que a tarefa - já possuía antes da atualização. Isso porque o único lugar que deve atualizar essa informação - é a rota responsável por alterar o progresso da tarefa. + TaskDTO standardTaskDTO = Utils.newTaskDTO(); + Task standardTask = createTaskService.execute(standardTaskDTO); + + TaskDTO newTaskDTO = Utils.newTaskDTOUpdate(); + Task newTask = createTaskService.execute(newTaskDTO); + newTask.setStatus(TaskStatus.COMPLETE); + Task updatedTask = updateTaskService.execute(standardTask, newTask); - */ + Assert.assertEquals(standardTask.getStatus(), updatedTask.getStatus()); } diff --git a/tests/backend/challenge/modules/task/services/Utils.java b/tests/backend/challenge/modules/task/services/Utils.java new file mode 100644 index 0000000..45a71d6 --- /dev/null +++ b/tests/backend/challenge/modules/task/services/Utils.java @@ -0,0 +1,33 @@ +package backend.challenge.modules.task.services; + +import backend.challenge.modules.task.dtos.TaskDTO; +import backend.challenge.modules.task.dtos.TaskProgressDTO; + +public class Utils { + public static TaskDTO newTaskDTO() { + TaskDTO taskDTO = TaskDTO.create(); + + taskDTO.setTitle("Title Test"); + taskDTO.setDescription("Description Test"); + + return taskDTO; + } + + public static TaskDTO newTaskDTOUpdate() { + TaskDTO taskDTO = TaskDTO.create(); + + taskDTO.setTitle("Test"); + taskDTO.setDescription("Test"); + + return taskDTO; + } + + public static TaskProgressDTO newTaskProgressDTO (Long taskId) { + TaskProgressDTO taskProgressDTO = TaskProgressDTO.create(); + + taskProgressDTO.setId(taskId); + taskProgressDTO.setProgress(75); + + return taskProgressDTO; + } +} \ No newline at end of file