From 20e2f20b1b341a5e2417d529badbcd06a550ec9a Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Thu, 7 Aug 2025 12:57:07 +0200 Subject: [PATCH 1/3] Domain model for exercise --- src/main/java/com/booleanuk/domain-model.md | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/com/booleanuk/domain-model.md diff --git a/src/main/java/com/booleanuk/domain-model.md b/src/main/java/com/booleanuk/domain-model.md new file mode 100644 index 000000000..e8651670e --- /dev/null +++ b/src/main/java/com/booleanuk/domain-model.md @@ -0,0 +1,41 @@ +# Supermarket + +--- ++ I want to add tasks to my todo list. ++ I want to see all the tasks in my todo list. ++ I want to change the status of a task between incomplete and complete. ++ I want to be able to get only the complete tasks. ++ I want to be able to get only the incomplete tasks. ++ I want to search for a task and receive a message that says it wasn't found if it doesn't exist. ++ I want to remove tasks from my list. ++ I want to see all the tasks in my list ordered alphabetically in ascending order. ++ I want to see all the tasks in my list ordered alphabetically in descending order. +--- +| Classes | Members | Methods | Scenario | Output | +|----------|----------------|---------------------------------------------|--------------------------|--------------------------------------| +| TodoList | | addTasks(String task) | valid parameter | task added to list of tasks | +| | | | invalid parameter (null) | no task added | +| | | seeAllTasks() | | return all tasks | +| | | changeStatus(String task, String newStatus) | valid parameter | status changed on given task | +| | | | invalid parameter (null) | no change made | +| | | getTaskBasedOnStatus(String status) | status = complete | return all complete tasks | +| | | | status = incomplete | return all incomplete tasks | +| | | searchForTask(String task) | task in map | return that task was found | +| | | | task not in map | return that task was not found | +| | | removeTask(String task) | if task in map | remove task from map | +| | | | if not in map | nothing happens | +| | | orderAllTaskAscOrder() | | returns all task in ascending order | +| | | orderAllTasksDescOrder() | | returns all task in descending order | +| Tasks | boolean status | | | | +| | String name | | | | +| | | changeStatus() | status is true | member status becomes true | +| | | changeStatus() | status is false | member status becomes false | + + + + + + + + + From d027c80b3d0f864d80012a75c3c7dd4a30459383 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Thu, 7 Aug 2025 12:59:42 +0200 Subject: [PATCH 2/3] Implementation of task functionality --- src/main/java/com/booleanuk/core/Task.java | 16 ++++++++++++++++ src/main/java/com/booleanuk/core/TodoList.java | 3 +++ .../java/com/booleanuk/core/TodoListTest.java | 14 ++++++++++---- 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Task.java 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..baced5f97 --- /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 status; + + public Task (String name) { + this.name = name; + this.status = false; // every new tasks default status is false/incomplete + } + + void changeStatus(boolean status) { + + } +} diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..d150ac3ba 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,8 @@ package com.booleanuk.core; +import java.util.ArrayList; +import java.util.List; + public class TodoList { } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..0c9a505d0 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,17 @@ 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 exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void testChangeOfStatus() { + Task task1 = new Task("Clean"); + + task1.changeStatus(false); + Assertions.assertEquals(false, task1.status); + task1.changeStatus(true); + Assertions.assertEquals(true, task1.status); } } From d95a8ba3e916d765b08aab2107682254fe457877 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Thu, 7 Aug 2025 17:00:41 +0200 Subject: [PATCH 3/3] Exercise completed --- src/main/java/com/booleanuk/core/Task.java | 2 +- .../java/com/booleanuk/core/TodoList.java | 71 +++++++++ src/main/java/com/booleanuk/domain-model.md | 38 ++--- .../java/com/booleanuk/core/TodoListTest.java | 140 ++++++++++++++++++ 4 files changed, 231 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Task.java b/src/main/java/com/booleanuk/core/Task.java index baced5f97..a78ec7ef2 100644 --- a/src/main/java/com/booleanuk/core/Task.java +++ b/src/main/java/com/booleanuk/core/Task.java @@ -11,6 +11,6 @@ public Task (String name) { } void changeStatus(boolean status) { - + this.status = status; } } diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index d150ac3ba..d4daf5728 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,8 +1,79 @@ package com.booleanuk.core; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class TodoList { + List taskList = new ArrayList<>(); + + public boolean addTask(Task tsk) { + if (taskList.contains(tsk)) { return false;} + else {taskList.add(tsk); return true;} + } + + + public List viewAllTasks() { + return taskList; + } + + public boolean changeStatusOfTasks(Task tsk, boolean newStatus) { + for (Task t: taskList) { + if (t == tsk && t.status != newStatus) { + t.status = newStatus; + return true; + } + } + return newStatus; + } + + public ArrayList getIncompleteTasks() { + ArrayList incompleteTasks = new ArrayList<>(); + for (Task t : taskList) { + if (t.status == false) { + incompleteTasks.add(t); + } + } + + return incompleteTasks; + } + + public ArrayList getCompleteTask() { + ArrayList incompleteTasks = new ArrayList<>(); + for (Task t : taskList) { + if (t.status == true) { + incompleteTasks.add(t); + } + } + + return incompleteTasks; + } + + public String checkIfTaskExists(Task tsk) { + if (!taskList.contains(tsk)) {return "Task does not exist";} + return "Task exists"; + } + + public boolean removeTask(Task tsk) { + if (taskList.contains(tsk)) { + taskList.remove(tsk); + return true; + } + return false; + } + + public List ascOrder() { + List orderedList = new ArrayList<>(List.copyOf(this.taskList)); + + orderedList.sort((a, b) -> {return a.name.compareTo(b.name);}); + return orderedList; + } + + public List descOrder() { + List orderedList = new ArrayList<>(List.copyOf(this.taskList)); + + orderedList.sort((a, b) -> {return b.name.compareTo(a.name);}); + return orderedList; + } } diff --git a/src/main/java/com/booleanuk/domain-model.md b/src/main/java/com/booleanuk/domain-model.md index e8651670e..922c7ba2a 100644 --- a/src/main/java/com/booleanuk/domain-model.md +++ b/src/main/java/com/booleanuk/domain-model.md @@ -11,25 +11,25 @@ + I want to see all the tasks in my list ordered alphabetically in ascending order. + I want to see all the tasks in my list ordered alphabetically in descending order. --- -| Classes | Members | Methods | Scenario | Output | -|----------|----------------|---------------------------------------------|--------------------------|--------------------------------------| -| TodoList | | addTasks(String task) | valid parameter | task added to list of tasks | -| | | | invalid parameter (null) | no task added | -| | | seeAllTasks() | | return all tasks | -| | | changeStatus(String task, String newStatus) | valid parameter | status changed on given task | -| | | | invalid parameter (null) | no change made | -| | | getTaskBasedOnStatus(String status) | status = complete | return all complete tasks | -| | | | status = incomplete | return all incomplete tasks | -| | | searchForTask(String task) | task in map | return that task was found | -| | | | task not in map | return that task was not found | -| | | removeTask(String task) | if task in map | remove task from map | -| | | | if not in map | nothing happens | -| | | orderAllTaskAscOrder() | | returns all task in ascending order | -| | | orderAllTasksDescOrder() | | returns all task in descending order | -| Tasks | boolean status | | | | -| | String name | | | | -| | | changeStatus() | status is true | member status becomes true | -| | | changeStatus() | status is false | member status becomes false | +| Classes | Members | Methods | Scenario | Output | +|----------|----------------|-----------------------------------------|--------------------------|--------------------------------------| +| TodoList | | addTasks(Task task) | valid parameter | task added to list of tasks | +| | | | invalid parameter (null) | no task added | +| | | seeAllTasks() | | return all tasks | +| | | changeStatus(Task task, boolean status) | valid parameter | status changed on given task | +| | | | invalid parameter (null) | no change made | +| | | getTaskBasedOnStatus(String status) | status = complete | return all complete tasks | +| | | | status = incomplete | return all incomplete tasks | +| | | searchForTask(Task task) | task in map | return that task was found | +| | | | task not in map | return that task was not found | +| | | removeTask(Task task) | if task in map | remove task from map | +| | | | if not in map | nothing happens | +| | | orderAllTaskAscOrder() | | returns all task in ascending order | +| | | orderAllTasksDescOrder() | | returns all task in descending order | +| Tasks | boolean status | | | | +| | String name | | | | +| | | changeStatus() | status is true | member status becomes true | +| | | changeStatus() | status is false | member status becomes false | diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0c9a505d0..92ef850cf 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.sql.SQLOutput; import java.util.ArrayList; import java.util.List; @@ -16,4 +17,143 @@ public void testChangeOfStatus() { task1.changeStatus(true); Assertions.assertEquals(true, task1.status); } + + @Test + public void testIfTaskIsAddedSuccessfully() { + Task task1 = new Task("Wash"); + TodoList lst = new TodoList(); + + Task task2 = new Task("Clean"); + lst.addTask(task2); + + Assertions.assertEquals(true, lst.addTask(task1)); + Assertions.assertEquals(false, lst.addTask(task1)); + Assertions.assertEquals(false, lst.addTask(task2)); + } + + @Test + public void testToSeeAllTasksInList() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + + ArrayList equalList = new ArrayList<>(); + equalList.add(task1); + equalList.add(task2); + + Assertions.assertIterableEquals(equalList,lst.viewAllTasks()); + } + + @Test + public void testChangeStatusOfTask() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + + lst.changeStatusOfTasks(task1, true); + lst.changeStatusOfTasks(task2, false); + + Assertions.assertEquals(true, lst.taskList.getFirst().status); + Assertions.assertEquals(false, lst.taskList.getLast().status); + } + + @Test + public void testRetrieveAllIncompleteTasks() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + + lst.changeStatusOfTasks(task1, false); + lst.changeStatusOfTasks(task2, true); + + Assertions.assertNotEquals(lst.viewAllTasks(), lst.getIncompleteTasks()); + } + + @Test + public void testRetrieveAllCompleteTasks() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + + lst.changeStatusOfTasks(task1, true); + lst.changeStatusOfTasks(task2, true); + + Assertions.assertEquals(lst.viewAllTasks(), lst.getCompleteTask()); + } + + @Test + public void testIfTaskExists() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + TodoList lst = new TodoList(); + lst.addTask(task1); + String exists = "Task exists"; + String notExists = "Task does not exists"; + + Assertions.assertEquals(exists, lst.checkIfTaskExists(task1)); + Assertions.assertNotEquals(notExists, lst.checkIfTaskExists(task2)); + } + + @Test + public void testRemoveTaskFromList() { + Task task1 = new Task("Clean"); + Task task2 = new Task("Wash"); + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + + ArrayList equalList = new ArrayList<>(); + equalList.add(task1); + equalList.add(task2); + + Assertions.assertEquals(equalList, lst.viewAllTasks()); + + lst.removeTask(task2); + Assertions.assertNotEquals(equalList, lst.viewAllTasks()); + } + + @Test + public void testAscSorted() { + Task task1 = new Task("aa"); + Task task2 = new Task ("ab"); + + TodoList lst = new TodoList(); + lst.addTask(task2); + lst.addTask(task1); + List sorted = lst.ascOrder(); + + Assertions.assertEquals(task2, sorted.getLast()); + Assertions.assertEquals(task1, sorted.getFirst()); + Assertions.assertNotEquals(task2, sorted.getFirst()); + Assertions.assertNotEquals(task1, sorted.getLast()); + + } + + @Test + public void testDescSorted() { + Task task1 = new Task("aa"); + Task task2 = new Task ("ab"); + + TodoList lst = new TodoList(); + lst.addTask(task1); + lst.addTask(task2); + List sorted = lst.descOrder(); + + Assertions.assertEquals(task2, sorted.getFirst()); + Assertions.assertNotEquals(task2, sorted.getLast()); + Assertions.assertEquals(task1, sorted.getLast()); + Assertions.assertNotEquals(task1, sorted.getFirst()); + } }