diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..5431d8def --- /dev/null +++ b/domain-model.md @@ -0,0 +1,30 @@ + + # TodoList class + +| Members | Methods | Scenarios | Result | +|------------------------|--------------------------------------------------------|----------------------------------|-----------------------------| +| ArrayList\ tasks | boolean add(Task task) | Task is already in list | False | +| | | Task is not in list | True | +| | ArrayList\ viewTasks() | | Return entire todo list | +| | ArrayList\ viewIncompleteTasks() | | Return incomplete task list | +| | ArrayList\ viewCompleteTasks() | | Return complete task list | +| | Task searchTask(Task task) | Task not found | Return null + error message | +| | | Task found | Return task | +| | void removeTask(Task task) | Task to be removed doesn't exist | Do nothing | +| | | Task to be removed exists | Remove task from todo list | +| | ArrayList\ alphabeticallyAscView() | | Return sorted todo list | +| | ArrayList\ alphabeticallyDescView() | | Return sorted todo list | +| | void updateTaskNameByID(UUID uid, String newName) | Invalid ID or task doesn't exist | Do nothing | +| | | Valid ID and task exists | Update the task name | +| | void updateTaskStatusByID(UUID uid, boolean newStatus) | Invalid ID or task doesn't exist | Do nothing | +| | | Valid ID and task exists | Update the task status | +| | TaskExtension getTaskByID(UUID uid) | Invalid ID or task doesn't exist | Do nothing | +| | | Valid ID and task exists | Return the task by ID | + +# Task class + +| Members | Methods | Scenarios | Result | +|------------------|-----------------------------------|-----------------|-------------------------------| +| boolean complete | void changeStatus(boolean status) | status is true | Member complete becomes true | +| String name | | status is false | Member complete becomes false | +| UUID uid | | | | 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..974f9323b --- /dev/null +++ b/src/main/java/com/booleanuk/core/Task.java @@ -0,0 +1,16 @@ +package com.booleanuk.core; + +public class Task { + String name; + boolean complete; + + public Task(String name) { + this.name = name; + this.complete = false; + + } + + public void changeStatus(boolean status) { + this.complete = status; + } +} diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..3bb791ee5 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,77 @@ package com.booleanuk.core; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Comparator; + public class TodoList { + ArrayList tasks = new ArrayList<>(); + + + public boolean add(Task task) { + if (!tasks.contains(task)) { + tasks.add(task); + return true; + } + return false; + } + + public ArrayList viewTasks() { + return tasks; + } + + public ArrayList viewIncompleteTasks() { + ArrayList incomplete = new ArrayList<>(); + for (Task task : this.tasks) { + if (!task.complete) { + incomplete.add(task); + } + } + return incomplete; + } + + public ArrayList viewCompleteTasks() { + ArrayList complete = new ArrayList<>(); + for (Task task : this.tasks) { + if (task.complete) { + complete.add(task); + } + } + return complete; + } + + Task searchTask(Task task) { + if(tasks.contains(task)) { + return task; + } + System.out.println("Task not found!"); + return null; + } + + void removeTask(Task task) { + this.tasks.remove(task); + + } + + ArrayList alphabeticallyAscView() { + ArrayList results = new ArrayList<>(); + for (Task task : this.tasks) { + results.add(task.name); + + } + results.sort(null); + return results; + } + + ArrayList alphabeticallyDescView() { + ArrayList results = new ArrayList<>(); + for (Task task : this.tasks) { + results.add(task.name); + + } + results.sort(Comparator.reverseOrder()); + return results; + } + } diff --git a/src/main/java/com/booleanuk/extension/TaskExtension.java b/src/main/java/com/booleanuk/extension/TaskExtension.java new file mode 100644 index 000000000..e7c9fbecb --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TaskExtension.java @@ -0,0 +1,20 @@ +package com.booleanuk.extension; +import java.util.UUID; + +public class TaskExtension { + String name; + boolean complete; + UUID uid; + + public TaskExtension(String name) { + this.name = name; + this.complete = false; + this.uid = UUID.randomUUID(); + + } + + public void changeStatus(boolean status) { + this.complete = status; + } + +} diff --git a/src/main/java/com/booleanuk/extension/TodoListExtension.java b/src/main/java/com/booleanuk/extension/TodoListExtension.java new file mode 100644 index 000000000..c6c7f8410 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoListExtension.java @@ -0,0 +1,101 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.UUID; + +public class TodoListExtension { + + ArrayList tasks = new ArrayList<>(); + + + public boolean add(TaskExtension task) { + if (!tasks.contains(task)) { + tasks.add(task); + return true; + } + return false; + } + + public ArrayList viewTasks() { + return tasks; + } + + public ArrayList viewIncompleteTasks() { + ArrayList incomplete = new ArrayList<>(); + for (TaskExtension task : this.tasks) { + if (!task.complete) { + incomplete.add(task); + } + } + return incomplete; + } + + public ArrayList viewCompleteTasks() { + ArrayList complete = new ArrayList<>(); + for (TaskExtension task : this.tasks) { + if (task.complete) { + complete.add(task); + } + } + return complete; + } + + public TaskExtension searchTask(TaskExtension task) { + if(tasks.contains(task)) { + return task; + } + System.out.println("Task not found!"); + return null; + } + + public void removeTask(TaskExtension task) { + this.tasks.remove(task); + + } + + ArrayList alphabeticallyAscView() { + ArrayList names = new ArrayList<>(); + for (TaskExtension task : this.tasks) { + names.add(task.name); + + } + names.sort(null); + return names; + } + + ArrayList alphabeticallyDescView() { + ArrayList names = new ArrayList<>(); + for (TaskExtension task : this.tasks) { + names.add(task.name); + + } + names.sort(Comparator.reverseOrder()); + return names; + } + + public void updateTaskNameByID(UUID uid, String newName) { + for (TaskExtension task : this.tasks) { + if (task.uid == uid) { + task.name = newName; + } + } + } + + public void updateTaskStatusByID(UUID uid, boolean newStatus) { + for (TaskExtension task : this.tasks) { + if (task.uid == uid) { + task.changeStatus(newStatus); + } + } + } + + TaskExtension getTaskByID(UUID uid) { + for (TaskExtension task : this.tasks) { + if (task.uid == uid) { + return task; + } + } return null; + } + +} 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..28b6be030 --- /dev/null +++ b/src/test/java/com/booleanuk/core/TaskTest.java @@ -0,0 +1,18 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TaskTest { + @Test + public void testStatusChanges(){ + Task testTask = new Task("TestTask"); + testTask.changeStatus(true); + Assertions.assertTrue(testTask.complete); + testTask.changeStatus(false); + Assertions.assertFalse(testTask.complete); + } + + + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..77b31434c 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,116 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.lang.reflect.Array; +import java.util.ArrayList; + class TodoListTest { @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void checkForTaskInList() { + Task task = new Task("Test"); + TodoList todo = new TodoList(); + Assertions.assertTrue(todo.add(task)); + Assertions.assertFalse(todo.add(task)); + + } + + @Test + public void checkViewTask() { + Task task = new Task("Test"); + TodoList todo = new TodoList(); + ArrayList empty = new ArrayList<>(); + Assertions.assertIterableEquals(empty, todo.viewTasks()); + todo.add(task); + empty.add(task); + Assertions.assertIterableEquals(empty, todo.viewTasks()); + + } + + @Test + public void checkIncompleteTaskView() { + TodoList todo = new TodoList(); + Task taskIncomplete = new Task("Task incomplete"); + Task taskComplete = new Task("Task complete"); + taskComplete.changeStatus(true); + todo.add(taskIncomplete); + todo.add(taskComplete); + Assertions.assertNotEquals(todo.viewTasks(), todo.viewIncompleteTasks()); + } + + @Test + public void checkCompleteTaskView() { + TodoList todo = new TodoList(); + Task taskIncomplete = new Task("Task incomplete"); + Task taskComplete = new Task("Task complete"); + taskComplete.changeStatus(true); + todo.add(taskIncomplete); + todo.add(taskComplete); + Assertions.assertNotEquals(todo.viewTasks(), todo.viewCompleteTasks()); + } + + @Test + public void testSearchTaskName() { + TodoList todo = new TodoList(); + Task example = new Task("Example"); + + Assertions.assertNotEquals(example, todo.searchTask(example)); + todo.add(example); + + Assertions.assertEquals(example, todo.searchTask(example)); + + } + + @Test + public void testRemoveTask() { + TodoList todo = new TodoList(); + Task example = new Task("Example"); + Task example2 = new Task("Example2"); + + todo.add(example); + ArrayList tasks = todo.viewTasks(); + todo.removeTask(example2); + Assertions.assertEquals(tasks, todo.viewTasks()); + + todo.add(example2); + int tasks_size = todo.tasks.size(); + todo.removeTask(example2); + Assertions.assertNotEquals(todo.tasks.size(), tasks_size); + } + + @Test + public void testAscending() { + TodoList todo = new TodoList(); + Task a = new Task("A"); + Task z = new Task("Zebra"); + Task f = new Task("Fair"); + + todo.add(z); + todo.add(f); + todo.add(a); + + Assertions.assertNotEquals(todo.viewTasks().get(0).name, todo.alphabeticallyAscView().get(0)); + Assertions.assertEquals(todo.viewTasks().get(1).name, todo.alphabeticallyAscView().get(1)); + Assertions.assertNotEquals(todo.viewTasks().get(2).name, todo.alphabeticallyAscView().get(2)); + + } + + + @Test + public void testDescending() { + TodoList todo = new TodoList(); + Task a = new Task("A"); + Task z = new Task("Zebra"); + Task f = new Task("Fair"); + + todo.add(z); + todo.add(f); + todo.add(a); + + Assertions.assertEquals(todo.viewTasks().get(0).name, todo.alphabeticallyDescView().get(0)); + Assertions.assertEquals(todo.viewTasks().get(1).name, todo.alphabeticallyDescView().get(1)); + Assertions.assertEquals(todo.viewTasks().get(2).name, todo.alphabeticallyDescView().get(2)); + + } + } diff --git a/src/test/java/com/booleanuk/extension/TaskExtensionTest.java b/src/test/java/com/booleanuk/extension/TaskExtensionTest.java new file mode 100644 index 000000000..69f2c2e0e --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TaskExtensionTest.java @@ -0,0 +1,16 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TaskExtensionTest { + @Test + public void testStatusChanges(){ + TaskExtension testTask = new TaskExtension("TestTask"); + testTask.changeStatus(true); + Assertions.assertTrue(testTask.complete); + testTask.changeStatus(false); + Assertions.assertFalse(testTask.complete); + } + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/extension/TodoListExtensionTest.java b/src/test/java/com/booleanuk/extension/TodoListExtensionTest.java new file mode 100644 index 000000000..5203639b7 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListExtensionTest.java @@ -0,0 +1,150 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.UUID; + +class TodoListExtensionTest { + @Test + public void checkForTaskInList() { + TaskExtension task = new TaskExtension("Test"); + TodoListExtension todo = new TodoListExtension(); + Assertions.assertTrue(todo.add(task)); + Assertions.assertFalse(todo.add(task)); + + } + + @Test + public void checkViewTask() { + TaskExtension task = new TaskExtension("Test"); + TodoListExtension todo = new TodoListExtension(); + ArrayList empty = new ArrayList<>(); + Assertions.assertIterableEquals(empty, todo.viewTasks()); + todo.add(task); + empty.add(task); + Assertions.assertIterableEquals(empty, todo.viewTasks()); + + } + + @Test + public void checkIncompleteTaskView() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension taskIncomplete = new TaskExtension("Task incomplete"); + TaskExtension taskComplete = new TaskExtension("Task complete"); + taskComplete.changeStatus(true); + todo.add(taskIncomplete); + todo.add(taskComplete); + Assertions.assertNotEquals(todo.viewTasks(), todo.viewIncompleteTasks()); + } + + @Test + public void checkCompleteTaskView() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension taskIncomplete = new TaskExtension("Task incomplete"); + TaskExtension taskComplete = new TaskExtension("Task complete"); + taskComplete.changeStatus(true); + todo.add(taskIncomplete); + todo.add(taskComplete); + Assertions.assertNotEquals(todo.viewTasks(), todo.viewCompleteTasks()); + } + + @Test + public void testSearchTaskName() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension example = new TaskExtension("Example"); + + Assertions.assertNotEquals(example, todo.searchTask(example)); + todo.add(example); + + Assertions.assertEquals(example, todo.searchTask(example)); + + } + + @Test + public void testRemoveTask() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension example = new TaskExtension("Example"); + TaskExtension example2 = new TaskExtension("Example2"); + + todo.add(example); + ArrayList tasks = todo.viewTasks(); + todo.removeTask(example2); + Assertions.assertEquals(tasks, todo.viewTasks()); + + todo.add(example2); + int tasks_size = todo.tasks.size(); + todo.removeTask(example2); + Assertions.assertNotEquals(todo.tasks.size(), tasks_size); + + } + + @Test + public void testAscending() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension a = new TaskExtension("A"); + TaskExtension z = new TaskExtension("Zebra"); + TaskExtension f = new TaskExtension("Fair"); + + todo.add(z); + todo.add(f); + todo.add(a); + + Assertions.assertNotEquals(todo.viewTasks().get(0).name, todo.alphabeticallyAscView().get(0)); + Assertions.assertEquals(todo.viewTasks().get(1).name, todo.alphabeticallyAscView().get(1)); + Assertions.assertNotEquals(todo.viewTasks().get(2).name, todo.alphabeticallyAscView().get(2)); + + } + + + @Test + public void testDescending() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension a = new TaskExtension("A"); + TaskExtension z = new TaskExtension("Zebra"); + TaskExtension f = new TaskExtension("Fair"); + + todo.add(z); + todo.add(f); + todo.add(a); + + Assertions.assertEquals(todo.viewTasks().get(0).name, todo.alphabeticallyDescView().get(0)); + Assertions.assertEquals(todo.viewTasks().get(1).name, todo.alphabeticallyDescView().get(1)); + Assertions.assertEquals(todo.viewTasks().get(2).name, todo.alphabeticallyDescView().get(2)); + + } + + @Test + public void testUpdateName() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension task = new TaskExtension("Task1"); + UUID taskID = task.uid; + todo.add(task); + todo.updateTaskNameByID(taskID, "new Name"); + Assertions.assertEquals("new Name", task.name); + } + + @Test + public void testUpdateStatus() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension task = new TaskExtension("Task1"); + UUID taskID = task.uid; + todo.add(task); + todo.updateTaskStatusByID(taskID, true); + Assertions.assertTrue(task.complete); + todo.updateTaskStatusByID(taskID, false); + Assertions.assertFalse(task.complete); + } + + @Test + public void testGetTask() { + TodoListExtension todo = new TodoListExtension(); + TaskExtension task = new TaskExtension("Task1"); + UUID taskID = task.uid; + todo.add(task); + TaskExtension testTask = todo.getTaskByID(taskID); + Assertions.assertEquals(task, testTask); + } + +}