Skip to content
Snippets Groups Projects
Commit 08b413a8 authored by Patrik Michal Vlcek's avatar Patrik Michal Vlcek
Browse files

implemented more unit tests

parent 9fe30006
No related branches found
No related tags found
2 merge requests!52Final project MR,!48Implement dao tests
Pipeline #
package cz.muni.fi.pv168.project.db.task; 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.Task;
import cz.muni.fi.pv168.project.data.task.TaskStatus; 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.CategoryDao;
import cz.muni.fi.pv168.project.db.category.CategoryManager; 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.categorytime.CategoryTimeDao;
import cz.muni.fi.pv168.project.db.dependency.DependencyDao; 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.subtask.SubTaskDao;
import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryDao; import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryDao;
import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryManager; import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryManager;
...@@ -15,12 +18,14 @@ import org.junit.jupiter.api.BeforeAll; ...@@ -15,12 +18,14 @@ import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.awt.Color;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
class TaskDaoTest { class TaskDaoTest {
...@@ -31,6 +36,8 @@ class TaskDaoTest { ...@@ -31,6 +36,8 @@ class TaskDaoTest {
private TaskCategoryDao taskCategoryDao; private TaskCategoryDao taskCategoryDao;
private CategoryManager categoryManager; private CategoryManager categoryManager;
private TaskCategoryManager taskCategoryManager; private TaskCategoryManager taskCategoryManager;
private DependencyManager dependencyManager;
private DependencyDao dependencyDao;
@BeforeAll @BeforeAll
static void initTestDataSource() throws SQLException { static void initTestDataSource() throws SQLException {
...@@ -45,14 +52,17 @@ class TaskDaoTest { ...@@ -45,14 +52,17 @@ class TaskDaoTest {
taskCategoryDao = new TaskCategoryDao(dataSource); taskCategoryDao = new TaskCategoryDao(dataSource);
taskDao = new TaskDao(dataSource, mock(SubTaskDao.class), mock(DependencyDao.class), taskDao = new TaskDao(dataSource, mock(SubTaskDao.class), mock(DependencyDao.class),
taskCategoryDao, categoryDao, mock(CategoryTimeDao.class)); taskCategoryDao, categoryDao, mock(CategoryTimeDao.class));
dependencyDao = new DependencyDao(dataSource);
taskManager = new TaskManager(dataSource); taskManager = new TaskManager(dataSource);
categoryManager = new CategoryManager(dataSource); categoryManager = new CategoryManager(dataSource);
taskCategoryManager = new TaskCategoryManager(dataSource); taskCategoryManager = new TaskCategoryManager(dataSource);
dependencyManager = new DependencyManager(dataSource);
} }
@AfterEach @AfterEach
void cleanUp() { void cleanUp() {
dependencyManager.dropTable();
taskCategoryManager.dropTable(); taskCategoryManager.dropTable();
categoryManager.dropTable(); categoryManager.dropTable();
taskManager.dropTable(); taskManager.dropTable();
...@@ -71,6 +81,40 @@ class TaskDaoTest { ...@@ -71,6 +81,40 @@ class TaskDaoTest {
assertThat(taskDao.getAll()).isEqualTo(tasks); 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 @Test
void getAll_ExistingTasksWithoutCategoryAndDependencies_AllTaskReturned() { void getAll_ExistingTasksWithoutCategoryAndDependencies_AllTaskReturned() {
var tasks = setupTasks(); var tasks = setupTasks();
...@@ -92,6 +136,22 @@ class TaskDaoTest { ...@@ -92,6 +136,22 @@ class TaskDaoTest {
assertThat(taskDao.getAll()).isEqualTo(tasks); 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 @Test
void delete_ExistingTask_TaskDeleted() { void delete_ExistingTask_TaskDeleted() {
var tasks = setupTasks(); var tasks = setupTasks();
...@@ -100,12 +160,19 @@ class TaskDaoTest { ...@@ -100,12 +160,19 @@ class TaskDaoTest {
assertThat(taskDao.getAll()).isEqualTo(tasks); 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() { private LinkedList<Task> setupTasks() {
var tasks = new LinkedList<Task>(Arrays.asList( var tasks = new LinkedList<Task>(Arrays.asList(
Task.builder("A", 10L, LocalDate.EPOCH).build(), Task.builder("A Task", 10L, LocalDate.EPOCH).build(),
Task.builder("B", 10L, LocalDate.EPOCH).build(), Task.builder("B Task", 10L, LocalDate.EPOCH).build(),
Task.builder("C", 10L, LocalDate.EPOCH).build(), Task.builder("C Task", 10L, LocalDate.EPOCH).build(),
Task.builder("D", 10L, LocalDate.EPOCH).build() Task.builder("D Task", 10L, LocalDate.EPOCH).build()
)); ));
for (var task : for (var task :
tasks) { tasks) {
...@@ -113,4 +180,30 @@ class TaskDaoTest { ...@@ -113,4 +180,30 @@ class TaskDaoTest {
} }
return tasks; 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment