diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..3dd8677a5 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,20 @@ + +## Domain Model ## +| Classes | Members | Methods | Scenario | Outputs | +|--------------|-------------------------------------------------------------------|--------------------------------------|--------------------------------------------------------------------|-------------------------| +| **TodoList** | `hashMap tasks` (key: name, value: true or false | boolean `addTask(String name)` | If task with the provided name is nor in the to do list | `true` | +| | | | Task with the provided name is already in to do list` → do nothing | `false` | +| | | List getAll() | List that contains tasks | HashMap getCompleteTasks() | when tasks are completed, then get completed tasks with name | True | +| | | List getIncomplete | look for incomplete tasks and return them | True | +| | | List getIncomplete | All tasks completed or no tasks exist | empty List | +| | | String search(String name) | found | String | +| | | | not found | String | +| | | boolean remove(String name) | found --> delete | True | +| | | | not found --> delete | False | +| | | List sortedInAscendingOrder | Go through list and sort | String | +| | | List sortedInDescendingOrder | go through list and sort | String | + + diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..37573d98f 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,108 @@ package com.booleanuk.core; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; + public class TodoList { + HashMap tasks = new LinkedHashMap<>(); + + + public Boolean addTask(String name) { + if (name == null) + return false; + + String nTrim = name.trim(); + if (nTrim.isEmpty()) + return false; + + if (tasks.containsKey(nTrim)) + return false; + + + tasks.put(nTrim, false); + return true; + + } + + + + public ArrayList getTasks() { + return new ArrayList<>(tasks.keySet()); + } + + + + public Boolean changeStatus(String name) { + if (name == null) + return false; + String nTrim = name.trim(); + + if (nTrim.isEmpty()) + return false; + + Boolean status = tasks.get(nTrim); + if (status == null) + return false; + + tasks.put(nTrim, !status); + return true; + + } + + public ArrayList getCompletedTasks() { + ArrayList doneTasks = new ArrayList<>(); + for (HashMap.Entry entry : tasks.entrySet()) { + if (entry.getValue() == true) { + doneTasks.add(entry.getKey()); + } + + } + return doneTasks; + } + + public ArrayList getIncompleteTasks() { + ArrayList doneTasks = new ArrayList<>(); + for (HashMap.Entry entry : tasks.entrySet()) { + if (entry.getValue() == false) { + doneTasks.add(entry.getKey()); + } + } + return doneTasks; + } + + public String search(String name){ + String nTrim = name.trim(); + if (tasks.containsKey(nTrim)) { + return nTrim; + } + return "Task not found"; + } + + public boolean deleteTask(String name){ + if (name == null) { + return false; + } + String nTrim = name.trim(); + if (nTrim.isEmpty()) { + return false; + } + return tasks.remove(nTrim) != null; + } + + public ArrayList sortTasksAscOrder(){ + ArrayList sortedTasks = new ArrayList<>(tasks.keySet()); + Collections.sort(sortedTasks); + return sortedTasks; + } + + public ArrayList sortTasksDescOrder(){ + ArrayList sortedTasks = new ArrayList<>(tasks.keySet()); + sortedTasks.sort(Collections.reverseOrder()); + return sortedTasks; + } + + } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..3cb703219 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,143 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.HashMap; + class TodoListTest { + + @Test + public void addTaskWhenNewValidName() { + TodoList todo = new TodoList(); + boolean result = todo.addTask("Play football today"); + Assertions.assertTrue(result); + + + } + + @Test + public void getFalseIfDuplicate() { + TodoList todo = new TodoList(); + Assertions.assertTrue(todo.addTask("Play football today")); + Assertions.assertFalse(todo.addTask("Play football today")); + } + @Test + public void listAllTasks() { + TodoList todo = new TodoList(); + // add tasks into the TodoList + todo.addTask("buy milk"); + todo.addTask("buy cheese"); + todo.addTask("go and run"); + + ArrayList list = new ArrayList<>(); + list.add("buy milk"); + list.add("buy cheese"); + list.add("go and run"); + + Assertions.assertEquals(list, todo.getTasks()); + } + + @Test + public void changeStatusOfTask() { + TodoList todo = new TodoList(); + todo.addTask("buy cheese"); + Assertions.assertTrue(todo.changeStatus("buy cheese")); + Assertions.assertTrue(todo.getCompletedTasks().contains("buy cheese")); + + Assertions.assertTrue(todo.changeStatus("buy cheese")); + Assertions.assertTrue(todo.getIncompleteTasks().contains("buy cheese")); + + Assertions.assertFalse(todo.changeStatus("Play football today")); + Assertions.assertFalse(todo.changeStatus("Non existent task")); + + } + + @Test + public void getTaskByCompletion() { + TodoList todo = new TodoList(); + todo.addTask("run"); + todo.addTask("buy milk"); + todo.addTask("buy cheese"); + + todo.changeStatus("run"); + todo.changeStatus("buy milk"); + + ArrayList list = new ArrayList<>(); + list.add("run"); + list.add("buy milk"); + + Assertions.assertEquals(list, todo.getCompletedTasks()); + } + + @Test + public void getTasksByIncompletion() { + TodoList todo = new TodoList(); + todo.addTask("cut hair"); + todo.addTask("Write story"); + + Assertions.assertTrue(todo.changeStatus("Write story")); + + ArrayList list = new ArrayList<>(); + list.add("cut hair"); + + Assertions.assertEquals(list, todo.getIncompleteTasks()); + } + + @Test + public void searchForTasksAndReturnMessageIfTaskNotFound() { + TodoList todo = new TodoList(); + + todo.addTask("Go and run"); + todo.addTask("buy cheese"); + + String str = todo.search("clean table"); + Assertions.assertEquals("Task not found", str); + + + } + @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void deleteTaskIfFound() { + TodoList todo = new TodoList(); + todo.addTask("Go and run"); + todo.addTask("buy cheese"); + todo.addTask("buy food"); + + + Assertions.assertTrue(todo.deleteTask("buy food")); + Assertions.assertFalse(todo.getTasks().contains("buy food")); } + + @Test + public void sortedInAscendingOrder() { + TodoList todo = new TodoList(); + todo.addTask("C"); + todo.addTask("A"); + todo.addTask("B"); + + ArrayList list = new ArrayList<>(); + list.add("A"); + list.add("B"); + list.add("C"); + + Assertions.assertEquals(list, todo.sortTasksAscOrder()); + } + + @Test + public void sortedInDescendingOrder() { + TodoList todo = new TodoList(); + todo.addTask("A"); + todo.addTask("B"); + todo.addTask("C"); + + ArrayList list = new ArrayList<>(); + list.add("C"); + list.add("B"); + list.add("A"); + + Assertions.assertEquals(list, todo.sortTasksDescOrder()); + } + + } +