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