From 08b413a887e81e36916e302549ceb6d35f1279f7 Mon Sep 17 00:00:00 2001
From: Patrik Michal Vlcek <493059@mail.muni.cz>
Date: Wed, 2 Feb 2022 00:20:15 +0100
Subject: [PATCH] implemented more unit tests

---
 .../fi/pv168/project/db/task/TaskDaoTest.java | 101 +++++++++++++++++-
 1 file changed, 97 insertions(+), 4 deletions(-)

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
index f5f570b5..cd9e704c 100644
--- 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
@@ -1,11 +1,14 @@
 package cz.muni.fi.pv168.project.db.task;
 
+import cz.muni.fi.pv168.project.data.category.Category;
 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.DataAccessException;
 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.dependency.DependencyManager;
 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;
@@ -15,12 +18,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.awt.Color;
 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.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.mock;
 
 class TaskDaoTest {
@@ -31,6 +36,8 @@ class TaskDaoTest {
     private TaskCategoryDao taskCategoryDao;
     private CategoryManager categoryManager;
     private TaskCategoryManager taskCategoryManager;
+    private DependencyManager dependencyManager;
+    private DependencyDao dependencyDao;
 
     @BeforeAll
     static void initTestDataSource() throws SQLException {
@@ -45,14 +52,17 @@ class TaskDaoTest {
         taskCategoryDao = new TaskCategoryDao(dataSource);
         taskDao = new TaskDao(dataSource, mock(SubTaskDao.class), mock(DependencyDao.class),
                 taskCategoryDao, categoryDao, mock(CategoryTimeDao.class));
+        dependencyDao = new DependencyDao(dataSource);
 
         taskManager = new TaskManager(dataSource);
         categoryManager = new CategoryManager(dataSource);
         taskCategoryManager = new TaskCategoryManager(dataSource);
+        dependencyManager = new DependencyManager(dataSource);
     }
 
     @AfterEach
     void cleanUp() {
+        dependencyManager.dropTable();
         taskCategoryManager.dropTable();
         categoryManager.dropTable();
         taskManager.dropTable();
@@ -71,6 +81,40 @@ class TaskDaoTest {
         assertThat(taskDao.getAll()).isEqualTo(tasks);
     }
 
+    @Test
+    void add_NewTasksWithCategoriesWithoutDependencies_TasksAdded() {
+        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);
+            setupCategories(task.getId());
+        }
+        assertThat(taskDao.getAll()).isEqualTo(tasks);
+    }
+
+    @Test
+    void add_NewTasksWithCategoriesAndDependencies_TasksAdded() {
+        var tasks = new LinkedList<Task>(Arrays.asList(
+                Task.builder("A", 10L, LocalDate.EPOCH).build(),
+                Task.builder("B", 10L, LocalDate.EPOCH).build()
+        ));
+        var dependencyTasks = new LinkedList<Task>();
+        for (var task :
+                tasks) {
+            taskDao.add(task);
+            setupCategories(task.getId());
+            dependencyTasks.addAll(setupDependencies(task.getId()));
+        }
+        var allTasks = new LinkedList<Task>();
+        allTasks.addAll(tasks);
+        allTasks.addAll(dependencyTasks);
+        assertThat(taskDao.getAll()).asList().contains(allTasks.toArray());
+        assertThat(allTasks.size()).isEqualTo(taskDao.getAll().size());
+    }
+
     @Test
     void getAll_ExistingTasksWithoutCategoryAndDependencies_AllTaskReturned() {
         var tasks = setupTasks();
@@ -92,6 +136,22 @@ class TaskDaoTest {
         assertThat(taskDao.getAll()).isEqualTo(tasks);
     }
 
+    @Test
+    void update_ChangedExistingTasksCategory_TaskUpdated() {
+        var tasks = setupTasks();
+        setupCategories(tasks.get(0).getId());
+        taskDao.update(tasks.get(0));
+        assertThat(taskDao.getAll()).isEqualTo(tasks);
+    }
+
+    @Test
+    void update_ChangedExistingTasksDependency_TaskUpdated() {
+        var tasks = setupTasks();
+        dependencyDao.addAssociationFor(tasks.get(0).getId(), tasks.get(1).getId());
+        taskDao.update(tasks.get(0));
+        assertThat(taskDao.getAll()).isEqualTo(tasks);
+    }
+
     @Test
     void delete_ExistingTask_TaskDeleted() {
         var tasks = setupTasks();
@@ -100,12 +160,19 @@ class TaskDaoTest {
         assertThat(taskDao.getAll()).isEqualTo(tasks);
     }
 
+    @Test
+    void delete_ExistingTaskWithDependencyAssociation_ExceptionThrown() {
+        var tasks = setupTasks();
+        dependencyDao.addAssociationFor(tasks.get(1).getId(), tasks.get(0).getId());
+        assertThrows(DataAccessException.class, () -> taskDao.delete(tasks.get(0)));
+    }
+
     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()
+                Task.builder("A Task", 10L, LocalDate.EPOCH).build(),
+                Task.builder("B Task", 10L, LocalDate.EPOCH).build(),
+                Task.builder("C Task", 10L, LocalDate.EPOCH).build(),
+                Task.builder("D Task", 10L, LocalDate.EPOCH).build()
         ));
         for (var task :
                 tasks) {
@@ -113,4 +180,30 @@ class TaskDaoTest {
         }
         return tasks;
     }
+
+    private void setupCategories(long taskId) {
+        var categories = new LinkedList<Category>(Arrays.asList(
+                new Category("A Category", Color.black),
+                new Category("B Category", Color.blue)
+        ));
+        for (var category :
+                categories) {
+            categoryDao.add(category);
+            taskCategoryDao.addAssociationFor(taskId, category.getId());
+        }
+    }
+
+    private LinkedList<Task> setupDependencies(long taskId) {
+        var tasks = new LinkedList<Task>(Arrays.asList(
+                Task.builder("A Dependency", 10L, LocalDate.EPOCH).build(),
+                Task.builder("B Dependency", 10L, LocalDate.EPOCH).build()
+        ));
+        for (var task :
+                tasks) {
+            taskDao.add(task);
+            dependencyDao.addAssociationFor(task.getId(), taskId);
+        }
+        return tasks;
+    }
+
 }
\ No newline at end of file
-- 
GitLab