From fd1ee93a616fafaabf272f90f63591b5d168275b Mon Sep 17 00:00:00 2001 From: Linda Do Date: Fri, 8 Aug 2025 09:16:20 +0200 Subject: [PATCH 1/3] test ok --- src/domain-model.md | 36 ++++ .../java/com/booleanuk/core/TodoList.java | 92 +++++++++ .../java/com/booleanuk/core/TodoListTest.java | 187 +++++++++++++++++- 3 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 src/domain-model.md diff --git a/src/domain-model.md b/src/domain-model.md new file mode 100644 index 000000000..1f79d794e --- /dev/null +++ b/src/domain-model.md @@ -0,0 +1,36 @@ + + +# User stories + +As a user I want to be able to: +- add tasks to my todo list. +- see all the tasks in my todo list. +- change the status of a task between incomplete and complete. +- to get only the complete tasks. +- to get only the incomplete tasks. +- search for a task and receive a message that says it wasn't found if it doesn't exist. +- remove tasks from my list. +- see all the tasks in my list ordered alphabetically in ascending order. +- see all the tasks in my list ordered alphabetically in descending order. + + +| Classes | Methods | Scenario | Output | +|----------|--------------------------------------------------------------------------------|-----------------------------------------------|--------------------------------------------| +| ToDoList | void addTask (Map<'String,String> toDoList, String task) | if task not in list | add task to toDoList | +| | | if task already in list | return false | +| | void printTask(Map<'String,String> toDoList) | if toDolist is empty | return false | +| | | if toDoList contains atleast one task | print task(s) in list | +| | void changeStatus(Map<'String,String> toDoList, String task) | if task in toDoList | change status | +| | | if task not in toDoList | return false | +| | List completeTasks(Map<'String,String> toDoList) | if toDoList contains completed tasks | return completed tasks | +| | | if toDoList does not contain completed tasks | return empty list | +| | List incompleteTasks(Map<'String,String> toDoList) | if toDoList contains incomplete tasks | return uncompleted tasks | +| | | if toDoList does not contain incomplete tasks | return empty list | +| | String searchTask(Map<'String,String> toDoList, String task) | if task does not exist | "The task was not found" | +| | | if task exist | return false | +| | void removeTask(Map<'String,String> toDoList, String task) | if task is in toDoList | remove task from toDoList | +| | | if task not in toDoList | return false | +| | Map ascendingList sortAscending(Map<'String,String> toDoList) | if toDoList not empty | return sorted toDoList in ascending order | +| | | if toDoList is empty | return empty list | +| | Map descendingList sortDescending(Map<'String,String> toDoList) | if toDoList not empty | return sorted toDoList in descending order | +| | | if toDoList empty | return empty list | \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..4da02f54b 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,97 @@ package com.booleanuk.core; +import java.util.*; + public class TodoList { + + public boolean addTask(Map toDoList, String task) { + if (!toDoList.containsKey(task)) { + toDoList.put(task, "Incomplete"); + return true; + } + return false; + } + + public boolean printTask(Map toDoList) { + if (!toDoList.isEmpty()){ + for(String key : toDoList.keySet()){ + System.out.println(key); + } + return true; + } + return false; + } + + public Boolean changeStatus(Map toDoList, String task) { + if (toDoList.containsKey(task)){ + if (Objects.equals(toDoList.get(task), "Completed")){ + toDoList.replace(task, "Incomplete"); + return true; + } else toDoList.replace(task, "Completed"); + return true; + } + return false; + } + + public List completeTasks(Map toDoList){ + List list = new ArrayList<>(); + for(String key: toDoList.keySet()){ + if(Objects.equals(toDoList.get(key), "Completed")){ + list.add(key); + } + } + return list; + } + public List inCompleteTasks(Map toDoList) { + List list = new ArrayList<>(); + for(String key: toDoList.keySet()){ + if(Objects.equals(toDoList.get(key), "Incomplete")){ + list.add(key); + } + } + return list; + } + + + public boolean searchTaskNotFound(Map toDoList, String task) { + if (!toDoList.containsKey(task)) { + System.out.println("The task was not found"); + return true; + } + return false; + } + + + + public boolean removeTask(Map toDoList, String task) { + if (toDoList.containsKey(task)) { + toDoList.remove(task); + return true; + } + return false; + } + + public Map sortAscending(Map toDoList) { + List sortedAscendingList = new ArrayList<>(toDoList.keySet()); + Collections.sort(sortedAscendingList); + Map sortedAscending = new HashMap<>(); + for(String key : sortedAscendingList){ + String value = toDoList.get(key); + sortedAscending.put(key, value); + } + return sortedAscending; + + } + + public Map sortDescending(Map toDoList) { + List sortedDescendingList = new ArrayList<>(toDoList.keySet()); + sortedDescendingList.sort(Collections.reverseOrder()); + Map sortedDescending = new TreeMap<>(Comparator.reverseOrder()); + for(String key : sortedDescendingList){ + String value = toDoList.get(key); + sortedDescending.put(key, value); + } + return sortedDescending; + } } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..e1fe2a8d6 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,11 +3,190 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.*; + class TodoListTest { + + @Test + public void addTaskToListFail() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Incomplete"); + + Assertions.assertFalse(todo.addTask(toDoList, "Task 1")); + } + + @Test + public void addTaskToList() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + + Assertions.assertTrue(todo.addTask(toDoList, "Task 1")); + Assertions.assertTrue(todo.addTask(toDoList, "Task 2")); + Assertions.assertTrue(todo.addTask(toDoList, "Task 3")); + Assertions.assertTrue(todo.addTask(toDoList, "Task 4")); + } + @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void printList(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Incomplete"); + + Assertions.assertTrue(todo.printTask(toDoList)); + } + + @Test + public void printEmptyList() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + Assertions.assertFalse(todo.printTask(toDoList)); + } + + @Test + public void changeStatusOfTaskInList() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Incomplete"); + + Assertions.assertEquals(true, todo.changeStatus(toDoList, "Task 1")); } + + @Test + public void changeStatusOfNonExistingTask() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + + Assertions.assertEquals(false, todo.changeStatus(toDoList, "Task 1")); + } + + @Test + public void completeTasksInList() { + TodoList todo = new TodoList(); + + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + toDoList.put("Task 2", "Incomplete"); + List list = new ArrayList<>(); + list.add("Task 1"); + + Assertions.assertEquals(list, todo.completeTasks(toDoList)); + } + + @Test + public void noCompleteTasks() { + TodoList todo = new TodoList(); + + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Incomplete"); + toDoList.put("Task 2", "Incomplete"); + List list = new ArrayList<>(); + + Assertions.assertEquals(list, todo.completeTasks(toDoList)); + } + + @Test + public void incompleteTasksInList() { + TodoList todo = new TodoList(); + + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + toDoList.put("Task 2", "Incomplete"); + List list = new ArrayList<>(); + list.add("Task 2"); + + Assertions.assertEquals(list, todo.inCompleteTasks(toDoList)); + } + + @Test + public void noIncompleteTasks() { + TodoList todo = new TodoList(); + + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + toDoList.put("Task 2", "Completed"); + List list = new ArrayList<>(); + + Assertions.assertEquals(list, todo.inCompleteTasks(toDoList)); + } + + @Test + public void searchTaskNotFoundSuccessful() { + TodoList todo = new TodoList(); + Map completeTask = new HashMap<>(); + + Assertions.assertTrue(todo.searchTaskNotFound(completeTask, "Task 1")); + } + + @Test + public void searchTaskNotFoundNoPrint() { + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + + Assertions.assertFalse(todo.searchTaskNotFound(toDoList, "Task 1")); + } + + @Test + public void removeTaskSuccessful(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + + Assertions.assertTrue(todo.removeTask(toDoList, "Task 1")); + } + + @Test + public void removeTaskUnsuccessful(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("Task 1", "Completed"); + + Assertions.assertFalse(todo.removeTask(toDoList, "Task 2")); + } + + @Test + public void sortedAscendingList(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("B", "Completed"); + toDoList.put("A", "Completed"); + toDoList.put("D", "Incomplete"); + toDoList.put("C", "Completed"); + Map toDoSortedAscending = todo.sortAscending(toDoList); + + Assertions.assertEquals("{A=Completed, B=Completed, C=Completed, D=Incomplete}", toDoSortedAscending.toString()); + } + + @Test + public void sortedAscendingListEmpty(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + + Assertions.assertEquals(toDoList, todo.sortAscending(toDoList)); + + } + @Test + public void sortedDescendingList(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + toDoList.put("B", "Completed"); + toDoList.put("A", "Completed"); + toDoList.put("D", "Incomplete"); + toDoList.put("C", "Completed"); + + Map toDoDescending = todo.sortDescending(toDoList); + Assertions.assertEquals("{D=Incomplete, C=Completed, B=Completed, A=Completed}", toDoDescending.toString()); + + } + + @Test + public void sortedDescendingListEmpty(){ + TodoList todo = new TodoList(); + Map toDoList = new HashMap<>(); + Assertions.assertEquals(toDoList, todo.sortDescending(toDoList)); + + } + + } From 1c4d5eaf5bcfd4a2487473ac5306e59fde1df62c Mon Sep 17 00:00:00 2001 From: Linda Do Date: Fri, 8 Aug 2025 09:24:20 +0200 Subject: [PATCH 2/3] test ok --- src/main/java/com/booleanuk/core/TodoList.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 4da02f54b..65e1a6f1a 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -75,7 +75,7 @@ public boolean removeTask(Map toDoList, String task) { public Map sortAscending(Map toDoList) { List sortedAscendingList = new ArrayList<>(toDoList.keySet()); Collections.sort(sortedAscendingList); - Map sortedAscending = new HashMap<>(); + Map sortedAscending = new TreeMap<>(); for(String key : sortedAscendingList){ String value = toDoList.get(key); sortedAscending.put(key, value); @@ -86,7 +86,6 @@ public Map sortAscending(Map toDoList) { public Map sortDescending(Map toDoList) { List sortedDescendingList = new ArrayList<>(toDoList.keySet()); - sortedDescendingList.sort(Collections.reverseOrder()); Map sortedDescending = new TreeMap<>(Comparator.reverseOrder()); for(String key : sortedDescendingList){ String value = toDoList.get(key); From c34ff857440ddb1ee6cd76c00628636b5c08b324 Mon Sep 17 00:00:00 2001 From: Linda Do Date: Fri, 8 Aug 2025 15:00:17 +0200 Subject: [PATCH 3/3] completed --- src/domain-model.md | 30 +++++++- .../java/com/booleanuk/extension/Task.java | 44 ++++++++++++ .../extension/TodoListExtension.java | 46 +++++++++++++ .../extension/TodoListExtensionTest.java | 69 +++++++++++++++++++ 4 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/booleanuk/extension/Task.java create mode 100644 src/main/java/com/booleanuk/extension/TodoListExtension.java create mode 100644 src/test/java/com/booleanuk/extension/TodoListExtensionTest.java diff --git a/src/domain-model.md b/src/domain-model.md index 1f79d794e..a37f278d9 100644 --- a/src/domain-model.md +++ b/src/domain-model.md @@ -33,4 +33,32 @@ As a user I want to be able to: | | Map ascendingList sortAscending(Map<'String,String> toDoList) | if toDoList not empty | return sorted toDoList in ascending order | | | | if toDoList is empty | return empty list | | | Map descendingList sortDescending(Map<'String,String> toDoList) | if toDoList not empty | return sorted toDoList in descending order | -| | | if toDoList empty | return empty list | \ No newline at end of file +| | | if toDoList empty | return empty list | + + +## User stories +- I want to be able to get a task by a unique ID. +- I want to update the name of a task by providing its ID and a new name. +- I want to be able to change the status of a task by providing its ID. +- I want to be able to see the date and time that I created each task. + + +| Classes | Methods | Scenario | Output | +|-------------------|--------------------------------------|-------------------------|----------------------| +| TodoListExtension | Task getTask(int id) | if task exist | return Task | +| | | if task not in list | return null | +| | void addTask(Task task) | if task not in list | add task to list | +| | | if task already in list | return false | +| | String getName(int id) | if task in list | return name | +| | | if task not in list | return empty string | +| | boolean changeStatus(id) | if task in list | update status | +| | | if task not in list | return false | +| ----------------- | ------------------------------------ | ----------------------- | -------------------- | +| Task | int getId() | if task exist | return id | +| | | if task not in list | return null | +| | String getName() | if task in list | return name | +| | boolean updateName(String s) | | update name | +| | | | | +| | boolean changeStatus( ) | if task exist | update status | +| | | | | +| | boolean getDate() | if task exist | return date and time | 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..6b18fdcdb --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -0,0 +1,44 @@ +package com.booleanuk.extension; + +import java.time.LocalDate; +import java.util.Objects; + +public class Task { + private static int counter = 0; + public final int id; + private String name; + private String status; + private LocalDate date; + + public Task(String name) { + this.id = ++counter; + this.name = name; + this.status = "Incomplete"; + this.date = LocalDate.now(); + } + + + public int getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public String updateName(String s) { + this.name = s; + return this.name; + } + + public boolean changeStatus() { + if(Objects.equals(this.status, "Incomplete")){ + this.status = "Completed"; + } else this.status = "Incomplete"; + return true; + } + + public LocalDate getDate() { + return this.date; + } +} 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..98f1d9800 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoListExtension.java @@ -0,0 +1,46 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.List; + +public class TodoListExtension { + List todoList = new ArrayList<>(); + + + public boolean addTask(Task task){ + if (!todoList.contains(task)){ + todoList.add(task); + return true; + } + return false; + + } + public Task getTask(int id){ + for(Task task : todoList){ + if (task.getId() == id){ + return task; + } + } + return null; + } + + public String getName(int id) { + for (Task task : todoList) { + if (task.getId() == id) { + return task.getName(); + } + } return ""; + } + + public boolean changeStatus(int id) { + for (Task task : todoList) { + if (task.getId() == id) { + task.changeStatus(); + return true; + } + } + return false; + } + + +} 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..e95622a50 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListExtensionTest.java @@ -0,0 +1,69 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + + +public class TodoListExtensionTest { + + @Test + public void getId(){ + Task task1 = new Task("Task 1"); + Task task2 = new Task("Task 2"); + + Assertions.assertTrue(task1.getId() != task2.getId()); + } + + @Test + public void getIdTaskNotExisting(){ + TodoListExtension todoList = new TodoListExtension(); + + Assertions.assertNull(todoList.getTask(100000)); + + } + + @Test + public void getNameok() { + TodoListExtension todoList = new TodoListExtension(); + Task task1 = new Task("Task 1"); + todoList.addTask(task1); + int id = task1.getId(); + Assertions.assertEquals("Task 1", todoList.getName(id)); + + } + + + @Test + public void changeNameOk(){ + Task task1 = new Task("Task 1"); + Assertions.assertEquals("Task 2", task1.updateName("Task 2")); + } + + + @Test + public void changeStatusOk() { + TodoListExtension todoList = new TodoListExtension(); + Task task1 = new Task("Task 1"); + todoList.addTask(task1); + int id = task1.getId(); + + Assertions.assertTrue(todoList.changeStatus(id)); + } + + @Test + public void changeStatusNotOk(){ + TodoListExtension todoList = new TodoListExtension(); + int id = 100000; + Assertions.assertFalse(todoList.changeStatus(id)); + } + + @Test + public void seeDateOk(){ + Task task1 = new Task("Task 1"); + LocalDate date = LocalDate.now(); + + Assertions.assertEquals(date, task1.getDate()); + } +}