diff --git a/src/main/java/com/booleanuk/core/Task.java b/src/main/java/com/booleanuk/core/Task.java new file mode 100644 index 000000000..c33793e1d --- /dev/null +++ b/src/main/java/com/booleanuk/core/Task.java @@ -0,0 +1,19 @@ +package com.booleanuk.core; + +public class Task { + String taskName; + boolean isCompeted; + + public Task(String taskName, boolean isCompeted) { + this.taskName = taskName; + this.isCompeted = isCompeted; + } + + public String getTaskName() { + return this.taskName; + } + + public boolean getIsCompleted() { + return this.isCompeted; + } +} diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..9afa8ae95 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,78 @@ package com.booleanuk.core; +import java.util.ArrayList; +import java.util.Collections; + public class TodoList { + ArrayList tasks = new ArrayList<>(); + + public boolean addTask(Task task) { + return tasks.add(task); + } + + public void printTasks() { + System.out.println("Current tasks:"); + for(Task task : this.tasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } + + public boolean changeStatus(Task task) { + if(!tasks.contains(task)) return false; + task.isCompeted = !task.isCompeted; + return true; + } + + public ArrayList getCompletedTasks() { + ArrayList completedTasks = new ArrayList<>(); + for(Task task : this.tasks) { + if(task.isCompeted) completedTasks.add(task); + } + return completedTasks; + } + + public ArrayList getIncompleteTasks() { + ArrayList incompleteTasks = new ArrayList<>(); + for(Task task : this.tasks) { + if(!task.isCompeted) incompleteTasks.add(task); + } + return incompleteTasks; + } + + public Task getTask(String taskName) { + for(Task task : this.tasks) { + if(task.taskName.equals(taskName)) return task; + } return null; + } + + public boolean removeTask(String taskName) { + for(Task task : this.tasks) { + if(task.taskName.equals(taskName)) { + this.tasks.remove(task); + return true; + } + } + return false; + } + + public void printTasksAscending() { + ArrayList sortedTasks = new ArrayList<>(this.tasks); + sortedTasks.sort(((o1, o2) -> o1.getTaskName().compareTo(o2.getTaskName()))); + System.out.println("All tasks (descending):"); + for(Task task : sortedTasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } + public void printTasksDescending() { + ArrayList sortedTasks = new ArrayList<>(this.tasks); + sortedTasks.sort(((o2, o1) -> o1.getTaskName().compareTo(o2.getTaskName()))); + System.out.println("All tasks (descending):"); + for(Task task : sortedTasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } } diff --git a/src/main/java/com/booleanuk/core/domain-model.md b/src/main/java/com/booleanuk/core/domain-model.md new file mode 100644 index 000000000..880f6ee6c --- /dev/null +++ b/src/main/java/com/booleanuk/core/domain-model.md @@ -0,0 +1,26 @@ +# Java ToDo List + +| Classes | Members | Methods | Scenarios | Outputs | +|----------|-----------------------|--------------------------------------|------------------------------------------------|---------------------------------| +| Task | String taskName | String getTaskName() | Returns name | this.taskName | +| | boolean isCompleted | boolean getIsCompleted() | Returns isCompleted | this.isCompleted | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| TodoList | ArrayList tasks | boolean addTask(Task task) | Successfully adds task at the end of tasks | true | +| | | | Is unable to add the task | false | +| | | void printTasks() | prints the list of tasks to the terminal | | +| | | boolean changeStatus(Task task) | The task exists in tasks and is updated | true | +| | | | The task does not exist and can't be updated | false | +| | | ArrayList getCompletedTasks() | Filters complete tasks in a new list | ArrayList completeTasks | +| | | ArrayList getIncompleteTasks() | Filters incomplete tasks in a new list | ArrayList incompleteTasks | +| | | Task getTask(String taskName) | Task exists and the user is informed | task | +| | | | Task doesn't exist, and the user is informed | null | +| | | boolean removeTask(String taskName) | Task exists, and is successfully deleted | true | +| | | | Task doesn't exists, and thus can't be deleted | false | +| | | void printTasksAscending() | prints tasks in ascending order | | +| | | void printTasksDescending() | prints tasks in descending order | | +| | | | | | +| | | | | | diff --git a/src/main/java/com/booleanuk/extension/Task.java b/src/main/java/com/booleanuk/extension/Task.java new file mode 100644 index 000000000..30f986084 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -0,0 +1,22 @@ +package com.booleanuk.extension; + +import java.util.UUID; + +public class Task { + String taskName; + boolean isCompeted; + UUID id = UUID.randomUUID(); + + public Task(String taskName, boolean isCompeted) { + this.taskName = taskName; + this.isCompeted = isCompeted; + } + + public String getTaskName() { + return this.taskName; + } + + public boolean getIsCompleted() { + return this.isCompeted; + } +} diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java new file mode 100644 index 000000000..54c212afa --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -0,0 +1,103 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.UUID; + +public class TodoList { + ArrayList tasks = new ArrayList<>(); + + public boolean addTask(Task task) { + return tasks.add(task); + } + + public void printTasks() { + System.out.println("Current tasks:"); + for(Task task : this.tasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } + + public boolean changeStatus(Task task) { + if(!tasks.contains(task)) return false; + task.isCompeted = !task.isCompeted; + return true; + } + + public ArrayList getCompletedTasks() { + ArrayList completedTasks = new ArrayList<>(); + for(Task task : this.tasks) { + if(task.isCompeted) completedTasks.add(task); + } + return completedTasks; + } + + public ArrayList getIncompleteTasks() { + ArrayList incompleteTasks = new ArrayList<>(); + for(Task task : this.tasks) { + if(!task.isCompeted) incompleteTasks.add(task); + } + return incompleteTasks; + } + + public Task getTask(String taskName) { + for(Task task : this.tasks) { + if(task.taskName.equals(taskName)) return task; + } return null; + } + + + public boolean removeTask(String taskName) { + for(Task task : this.tasks) { + if(task.taskName.equals(taskName)) { + this.tasks.remove(task); + return true; + } + } + return false; + } + + public void printTasksAscending() { + ArrayList sortedTasks = new ArrayList<>(this.tasks); + sortedTasks.sort(((o1, o2) -> o1.getTaskName().compareTo(o2.getTaskName()))); + System.out.println("All tasks (descending):"); + for(Task task : sortedTasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } + + public void printTasksDescending() { + ArrayList sortedTasks = new ArrayList<>(this.tasks); + sortedTasks.sort(((o2, o1) -> o1.getTaskName().compareTo(o2.getTaskName()))); + System.out.println("All tasks (descending):"); + for(Task task : sortedTasks) { + System.out.println(task.taskName + " : " + task.isCompeted); + } + System.out.println(); + } + + public Task getTaskByID(UUID id) { + for(Task task : this.tasks) { + if(task.id == id) return task; + } return null; + } + + public boolean updateTaskNameByID(UUID id, String newTaskName) { + for(Task task : this.tasks) { + if(task.id == id) { + task.taskName = newTaskName; // should have a setter-function + return true; + } + } return false; + } + + public boolean updateTaskStatusByID(UUID id, boolean status) { + for(Task task : this.tasks) { + if(task.id == id) { + task.isCompeted = status; // should have a setter-function + return true; + } + } return false; + } +} diff --git a/src/main/java/com/booleanuk/extension/domain-model.md b/src/main/java/com/booleanuk/extension/domain-model.md new file mode 100644 index 000000000..a0225175a --- /dev/null +++ b/src/main/java/com/booleanuk/extension/domain-model.md @@ -0,0 +1,31 @@ +# Java ToDo List + +| Classes | Members | Methods | Scenarios | Outputs | +|----------|-----------------------|----------------------------------------------------------------|------------------------------------------------|---------------------------------| +| Task | String taskName | String getTaskName() | Returns name | this.taskName | +| | boolean isCompleted | boolean getIsCompleted() | Returns isCompleted | this.isCompleted | +| | UUID id | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| TodoList | ArrayList tasks | boolean addTask(Task task) | Successfully adds task at the end of tasks | true | +| | | | Is unable to add the task | false | +| | | void printTasks() | prints the list of tasks to the terminal | | +| | | boolean changeStatus(Task task) | The task exists in tasks and is updated | true | +| | | | The task does not exist and can't be updated | false | +| | | ArrayList getCompletedTasks() | Filters complete tasks in a new list | ArrayList completeTasks | +| | | ArrayList getIncompleteTasks() | Filters incomplete tasks in a new list | ArrayList incompleteTasks | +| | | Task getTask(String taskName) | Task exists and the user is informed | task | +| | | | Task doesn't exist, and the user is informed | null | +| | | boolean removeTask(String taskName) | Task exists, and is successfully deleted | true | +| | | | Task doesn't exists, and thus can't be deleted | false | +| | | void printTasksAscending() | prints tasks in ascending order | | +| | | void printTasksDescending() | prints tasks in descending order | | +| | | public Task getTaskByID(UUID id) | Task is found and returned | true | +| | | | Task is not found | false | +| | | public boolean updateTaskNameByID(UUID id, String newTaskName) | Task is found and name is updated | true | +| | | | Task is not found | false | +| | | public boolean updateTaskStatusByID(UUID id, boolean status) | Task is found and status is updated | true | +| | | | Task is not found | false | +| | | | | | \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/TaskTest.java b/src/test/java/com/booleanuk/core/TaskTest.java new file mode 100644 index 000000000..61e2e215d --- /dev/null +++ b/src/test/java/com/booleanuk/core/TaskTest.java @@ -0,0 +1,31 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class TaskTest { + + @Test + public void getCorrectTaskNameTest() { + Task task = new Task("laundry", false); + Assertions.assertEquals("laundry", task.getTaskName()); + } + + @Test + public void getIncorrectTaskNameTest() { + Task task = new Task("laundry", false); + Assertions.assertNotEquals("shower", task.getTaskName()); + } + + @Test + public void getCorrectCompletedTest() { + Task task = new Task("laundry", false); + Assertions.assertEquals(false, task.getIsCompleted()); + } + + @Test + public void getIncorrectCompletedTest() { + Task task = new Task("laundry", false); + Assertions.assertNotEquals(true, task.getIsCompleted()); + } +} diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..be546d70b 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,109 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; + class TodoListTest { + + @Test + public void addTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + Assertions.assertTrue(todoList.addTask(newTask)); + } + + /*@Test + public void addTaskUnsuccessfullyTest() { + TodoList tasks = new TodoList(); + Task newTask = new Task("laundry", true); + Assertions.assertTrue(tasks.addTask(newTask)); + } + */ + + @Test + public void changeStatusSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + todoList.addTask(newTask); + Assertions.assertTrue(todoList.changeStatus(newTask)); + } + + @Test + public void changeStatusUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + todoList.addTask(newTask); + Assertions.assertFalse(todoList.changeStatus(new Task("swimming", false))); + } + + @Test + public void getCompletedTasksTest() { + TodoList todoList = new TodoList(); + Task task1 = new Task("laundry", true); + Task task2 = new Task("buy groceries", true); + Task task3 = new Task("running", false); + todoList.addTask(task1); + todoList.addTask(task2); + todoList.addTask(task3); + ArrayList completeTasks = new ArrayList<>() {{ + add(task1); + add(task2); + }}; + Assertions.assertIterableEquals(completeTasks, todoList.getCompletedTasks()); + } + + @Test + public void getIncompleteTasksTest() { + TodoList todoList = new TodoList(); + Task task1 = new Task("laundry", true); + Task task2 = new Task("buy groceries", false); + Task task3 = new Task("running", false); + todoList.addTask(task1); + todoList.addTask(task2); + todoList.addTask(task3); + ArrayList incompleteTasks = new ArrayList<>() {{ + add(task2); + add(task3); + }}; + Assertions.assertIterableEquals(incompleteTasks, todoList.getIncompleteTasks()); + } + + @Test + public void getTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + todoList.addTask(task); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertEquals(task.taskName, todoList.getTask("laundry").taskName); + Assertions.assertEquals(task.isCompeted, todoList.getTask("laundry").isCompeted); + } + + @Test + public void getTaskUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Task task = new Task("fishing", false); + Assertions.assertNotEquals(task, todoList.getTask("fishing")); + } + + @Test + public void removeTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertTrue(todoList.removeTask("laundry")); + } + @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void removeTaskUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertFalse(todoList.removeTask("fishing")); } } diff --git a/src/test/java/com/booleanuk/extension/TaskTest.java b/src/test/java/com/booleanuk/extension/TaskTest.java new file mode 100644 index 000000000..e761f8314 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TaskTest.java @@ -0,0 +1,30 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class TaskTest { + @Test + public void getCorrectTaskNameTest() { + Task task = new Task("laundry", false); + Assertions.assertEquals("laundry", task.getTaskName()); + } + + @Test + public void getIncorrectTaskNameTest() { + Task task = new Task("laundry", false); + Assertions.assertNotEquals("shower", task.getTaskName()); + } + + @Test + public void getCorrectCompletedTest() { + Task task = new Task("laundry", false); + Assertions.assertEquals(false, task.getIsCompleted()); + } + + @Test + public void getIncorrectCompletedTest() { + Task task = new Task("laundry", false); + Assertions.assertNotEquals(true, task.getIsCompleted()); + } +} diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java new file mode 100644 index 000000000..1fada2534 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -0,0 +1,146 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +class TodoListTest { + + @Test + public void addTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + Assertions.assertTrue(todoList.addTask(newTask)); + } + + /*@Test + public void addTaskUnsuccessfullyTest() { + TodoList tasks = new TodoList(); + Task newTask = new Task("laundry", true); + Assertions.assertTrue(tasks.addTask(newTask)); + } + */ + + @Test + public void changeStatusSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + todoList.addTask(newTask); + Assertions.assertTrue(todoList.changeStatus(newTask)); + } + + @Test + public void changeStatusUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + Task newTask = new Task("laundry", true); + todoList.addTask(newTask); + Assertions.assertFalse(todoList.changeStatus(new Task("swimming", false))); + } + + @Test + public void getCompletedTasksTest() { + TodoList todoList = new TodoList(); + Task task1 = new Task("laundry", true); + Task task2 = new Task("buy groceries", true); + Task task3 = new Task("running", false); + todoList.addTask(task1); + todoList.addTask(task2); + todoList.addTask(task3); + ArrayList completeTasks = new ArrayList<>() {{ + add(task1); + add(task2); + }}; + Assertions.assertIterableEquals(completeTasks, todoList.getCompletedTasks()); + } + + @Test + public void getIncompleteTasksTest() { + TodoList todoList = new TodoList(); + Task task1 = new Task("laundry", true); + Task task2 = new Task("buy groceries", false); + Task task3 = new Task("running", false); + todoList.addTask(task1); + todoList.addTask(task2); + todoList.addTask(task3); + ArrayList incompleteTasks = new ArrayList<>() {{ + add(task2); + add(task3); + }}; + Assertions.assertIterableEquals(incompleteTasks, todoList.getIncompleteTasks()); + } + + @Test + public void getTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + todoList.addTask(task); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertEquals(task.taskName, todoList.getTask("laundry").taskName); + Assertions.assertEquals(task.isCompeted, todoList.getTask("laundry").isCompeted); + } + + @Test + public void getTaskUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Task task = new Task("fishing", false); + Assertions.assertNotEquals(task, todoList.getTask("fishing")); + } + + @Test + public void removeTaskSuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertTrue(todoList.removeTask("laundry")); + } + + @Test + public void removeTaskUnsuccessfullyTest() { + TodoList todoList = new TodoList(); + todoList.addTask(new Task("laundry", true)); + todoList.addTask(new Task("running", false)); + todoList.addTask(new Task("buy groceries", false)); + Assertions.assertFalse(todoList.removeTask("fishing")); + } + + @Test + public void getCorrectTaskByIdTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + todoList.addTask(task); + Assertions.assertEquals(task, todoList.getTaskByID(task.id)); + } + + @Test + public void getIncorrectTaskByIdTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + Task task2 = new Task("fishing", false); + todoList.addTask(task); + Assertions.assertNull(todoList.getTaskByID(task2.id)); + } + + @Test + public void setTaskNameSuccessfullyByIdTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + todoList.addTask(task); + todoList.updateTaskNameByID(task.id, "Rowing"); + Assertions.assertEquals("Rowing", task.taskName); + } + + @Test + public void setStatusSuccessfullyByIdTest() { + TodoList todoList = new TodoList(); + Task task = new Task("laundry", true); + todoList.addTask(task); + todoList.updateTaskStatusByID(task.id, false); + Assertions.assertFalse(task.isCompeted); + } +}