diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..4b21b66cc --- /dev/null +++ b/domain-model.md @@ -0,0 +1,27 @@ + +## Task Class + +| Methods | Variables | Scenario | Output | +|-------------------------|----------------------|-----------------------------|-----------------------| +| | `boolean completed ` | | | +| | `String name ` | | | +| `void completeTask() ` | | A task is completed | Set completed to true | +| `String getName() ` | | Want to fetch a task name | Return task name | +| `boolean getStatus() ` | | Want to fetch a task status | Return task status | +| | | | | + + +## ToDoList Class + +| Methods | Variables | Scenario | Output | +|-----------------------------------------|------------------------------|----------------------------------------------------|---------------------------------------------------------| +| | `ArrayList list ` | | | +| ` void addTask(Task task) ` | | Want to add a task to the ToDo List | Adds task to list | +| ` Arraylist seeAllTasks() ` | | Want to see all tasks in the list | Shows tasks in list | +| ` void changeStaus(Task task) ` | | Want to change status of existing task | Changes completed variable in chosen task | +| ` Arraylist getCompletedTasks() ` | | Want to get only completed tasks | Returns all completed tasks | +| ` Arraylist getInompleteTasks() ` | | Want to get only incomplete tasks | Returns all incomplete tasks | +| ` Task search(String taskName) ` | | Want to search for tasks | Searches for and returns task, and informs if not found | +| ` void removeTask(String taskName) ` | | Want to remove a task | removes task from list | +| ` Arraylist alphabeticalA() ` | | Want to see tasks in alphabetical ascending order | Shows tasks in alphabetical ascending order | +| ` Arraylist alphabeticalD() ` | | Want to see tasks in alphabetical descending order | Shows tasks in alphabetical descending order | \ No newline at end of file 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..97b3ee258 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Task.java @@ -0,0 +1,24 @@ +package com.booleanuk.core; + +public class Task { + + String name; + boolean completed; + + public Task(String name){ + this.name = name; + this.completed = false; + } + + public String getName(){ + return this.name; + } + + public boolean getStatus(){ + return this.completed; + } + + public void setStatus(boolean status){ + this.completed = status; + } +} diff --git a/src/main/java/com/booleanuk/core/ToDoList.java b/src/main/java/com/booleanuk/core/ToDoList.java new file mode 100644 index 000000000..652020f75 --- /dev/null +++ b/src/main/java/com/booleanuk/core/ToDoList.java @@ -0,0 +1,83 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.Collections; + +public class ToDoList { + + ArrayList tasks = new ArrayList<>(); + + public void addTask(Task task){ + if (!tasks.contains(task)){ + tasks.add(task); + } + } + + public void removeTask(String taskName){ + tasks.removeIf(task -> task.getName().equals(taskName)); + } + + public void changeStatus(Task task, boolean completed){ + if (tasks.contains(task)){ + task.setStatus(completed); + } + } + + public ArrayList seeAllTasks(){ + ArrayList showTasks = new ArrayList<>(); + for (int i = 0; i < tasks.size(); i++){ + showTasks.add(i, tasks.get(i).name); + } + return showTasks; + } + + public ArrayList getCompletedTasks(){ + ArrayList completedTasks = new ArrayList<>(); + for (Task task : tasks){ + if (task.completed){ + completedTasks.add(task); + } + } + return completedTasks; + } + + public ArrayList getIncompleteTasks(){ + ArrayList incompleteTasks = new ArrayList<>(); + for (Task task : tasks){ + if (!task.completed){ + incompleteTasks.add(task); + } + } + return incompleteTasks; + } + + public Task search(String taskName){ + for (Task task : tasks){ + if (task.name.equals(taskName)){ + return task; + } + } + System.out.println("The task was not found or does not exist!"); + return null; + } + + public ArrayList alphabeticalA(){ + ArrayList alphabeticalAscending = new ArrayList<>(); + for (Task task : tasks){ + alphabeticalAscending.add(task.name); + } + Collections.sort(alphabeticalAscending); + return alphabeticalAscending; + } + + public ArrayList alphabeticalD(){ + ArrayList alphabeticalDescending = new ArrayList<>(); + for (Task task : tasks){ + alphabeticalDescending.add(task.name); + } + Collections.sort(alphabeticalDescending); + Collections.reverse(alphabeticalDescending); + return alphabeticalDescending; + } + +} diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java deleted file mode 100644 index 675adaf0b..000000000 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.booleanuk.core; - -public class TodoList { - -} 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..688dff701 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -0,0 +1,37 @@ +package com.booleanuk.extension; + +public class Task { + + private static int counter = 0; + private final int id; + private String name; + private boolean completed; + + public Task(String name){ + this.name = name; + this.completed = false; + this.id = counter += 1; + } + + public int getId(){ + return this.id; + } + + public String getName(){ + return this.name; + } + + public void changeName(String newName){ + this.name = newName; + } + + public boolean getStatus(){ + return this.completed; + } + + public void setStatus(boolean status){ + this.completed = status; + } + + +} 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..c132ffee1 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/ToDoList.java @@ -0,0 +1,104 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.Collections; + +public class ToDoList { + + ArrayList tasks = new ArrayList<>(); + + public Task getTask(int id){ + for (Task task : tasks){ + if (task.getId() == id){ + return task; + } + } + System.out.println("No task with this ID!"); + return null; + } + + public void updateName(int id, String newName){ + for (Task task : tasks){ + if (task.getId() == id){ + task.changeName(newName); + } + } + System.out.println("No task with given ID!"); + } + + public void addTask(Task task){ + if (!tasks.contains(task)){ + tasks.add(task); + } + } + + public void removeTask(String taskName){ + tasks.removeIf(task -> task.getName().equals(taskName)); + } + + public void changeStatus(int id, boolean completed){ + for (Task task : tasks){ + if (task.getId() == id){ + task.setStatus(completed); + } + } + } + + public ArrayList seeAllTasks(){ + ArrayList showTasks = new ArrayList<>(); + for (int i = 0; i < tasks.size(); i++){ + showTasks.add(i, tasks.get(i).getName()); + } + return showTasks; + } + + public ArrayList getCompletedTasks(){ + ArrayList completedTasks = new ArrayList<>(); + for (Task task : tasks){ + if (task.getStatus()){ + completedTasks.add(task); + } + } + return completedTasks; + } + + public ArrayList getIncompleteTasks(){ + ArrayList incompleteTasks = new ArrayList<>(); + for (Task task : tasks){ + if (!task.getStatus()){ + incompleteTasks.add(task); + } + } + return incompleteTasks; + } + + public Task search(String taskName){ + for (Task task : tasks){ + if (task.getName().equals(taskName)){ + return task; + } + } + System.out.println("The task was not found or does not exist!"); + return null; + } + + public ArrayList alphabeticalA(){ + ArrayList alphabeticalAscending = new ArrayList<>(); + for (Task task : tasks){ + alphabeticalAscending.add(task.getName()); + } + Collections.sort(alphabeticalAscending); + return alphabeticalAscending; + } + + public ArrayList alphabeticalD(){ + ArrayList alphabeticalDescending = new ArrayList<>(); + for (Task task : tasks){ + alphabeticalDescending.add(task.getName()); + } + Collections.sort(alphabeticalDescending); + Collections.reverse(alphabeticalDescending); + return alphabeticalDescending; + } + +} \ 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..40d184edd --- /dev/null +++ b/src/test/java/com/booleanuk/core/TaskTest.java @@ -0,0 +1,51 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class TaskTest { + + @Test + public void testValidTask(){ + Task task = new Task("Code"); + + Assertions.assertFalse(task.name.isEmpty()); + Assertions.assertFalse(task.completed); + } + + @Test + public void testGetName(){ + Task task = new Task("Run"); + + String name = task.getName(); + Assertions.assertEquals("Run", name); + } + + @Test + public void testChangeStatusTrue(){ + Task task = new Task("Run"); + + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + } + + @Test + public void testChangeStatusFalse(){ + Task task = new Task("Run"); + + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + task.setStatus(false); + Assertions.assertFalse(task.getStatus()); + } + + @Test + public void testGetStatus(){ + Task task = new Task("Run"); + + Assertions.assertFalse(task.getStatus()); + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + } + +} diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..4b65da3ef 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,164 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; + class TodoListTest { + + @Test + public void testAddTask() { + ToDoList toDoList = new ToDoList(); + Task task = new Task("Swim"); + + toDoList.addTask(task); + Assertions.assertTrue(toDoList.tasks.contains(task)); + } + @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void testRemoveTask() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("Sing"); + Task task2 = new Task("Jump"); + toDoList.addTask(task1); + toDoList.addTask(task2); + + Assertions.assertTrue(toDoList.tasks.contains(task1)); + Assertions.assertTrue(toDoList.tasks.contains(task2)); + toDoList.removeTask("Jump"); + Assertions.assertFalse(toDoList.tasks.contains(task2)); + + } + + @Test + public void testSeeAllTask() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertEquals(List.of("a", "b", "c"), toDoList.seeAllTasks()); } + + @Test + public void testChangeStatus() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertFalse(task1.getStatus()); + Assertions.assertFalse(task2.getStatus()); + Assertions.assertFalse(task3.getStatus()); + toDoList.changeStatus(task2, true); + toDoList.changeStatus(task3, true); + Assertions.assertFalse(task1.getStatus()); + Assertions.assertTrue(task2.getStatus()); + Assertions.assertTrue(task3.getStatus()); + + } + + @Test + public void testGetCompletedTasks() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.changeStatus(task2, true); + toDoList.changeStatus(task3, true); + + Assertions.assertEquals(List.of(task2, task3), toDoList.getCompletedTasks()); + + } + + @Test + public void testGetIncompleteTasks() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + toDoList.changeStatus(task2, true); + toDoList.changeStatus(task3, true); + + Assertions.assertEquals(List.of(task1, task4), toDoList.getIncompleteTasks()); + + } + + @Test + public void testSearchExists() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Task searchedTask = toDoList.search("d"); + Assertions.assertEquals(task4, searchedTask); + } + + @Test + public void testSearchDoesntExists() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Task searchedTask = toDoList.search("e"); + Assertions.assertNull(searchedTask); + } + + @Test + public void testAlphabeticalA() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("d"); + Task task2 = new Task("c"); + Task task3 = new Task("b"); + Task task4 = new Task("a"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Assertions.assertEquals(List.of("a", "b", "c", "d"), toDoList.alphabeticalA()); + } + + @Test + public void testAlphabeticalD() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Assertions.assertEquals(List.of("d", "c", "b", "a"), toDoList.alphabeticalD()); + } + + } 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..25d39dc0e --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TaskTest.java @@ -0,0 +1,81 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; + +public class TaskTest { + + // Had to add this to reset static counter in between different tests + @BeforeEach + public void resetCounter() throws NoSuchFieldException, IllegalAccessException { + Field counterField = Task.class.getDeclaredField("counter"); + counterField.setAccessible(true); + counterField.set(null, 0); // Reset the static counter to 0 + } + + @Test + public void testGetId(){ + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + + Assertions.assertEquals(1, task1.getId()); + Assertions.assertEquals(2, task2.getId()); + Assertions.assertEquals(3, task3.getId()); + } + + @Test + public void testChangeName(){ + Task task = new Task("Code"); + Assertions.assertEquals("Code", task.getName()); + task.changeName("Jump"); + Assertions.assertEquals("Jump", task.getName()); + } + + @Test + public void testValidTask(){ + Task task = new Task("Code"); + + Assertions.assertFalse(task.getName().isEmpty()); + Assertions.assertFalse(task.getStatus()); + } + + @Test + public void testGetName(){ + Task task = new Task("Run"); + + String name = task.getName(); + Assertions.assertEquals("Run", name); + } + + @Test + public void testChangeStatusTrue(){ + Task task = new Task("Run"); + + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + } + + @Test + public void testChangeStatusFalse(){ + Task task = new Task("Run"); + + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + task.setStatus(false); + Assertions.assertFalse(task.getStatus()); + } + + @Test + public void testGetStatus(){ + Task task = new Task("Run"); + + Assertions.assertFalse(task.getStatus()); + task.setStatus(true); + Assertions.assertTrue(task.getStatus()); + } + +} \ No newline at end of file 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..6af2bf480 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/ToDoListTest.java @@ -0,0 +1,217 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.util.List; + +class TodoListTest { + + // Had to add this to reset static counter in between different tests + @BeforeEach + public void resetCounter() throws NoSuchFieldException, IllegalAccessException { + Field counterField = Task.class.getDeclaredField("counter"); + counterField.setAccessible(true); + counterField.set(null, 0); + } + + @Test + public void testAddTask() { + ToDoList toDoList = new ToDoList(); + Task task = new Task("Swim"); + + toDoList.addTask(task); + Assertions.assertTrue(toDoList.tasks.contains(task)); + } + + @Test + public void testGetTask(){ + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertEquals(task1, toDoList.getTask(1)); + Assertions.assertEquals(task2, toDoList.getTask(2)); + Assertions.assertEquals(task3, toDoList.getTask(3)); + } + + @Test + public void testUpdateName(){ + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertEquals("a", toDoList.getTask(1).getName()); + Assertions.assertEquals("b", toDoList.getTask(2).getName()); + Assertions.assertEquals("c", toDoList.getTask(3).getName()); + + toDoList.updateName(1, "x"); + toDoList.updateName(2, "y"); + toDoList.updateName(3, "z"); + Assertions.assertEquals("x", task1.getName()); + Assertions.assertEquals("y", task2.getName()); + Assertions.assertEquals("z", task3.getName()); + + } + + @Test + public void testRemoveTask() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("Sing"); + Task task2 = new Task("Jump"); + toDoList.addTask(task1); + toDoList.addTask(task2); + + Assertions.assertTrue(toDoList.tasks.contains(task1)); + Assertions.assertTrue(toDoList.tasks.contains(task2)); + toDoList.removeTask("Jump"); + Assertions.assertFalse(toDoList.tasks.contains(task2)); + + } + + @Test + public void testSeeAllTask() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertEquals(List.of("a", "b", "c"), toDoList.seeAllTasks()); + } + + @Test + public void testChangeStatusWithId() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + + Assertions.assertFalse(task1.getStatus()); + Assertions.assertFalse(task2.getStatus()); + Assertions.assertFalse(task3.getStatus()); + Assertions.assertEquals(2, task2.getId()); + Assertions.assertEquals(3, task3.getId()); + toDoList.changeStatus(2, true); + toDoList.changeStatus(3, true); + Assertions.assertFalse(task1.getStatus()); + Assertions.assertTrue(task2.getStatus()); + Assertions.assertTrue(task3.getStatus()); + + } + + @Test + public void testGetCompletedTasks() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + Assertions.assertEquals(2, task2.getId()); + Assertions.assertEquals(3, task3.getId()); + toDoList.changeStatus(2, true); + toDoList.changeStatus(3, true); + + Assertions.assertEquals(List.of(task2, task3), toDoList.getCompletedTasks()); + + } + + @Test + public void testGetIncompleteTasks() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + toDoList.changeStatus(2, true); + toDoList.changeStatus(3, true); + + Assertions.assertEquals(List.of(task1, task4), toDoList.getIncompleteTasks()); + + } + + @Test + public void testSearchExists() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Task searchedTask = toDoList.search("d"); + Assertions.assertEquals(task4, searchedTask); + } + + @Test + public void testSearchDoesntExists() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Task searchedTask = toDoList.search("e"); + Assertions.assertNull(searchedTask); + } + + @Test + public void testAlphabeticalA() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("d"); + Task task2 = new Task("c"); + Task task3 = new Task("b"); + Task task4 = new Task("a"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Assertions.assertEquals(List.of("a", "b", "c", "d"), toDoList.alphabeticalA()); + } + + @Test + public void testAlphabeticalD() { + ToDoList toDoList = new ToDoList(); + Task task1 = new Task("a"); + Task task2 = new Task("b"); + Task task3 = new Task("c"); + Task task4 = new Task("d"); + toDoList.addTask(task1); + toDoList.addTask(task2); + toDoList.addTask(task3); + toDoList.addTask(task4); + + Assertions.assertEquals(List.of("d", "c", "b", "a"), toDoList.alphabeticalD()); + } + +} +