From 1a89d7bf16bfd84e35f680beaee7cce64a6f023d Mon Sep 17 00:00:00 2001 From: Patrik Michal Vlcek <493059@mail.muni.cz> Date: Tue, 1 Feb 2022 00:06:30 +0100 Subject: [PATCH] created TaskDaoTest.java and implemented core unit tests --- .../fi/pv168/project/db/task/TaskDaoTest.java | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/test/java/cz/muni/fi/pv168/project/db/task/TaskDaoTest.java diff --git a/src/test/java/cz/muni/fi/pv168/project/db/task/TaskDaoTest.java b/src/test/java/cz/muni/fi/pv168/project/db/task/TaskDaoTest.java new file mode 100644 index 00000000..f5f570b5 --- /dev/null +++ b/src/test/java/cz/muni/fi/pv168/project/db/task/TaskDaoTest.java @@ -0,0 +1,116 @@ +package cz.muni.fi.pv168.project.db.task; + +import cz.muni.fi.pv168.project.data.task.Task; +import cz.muni.fi.pv168.project.data.task.TaskStatus; +import cz.muni.fi.pv168.project.db.category.CategoryDao; +import cz.muni.fi.pv168.project.db.category.CategoryManager; +import cz.muni.fi.pv168.project.db.categorytime.CategoryTimeDao; +import cz.muni.fi.pv168.project.db.dependency.DependencyDao; +import cz.muni.fi.pv168.project.db.subtask.SubTaskDao; +import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryDao; +import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryManager; +import org.apache.derby.jdbc.EmbeddedDataSource; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.SQLException; +import java.time.LocalDate; +import java.util.Arrays; +import java.util.LinkedList; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.Mockito.mock; + +class TaskDaoTest { + private static EmbeddedDataSource dataSource; + private TaskDao taskDao; + private TaskManager taskManager; + private CategoryDao categoryDao; + private TaskCategoryDao taskCategoryDao; + private CategoryManager categoryManager; + private TaskCategoryManager taskCategoryManager; + + @BeforeAll + static void initTestDataSource() throws SQLException { + dataSource = new EmbeddedDataSource(); + dataSource.setDatabaseName("memory:todo-test"); + dataSource.setCreateDatabase("create"); + } + + @BeforeEach + void setupDao() throws SQLException { + categoryDao = new CategoryDao(dataSource, mock(CategoryTimeDao.class)); + taskCategoryDao = new TaskCategoryDao(dataSource); + taskDao = new TaskDao(dataSource, mock(SubTaskDao.class), mock(DependencyDao.class), + taskCategoryDao, categoryDao, mock(CategoryTimeDao.class)); + + taskManager = new TaskManager(dataSource); + categoryManager = new CategoryManager(dataSource); + taskCategoryManager = new TaskCategoryManager(dataSource); + } + + @AfterEach + void cleanUp() { + taskCategoryManager.dropTable(); + categoryManager.dropTable(); + taskManager.dropTable(); + } + + @Test + void add_NewTaskWithoutCategoryAndDependencies_TaskAdded() { + var tasks = new LinkedList<Task>(Arrays.asList( + Task.builder("A", 10L, LocalDate.EPOCH).build(), + Task.builder("B", 10L, LocalDate.EPOCH).build() + )); + for (var task : + tasks) { + taskDao.add(task); + } + assertThat(taskDao.getAll()).isEqualTo(tasks); + } + + @Test + void getAll_ExistingTasksWithoutCategoryAndDependencies_AllTaskReturned() { + var tasks = setupTasks(); + assertThat(taskDao.getAll()).isEqualTo(tasks); + } + + @Test + void fetch_ExistingTaskWithoutCategoryAndDependencies_TaskFetched() { + var tasks = setupTasks(); + assertThat(taskDao.fetch(tasks.get(0).getId())).isEqualTo(tasks.get(0)); + } + + @Test + void update_ChangedExistingTasksStatus_TaskUpdated() { + var tasks = setupTasks(); + tasks.get(0).toggleIsCompleted(); + tasks.get(0).setTaskStatus(TaskStatus.FINISHED); + taskDao.update(tasks.get(0)); + assertThat(taskDao.getAll()).isEqualTo(tasks); + } + + @Test + void delete_ExistingTask_TaskDeleted() { + var tasks = setupTasks(); + taskDao.delete(tasks.get(0)); + tasks.remove(0); + assertThat(taskDao.getAll()).isEqualTo(tasks); + } + + private LinkedList<Task> setupTasks() { + var tasks = new LinkedList<Task>(Arrays.asList( + Task.builder("A", 10L, LocalDate.EPOCH).build(), + Task.builder("B", 10L, LocalDate.EPOCH).build(), + Task.builder("C", 10L, LocalDate.EPOCH).build(), + Task.builder("D", 10L, LocalDate.EPOCH).build() + )); + for (var task : + tasks) { + taskDao.add(task); + } + return tasks; + } +} \ No newline at end of file -- GitLab