From 68faaaaca2b298791942e918ade713010beb0b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:08:02 +0100 Subject: [PATCH 01/46] Add domain model draft --- domain-model.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 domain-model.md diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..f58fb412e --- /dev/null +++ b/domain-model.md @@ -0,0 +1,64 @@ +# Core + +## Class: TodoList + +| Method | Member Variable | Scenario | Result | +|-------------------------------------------------------|--------------------------------|------------------------------------------------------------|------------------------------------| +| boolean add(String name) | HashMap tasks | Task with the provided name is not already in the todolist | true | +| | | Task with the provided name is already in the todolist | false | +| | | | | +| String listTasks() | | There are tasks in the todolist | string with all tasks | +| | | There are no tasks in the todolist | string with error message | +| | | | | +| boolean updateTaskStatus(String name, Boolean status) | | There is a task with the provided name | true | +| | | There is no task with the provided name | false | +| | | | | +| String getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | +| | | There are no completed tasks in the todolist | string with error message | +| | | | | +| String getUnCompletedTasks() | | There are uncompleted tasks in the todolist | string with all uncompleted tasks | +| | | There are no uncompleted tasks in the todolist | string with error message | +| | | | | +| boolean searchTask(String name) | | There was a task with the provided name | true | +| | | There was no task with the provided name | false | +| | | | | +| boolean removeTask(String name) | | Task with the provided name is not in the todolist | false | +| | | Task with the provided name is in the todolist | true | +| | | | | +| taskDescending() | | There are tasks in the todolist | string in descending order by name | +| | | There are no tasks in the todolist | string with error message | +| | | | | +| taskAscending() | | There are tasks in the todolist | string in ascending order by name | +| | | There are no tasks in the todolist | string with error message | + +*Note: "error message" means something like "The list is empty".* + +# Extension + +## Todo + +| Method | Member Variable | Scenario | Result | +|----------------------------------------------|-----------------------|----------|--------| +| add(String name) | ArrayList tasks | | | +| | id | | | +| listTasks( ) | | | | +| updateTaskStatus(Task task, Boolean state) | | | | +| | | | | +| getCompletedTasks() | | | | +| getNotCompletedTasks() | | | | +| SearchTask(Task task) | | | | +| removeTask(Task task) | | | | +| taskDescending() | | | | +| taskAscending() | | | | +| getTaskById(int id) | | | | +| updateTaskName(int id, String newName) | | | | +| updateTaskStatusById(int id, Boolean status) | | | | +| | | | | + +## Task + +| Method | Member Variable | Scenario | Result | +|--------|------------------|----------|--------| +| | | | | +| | Boolean complete | | | +| | String name | | | \ No newline at end of file From 5af6ca9923fb1aba1a503c20c1c5a1e5ec872016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:10:39 +0100 Subject: [PATCH 02/46] Add test for adding a task --- src/test/java/com/booleanuk/core/TodoListTest.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..cbd3d4028 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -4,10 +4,16 @@ import org.junit.jupiter.api.Test; class TodoListTest { +// @Test +// public void exampleTest() { +// String hello = "Hello"; +// Assertions.assertEquals("Hello", hello); +// Assertions.assertNotEquals("Goodbye", hello); +// } @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void canAddTask() { + String name = "Study"; + TodoList todo = new TodoList(); + Assertions.assertTrue(todo.add(name)); } } From 261aacd1867d30b6be4976b12b24ed7ebd44835a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:12:20 +0100 Subject: [PATCH 03/46] Add method add() --- src/main/java/com/booleanuk/core/TodoList.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..b824d4b25 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,7 @@ package com.booleanuk.core; public class TodoList { - + public boolean add(String name) { + return true; + } } From 472fabb7e43dc1c81d71906f1500b62f409b09e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:13:44 +0100 Subject: [PATCH 04/46] Add test for adding duplicate tasks --- src/test/java/com/booleanuk/core/TodoListTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index cbd3d4028..727504959 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -16,4 +16,11 @@ public void canAddTask() { TodoList todo = new TodoList(); Assertions.assertTrue(todo.add(name)); } + + @Test + public void cannotAddDuplicateTasks() { + TodoList todo = new TodoList(); + todo.add("Study"); + Assertions.assertFalse(todo.add("Study")); + } } From 08b9cb6475fa3cb87d1a3acce731c720c97e2c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:16:35 +0100 Subject: [PATCH 05/46] Implement add() method --- src/main/java/com/booleanuk/core/TodoList.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index b824d4b25..ab81a47cd 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,7 +1,17 @@ package com.booleanuk.core; +import java.util.HashMap; +import java.util.Map; + public class TodoList { + Map todo = new HashMap<>(); + // + public boolean add(String name) { + if (this.todo.containsKey(name)) { + return false; + } + this.todo.put(name, false); return true; } } From 8f69b6e817ce444d4ad76c78eac4f6d81eced44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:19:15 +0100 Subject: [PATCH 06/46] Add test for listing empty todo list --- src/test/java/com/booleanuk/core/TodoListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 727504959..3ca913322 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -23,4 +23,10 @@ public void cannotAddDuplicateTasks() { todo.add("Study"); Assertions.assertFalse(todo.add("Study")); } + + @Test + public void emptyListShouldReturnError() { + TodoList todo = new TodoList(); + Assertions.assertEquals("There is nothing to do!", todo.listTasks()); + } } From 23d8c63b25067db9e010c2def54f7fbb5303bccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:19:56 +0100 Subject: [PATCH 07/46] Add trivial implementation of listTasks --- src/main/java/com/booleanuk/core/TodoList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index ab81a47cd..10e88a49d 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -14,4 +14,8 @@ public boolean add(String name) { this.todo.put(name, false); return true; } + + public String listTasks() { + return "There is nothing to do!"; + } } From 8aa68f49a3fc9bac9bfa804e3dfb572f6c4aeb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:24:00 +0100 Subject: [PATCH 08/46] Add test for listing multiple tasks --- .../java/com/booleanuk/core/TodoListTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 3ca913322..1aa0c489c 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -29,4 +29,19 @@ public void emptyListShouldReturnError() { TodoList todo = new TodoList(); Assertions.assertEquals("There is nothing to do!", todo.listTasks()); } + + @Test + public void nonemptyListShouldListAll() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertEquals( + """ + Study: uncompleted + Cook: uncompleted + Sleep: uncompleted""", + todo.listTasks() + ); + } } From 0f70d8a9b8fb712b72189c4c7397cbbf82983918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:36:56 +0100 Subject: [PATCH 09/46] Change test for listing multiple tasks so that it's predictable --- src/test/java/com/booleanuk/core/TodoListTest.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 1aa0c489c..fae70910d 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -36,12 +36,8 @@ public void nonemptyListShouldListAll() { todo.add("Study"); todo.add("Cook"); todo.add("Sleep"); - Assertions.assertEquals( - """ - Study: uncompleted - Cook: uncompleted - Sleep: uncompleted""", - todo.listTasks() - ); + Assertions.assertTrue(todo.listTasks().contains("Study: uncompleted")); + Assertions.assertTrue(todo.listTasks().contains("Cook: uncompleted")); + Assertions.assertTrue(todo.listTasks().contains("Sleep: uncompleted")); } } From 5885bb0deba0870162b96cc4e66d38a48af0d24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:37:22 +0100 Subject: [PATCH 10/46] Implement listTasks() to list all tasks with status --- src/main/java/com/booleanuk/core/TodoList.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 10e88a49d..29a138a41 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -16,6 +16,16 @@ public boolean add(String name) { } public String listTasks() { - return "There is nothing to do!"; + if (todo.isEmpty()) + return "There is nothing to do!"; + + StringBuilder sb = new StringBuilder(); + for (String s : todo.keySet()) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); } } From 593479f99fc5bed97c634bd5109a6112f0f4a8ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:41:48 +0100 Subject: [PATCH 11/46] Add test for updating tasks not in the todo list --- src/test/java/com/booleanuk/core/TodoListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index fae70910d..26549b267 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -40,4 +40,10 @@ public void nonemptyListShouldListAll() { Assertions.assertTrue(todo.listTasks().contains("Cook: uncompleted")); Assertions.assertTrue(todo.listTasks().contains("Sleep: uncompleted")); } + + @Test + public void updateNonexistentTask() { + TodoList todo = new TodoList(); + Assertions.assertFalse(todo.updateTaskStatus("Eat cake", true)); + } } From 91b801df1b2db80401750f732342941bd2041033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:44:20 +0100 Subject: [PATCH 12/46] Implement updateTaskStatus method --- src/main/java/com/booleanuk/core/TodoList.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 29a138a41..b69025085 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -28,4 +28,11 @@ public String listTasks() { } return sb.toString(); } + + public boolean updateTaskStatus(String name, boolean updatedStatus) { + if (!todo.containsKey(name)) + return false; + todo.replace(name, updatedStatus); + return true; + } } From 73226631142a876c661ed0730cf286a382fd4e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:47:11 +0100 Subject: [PATCH 13/46] Add test to make sure updating task completion works --- src/test/java/com/booleanuk/core/TodoListTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 26549b267..a0b67937c 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -46,4 +46,13 @@ public void updateNonexistentTask() { TodoList todo = new TodoList(); Assertions.assertFalse(todo.updateTaskStatus("Eat cake", true)); } + + @Test + public void updateTaskUpdatesTask() { + TodoList todo = new TodoList(); + todo.add("Study"); + Assertions.assertFalse(todo.todo.get("Study")); + Assertions.assertTrue(todo.updateTaskStatus("Study", true)); + Assertions.assertTrue(todo.todo.get("Study")); + } } From d869af7b6ce55d69a3469ccb0fb26a8c0ee86908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:49:23 +0100 Subject: [PATCH 14/46] Make class member todo private, adjust test accordingly --- src/main/java/com/booleanuk/core/TodoList.java | 8 +++++++- src/test/java/com/booleanuk/core/TodoListTest.java | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index b69025085..e74bf74ec 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -4,7 +4,7 @@ import java.util.Map; public class TodoList { - Map todo = new HashMap<>(); + private Map todo = new HashMap<>(); // public boolean add(String name) { @@ -35,4 +35,10 @@ public boolean updateTaskStatus(String name, boolean updatedStatus) { todo.replace(name, updatedStatus); return true; } + + public boolean getTaskStatus(String name) { + if (!todo.containsKey(name)) + return false; + return todo.get(name); + } } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index a0b67937c..a8c211c46 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -51,8 +51,8 @@ public void updateNonexistentTask() { public void updateTaskUpdatesTask() { TodoList todo = new TodoList(); todo.add("Study"); - Assertions.assertFalse(todo.todo.get("Study")); + Assertions.assertFalse(todo.getTaskStatus("Study")); Assertions.assertTrue(todo.updateTaskStatus("Study", true)); - Assertions.assertTrue(todo.todo.get("Study")); + Assertions.assertTrue(todo.getTaskStatus("Study")); } } From c3ce18649e42358c81554e2f65d84ace3e05819e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:52:05 +0100 Subject: [PATCH 15/46] Add test for searching for tasks --- src/test/java/com/booleanuk/core/TodoListTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index a8c211c46..44f1b7853 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -55,4 +55,16 @@ public void updateTaskUpdatesTask() { Assertions.assertTrue(todo.updateTaskStatus("Study", true)); Assertions.assertTrue(todo.getTaskStatus("Study")); } + + @Test + public void searchingWorksCorrectly() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertTrue(todo.searchTask("Study")); + Assertions.assertTrue(todo.searchTask("Cook")); + Assertions.assertTrue(todo.searchTask("Sleep")); + Assertions.assertFalse(todo.searchTask("Tidy")); + } } From baeb6202f897ceb386d457e5c2734da7e2f49a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:52:56 +0100 Subject: [PATCH 16/46] Implement search method --- src/main/java/com/booleanuk/core/TodoList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index e74bf74ec..84c03477c 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -41,4 +41,8 @@ public boolean getTaskStatus(String name) { return false; return todo.get(name); } + + public boolean searchTask(String name) { + return todo.containsKey(name); + } } From 6b709c18f92f88c686fb3ae07cad8f3e09ef5a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:53:56 +0100 Subject: [PATCH 17/46] Add test for removing non-existent tasks --- src/test/java/com/booleanuk/core/TodoListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 44f1b7853..57ae854a3 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -67,4 +67,10 @@ public void searchingWorksCorrectly() { Assertions.assertTrue(todo.searchTask("Sleep")); Assertions.assertFalse(todo.searchTask("Tidy")); } + + @Test + public void cannotRemoveNonexistent() { + TodoList todo = new TodoList(); + Assertions.assertFalse(todo.removeTask("Study")); + } } From 49f95b2d9e2fbb7dfa4091a9e0781e68c8ba8d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:54:52 +0100 Subject: [PATCH 18/46] Add method for removing tasks --- src/main/java/com/booleanuk/core/TodoList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 84c03477c..2f193edba 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -45,4 +45,8 @@ public boolean getTaskStatus(String name) { public boolean searchTask(String name) { return todo.containsKey(name); } + + public boolean removeTask(String name) { + return false; + } } From a15ae92ee1b89627d4502f5ad4d0e5f433f68715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:58:31 +0100 Subject: [PATCH 19/46] Add test for removing tasks from list --- src/test/java/com/booleanuk/core/TodoListTest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 57ae854a3..f41f5c50e 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -69,8 +69,16 @@ public void searchingWorksCorrectly() { } @Test - public void cannotRemoveNonexistent() { + public void cannotRemoveNonexistentTask() { TodoList todo = new TodoList(); Assertions.assertFalse(todo.removeTask("Study")); } + + @Test + public void removesTaskIfExists() { + TodoList todo = new TodoList(); + todo.add("Study"); + Assertions.assertTrue(todo.removeTask("Study")); + Assertions.assertFalse(todo.searchTask("Study")); + } } From e898b3487bab7c6623fd8aed282f110f0f504aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 14:58:50 +0100 Subject: [PATCH 20/46] Implement removeTask method --- src/main/java/com/booleanuk/core/TodoList.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 2f193edba..708703252 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -47,6 +47,10 @@ public boolean searchTask(String name) { } public boolean removeTask(String name) { - return false; + if (!todo.containsKey(name)) { + return false; + } + todo.remove(name); + return true; } } From 97676de4ddda24db580c0f87d8b454b046e8d92b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:08:22 +0100 Subject: [PATCH 21/46] Add method and test for listing descending tasks --- src/main/java/com/booleanuk/core/TodoList.java | 4 ++++ .../java/com/booleanuk/core/TodoListTest.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 708703252..7e9d3adf0 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -53,4 +53,8 @@ public boolean removeTask(String name) { todo.remove(name); return true; } + + public String taskDescending() { + return ""; + } } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index f41f5c50e..78821b7a7 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -81,4 +81,22 @@ public void removesTaskIfExists() { Assertions.assertTrue(todo.removeTask("Study")); Assertions.assertFalse(todo.searchTask("Study")); } + + @Test + public void tasksAreDescending() { + TodoList todo = new TodoList(); + todo.add("Cook"); + todo.add("Eat"); + todo.add("Tidy up"); + Assertions.assertEquals( + "Cook: uncompleted", + todo.taskDescending().split("\n")[0]); + Assertions.assertEquals( + "Eat: uncompleted", + todo.taskDescending().split("\n")[0]); + Assertions.assertEquals( + "Tidy up: uncompleted", + todo.taskDescending().split("\n")[0]); + + } } From 3776a9e11263f9b884b9902f786d6a73336a87d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:13:32 +0100 Subject: [PATCH 22/46] Implement method and test for listing descending tasks --- src/main/java/com/booleanuk/core/TodoList.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 7e9d3adf0..f7cfae3d7 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,7 +1,9 @@ package com.booleanuk.core; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Stream; public class TodoList { private Map todo = new HashMap<>(); @@ -55,6 +57,17 @@ public boolean removeTask(String name) { } public String taskDescending() { - return ""; + if (todo.isEmpty()) + return "There is nothing to do!"; + + List sortedKeys = todo.keySet().stream().sorted().toList(); + StringBuilder sb = new StringBuilder(); + for (String s : sortedKeys) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); } } From 1546934e4908781073b162031e28f663f17a9235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:14:40 +0100 Subject: [PATCH 23/46] Add method and test for listing ascending tasks --- .../java/com/booleanuk/core/TodoList.java | 6 +++++ .../java/com/booleanuk/core/TodoListTest.java | 22 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index f7cfae3d7..de0f431ca 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -70,4 +70,10 @@ public String taskDescending() { } return sb.toString(); } + + public String taskAscending() { + if (todo.isEmpty()) + return "There is nothing to do!"; + return ""; + } } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 78821b7a7..d0c0a2039 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; class TodoListTest { -// @Test + // @Test // public void exampleTest() { // String hello = "Hello"; // Assertions.assertEquals("Hello", hello); @@ -93,10 +93,26 @@ public void tasksAreDescending() { todo.taskDescending().split("\n")[0]); Assertions.assertEquals( "Eat: uncompleted", - todo.taskDescending().split("\n")[0]); + todo.taskDescending().split("\n")[1]); Assertions.assertEquals( "Tidy up: uncompleted", - todo.taskDescending().split("\n")[0]); + todo.taskDescending().split("\n")[2]); + } + @Test + public void tasksAreAscending() { + TodoList todo = new TodoList(); + todo.add("Cook"); + todo.add("Eat"); + todo.add("Tidy up"); + Assertions.assertEquals( + "Cook: uncompleted", + todo.taskAscending().split("\n")[2]); + Assertions.assertEquals( + "Eat: uncompleted", + todo.taskAscending().split("\n")[1]); + Assertions.assertEquals( + "Tidy up: uncompleted", + todo.taskAscending().split("\n")[0]); } } From b508034e219004eb97a0906f339c2b63bb2de8b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:16:09 +0100 Subject: [PATCH 24/46] Implement method for listing ascending tasks --- src/main/java/com/booleanuk/core/TodoList.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index de0f431ca..78c3f8ece 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -74,6 +74,15 @@ public String taskDescending() { public String taskAscending() { if (todo.isEmpty()) return "There is nothing to do!"; - return ""; + + List sortedKeys = todo.keySet().stream().sorted().toList().reversed(); + StringBuilder sb = new StringBuilder(); + for (String s : sortedKeys) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); } } From a9e2664c7cfbd7d62816f9477efadebb6a40230f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:16:37 +0100 Subject: [PATCH 25/46] Remove example test --- src/test/java/com/booleanuk/core/TodoListTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index d0c0a2039..f30f026da 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -4,12 +4,6 @@ import org.junit.jupiter.api.Test; class TodoListTest { - // @Test -// public void exampleTest() { -// String hello = "Hello"; -// Assertions.assertEquals("Hello", hello); -// Assertions.assertNotEquals("Goodbye", hello); -// } @Test public void canAddTask() { String name = "Study"; From ecf22dd4c205e2cd537fa2fda0e75b41cda410c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:17:43 +0100 Subject: [PATCH 26/46] Remove unused imports --- src/main/java/com/booleanuk/core/TodoList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 78c3f8ece..67f45aa2e 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -3,7 +3,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Stream; public class TodoList { private Map todo = new HashMap<>(); From 4bea65e9288c5ab06fd72f056c0c72f2607e771e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:45:54 +0100 Subject: [PATCH 27/46] Update domain model for extension --- domain-model.md | 62 +++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/domain-model.md b/domain-model.md index f58fb412e..5ccd21eec 100644 --- a/domain-model.md +++ b/domain-model.md @@ -35,30 +35,46 @@ # Extension -## Todo +## Class: TodoList -| Method | Member Variable | Scenario | Result | -|----------------------------------------------|-----------------------|----------|--------| -| add(String name) | ArrayList tasks | | | -| | id | | | -| listTasks( ) | | | | -| updateTaskStatus(Task task, Boolean state) | | | | -| | | | | -| getCompletedTasks() | | | | -| getNotCompletedTasks() | | | | -| SearchTask(Task task) | | | | -| removeTask(Task task) | | | | -| taskDescending() | | | | -| taskAscending() | | | | -| getTaskById(int id) | | | | -| updateTaskName(int id, String newName) | | | | -| updateTaskStatusById(int id, Boolean status) | | | | -| | | | | +| Method | Member Variable | Scenario | Result | +|-------------------------------------------------------|-----------------------------|------------------------------------------------------------|------------------------------------| +| boolean add(String name) | HashMap tasks | Task with the provided name is not already in the todolist | true | +| | | Task with the provided name is already in the todolist | false | +| | | | | +| String listTasks() | | There are tasks in the todolist | string with all tasks | +| | | There are no tasks in the todolist | string with error message | +| | | | | +| boolean updateTaskStatus(String name, Boolean status) | | There is a task with the provided name | true | +| | | There is no task with the provided name | false | +| | | | | +| String getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | +| | | There are no completed tasks in the todolist | string with error message | +| | | | | +| String getUnCompletedTasks() | | There are uncompleted tasks in the todolist | string with all uncompleted tasks | +| | | There are no uncompleted tasks in the todolist | string with error message | +| | | | | +| boolean searchTask(String name) | | There was a task with the provided name | true | +| | | There was no task with the provided name | false | +| | | | | +| boolean removeTask(String name) | | Task with the provided name is not in the todolist | false | +| | | Task with the provided name is in the todolist | true | +| | | | | +| taskDescending() | | There are tasks in the todolist | string in descending order by name | +| | | There are no tasks in the todolist | string with error message | +| | | | | +| taskAscending() | | There are tasks in the todolist | string in ascending order by name | +| | | There are no tasks in the todolist | string with error message | +| | | | | +| getTaskById(int id) | | Task with the given ID exists | return task object | +| | | Task with the given ID does not exist | return null | +| updateTaskName(int id, String newName) | | Task with ID exists/does not exist | return true/false | +| updateTaskStatusById(int id, Boolean status) | | Task with ID exists/does not exist | return true/false | ## Task -| Method | Member Variable | Scenario | Result | -|--------|------------------|----------|--------| -| | | | | -| | Boolean complete | | | -| | String name | | | \ No newline at end of file +| Method | Member Variable | Scenario | Result | +|--------|-------------------|----------|--------| +| | int id | | | +| | boolean completed | | | +| | String name | | | \ No newline at end of file From 85bcd98e0b8448ffca19d3e854094ffb94a17ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 15:47:16 +0100 Subject: [PATCH 28/46] Copy core files to use as base for extension --- .../com/booleanuk/extension/TodoList.java | 87 ++++++++++++++ .../com/booleanuk/extension/TodoListTest.java | 113 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 src/main/java/com/booleanuk/extension/TodoList.java create mode 100644 src/test/java/com/booleanuk/extension/TodoListTest.java 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..4f9ab90fe --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -0,0 +1,87 @@ +package com.booleanuk.extension; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TodoList { + private Map todo = new HashMap<>(); + // + + public boolean add(String name) { + if (this.todo.containsKey(name)) { + return false; + } + this.todo.put(name, false); + return true; + } + + public String listTasks() { + if (todo.isEmpty()) + return "There is nothing to do!"; + + StringBuilder sb = new StringBuilder(); + for (String s : todo.keySet()) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); + } + + public boolean updateTaskStatus(String name, boolean updatedStatus) { + if (!todo.containsKey(name)) + return false; + todo.replace(name, updatedStatus); + return true; + } + + public boolean getTaskStatus(String name) { + if (!todo.containsKey(name)) + return false; + return todo.get(name); + } + + public boolean searchTask(String name) { + return todo.containsKey(name); + } + + public boolean removeTask(String name) { + if (!todo.containsKey(name)) { + return false; + } + todo.remove(name); + return true; + } + + public String taskDescending() { + if (todo.isEmpty()) + return "There is nothing to do!"; + + List sortedKeys = todo.keySet().stream().sorted().toList(); + StringBuilder sb = new StringBuilder(); + for (String s : sortedKeys) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); + } + + public String taskAscending() { + if (todo.isEmpty()) + return "There is nothing to do!"; + + List sortedKeys = todo.keySet().stream().sorted().toList().reversed(); + StringBuilder sb = new StringBuilder(); + for (String s : sortedKeys) { + sb.append(s) + .append(": ") + .append(todo.get(s) ? "completed" : "uncompleted") + .append("\n"); + } + return sb.toString(); + } +} 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..fec592b0d --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -0,0 +1,113 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.TodoList; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TodoListTest { + @Test + public void canAddTask() { + String name = "Study"; + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + Assertions.assertTrue(todo.add(name)); + } + + @Test + public void cannotAddDuplicateTasks() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Study"); + Assertions.assertFalse(todo.add("Study")); + } + + @Test + public void emptyListShouldReturnError() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + Assertions.assertEquals("There is nothing to do!", todo.listTasks()); + } + + @Test + public void nonemptyListShouldListAll() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertTrue(todo.listTasks().contains("Study: uncompleted")); + Assertions.assertTrue(todo.listTasks().contains("Cook: uncompleted")); + Assertions.assertTrue(todo.listTasks().contains("Sleep: uncompleted")); + } + + @Test + public void updateNonexistentTask() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + Assertions.assertFalse(todo.updateTaskStatus("Eat cake", true)); + } + + @Test + public void updateTaskUpdatesTask() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Study"); + Assertions.assertFalse(todo.getTaskStatus("Study")); + Assertions.assertTrue(todo.updateTaskStatus("Study", true)); + Assertions.assertTrue(todo.getTaskStatus("Study")); + } + + @Test + public void searchingWorksCorrectly() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertTrue(todo.searchTask("Study")); + Assertions.assertTrue(todo.searchTask("Cook")); + Assertions.assertTrue(todo.searchTask("Sleep")); + Assertions.assertFalse(todo.searchTask("Tidy")); + } + + @Test + public void cannotRemoveNonexistentTask() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + Assertions.assertFalse(todo.removeTask("Study")); + } + + @Test + public void removesTaskIfExists() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Study"); + Assertions.assertTrue(todo.removeTask("Study")); + Assertions.assertFalse(todo.searchTask("Study")); + } + + @Test + public void tasksAreDescending() { + com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + todo.add("Cook"); + todo.add("Eat"); + todo.add("Tidy up"); + Assertions.assertEquals( + "Cook: uncompleted", + todo.taskDescending().split("\n")[0]); + Assertions.assertEquals( + "Eat: uncompleted", + todo.taskDescending().split("\n")[1]); + Assertions.assertEquals( + "Tidy up: uncompleted", + todo.taskDescending().split("\n")[2]); + } + + @Test + public void tasksAreAscending() { + com.booleanuk.core.TodoList todo = new TodoList(); + todo.add("Cook"); + todo.add("Eat"); + todo.add("Tidy up"); + Assertions.assertEquals( + "Cook: uncompleted", + todo.taskAscending().split("\n")[2]); + Assertions.assertEquals( + "Eat: uncompleted", + todo.taskAscending().split("\n")[1]); + Assertions.assertEquals( + "Tidy up: uncompleted", + todo.taskAscending().split("\n")[0]); + } +} From 50aaa946c2129c8e0e7ba170cd13798c65965c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:01:46 +0100 Subject: [PATCH 29/46] Add test for getting completed tasks, update domain model --- domain-model.md | 14 +++++++------- .../java/com/booleanuk/core/TodoListTest.java | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/domain-model.md b/domain-model.md index 5ccd21eec..2eb32c652 100644 --- a/domain-model.md +++ b/domain-model.md @@ -13,11 +13,11 @@ | boolean updateTaskStatus(String name, Boolean status) | | There is a task with the provided name | true | | | | There is no task with the provided name | false | | | | | | -| String getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | +| ArrayList getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | | | | There are no completed tasks in the todolist | string with error message | | | | | | -| String getUnCompletedTasks() | | There are uncompleted tasks in the todolist | string with all uncompleted tasks | -| | | There are no uncompleted tasks in the todolist | string with error message | +| ArrayList getUnCompletedTasks() | | There are uncompleted tasks in the todolist | List with all uncompleted tasks | +| | | There are no uncompleted tasks in the todolist | Empty list | | | | | | | boolean searchTask(String name) | | There was a task with the provided name | true | | | | There was no task with the provided name | false | @@ -48,11 +48,11 @@ | boolean updateTaskStatus(String name, Boolean status) | | There is a task with the provided name | true | | | | There is no task with the provided name | false | | | | | | -| String getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | +| ArrayList getCompletedTasks() | | There are completed tasks in the todolist | string with all completed tasks | | | | There are no completed tasks in the todolist | string with error message | | | | | | -| String getUnCompletedTasks() | | There are uncompleted tasks in the todolist | string with all uncompleted tasks | -| | | There are no uncompleted tasks in the todolist | string with error message | +| ArrayList getUnCompletedTasks() | | There are uncompleted tasks in the todolist | List with all uncompleted tasks | +| | | There are no uncompleted tasks in the todolist | Empty list | | | | | | | boolean searchTask(String name) | | There was a task with the provided name | true | | | | There was no task with the provided name | false | @@ -69,7 +69,7 @@ | getTaskById(int id) | | Task with the given ID exists | return task object | | | | Task with the given ID does not exist | return null | | updateTaskName(int id, String newName) | | Task with ID exists/does not exist | return true/false | -| updateTaskStatusById(int id, Boolean status) | | Task with ID exists/does not exist | return true/false | +| updateTaskStatusById(int id, Boolean status) | | Task with ID exists/does not exist | return true/false | ## Task diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index f30f026da..b466efec0 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; + class TodoListTest { @Test public void canAddTask() { @@ -109,4 +111,17 @@ public void tasksAreAscending() { "Tidy up: uncompleted", todo.taskAscending().split("\n")[0]); } + + @Test + public void onlyGettingCompletedTasks() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + todo.updateTaskStatus("Sleep", true); + ArrayList completedTasks = todo.getCompletedTasks(); + Assertions.assertTrue(completedTasks.contains("Sleep")); + Assertions.assertFalse(completedTasks.contains("Study")); + Assertions.assertFalse(completedTasks.contains("Cook")); + } } From cb23c53a65e81432e12ea8e93e6cebe4b3502634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:05:55 +0100 Subject: [PATCH 30/46] Implement getCompletedTasks --- src/main/java/com/booleanuk/core/TodoList.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 67f45aa2e..c3aa67221 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,6 @@ package com.booleanuk.core; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -84,4 +85,14 @@ public String taskAscending() { } return sb.toString(); } + + public ArrayList getCompletedTasks() { + ArrayList tasks = new ArrayList<>(); + for (String k : todo.keySet()) { + if (todo.get(k)) { + tasks.add(k); + } + } + return tasks; + } } From 3bc41571a34a69d1df3db4c42ad4d60def50396c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:09:13 +0100 Subject: [PATCH 31/46] Add test for and implement getCompletedTasks --- src/main/java/com/booleanuk/core/TodoList.java | 10 ++++++++++ src/test/java/com/booleanuk/core/TodoListTest.java | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index c3aa67221..0c79a0850 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -95,4 +95,14 @@ public ArrayList getCompletedTasks() { } return tasks; } + + public ArrayList getUncompletedTasks() { + ArrayList tasks = new ArrayList<>(); + for (String k : todo.keySet()) { + if (!todo.get(k)) { + tasks.add(k); + } + } + return tasks; + } } diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index b466efec0..5d51c77a6 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -124,4 +124,17 @@ public void onlyGettingCompletedTasks() { Assertions.assertFalse(completedTasks.contains("Study")); Assertions.assertFalse(completedTasks.contains("Cook")); } + + @Test + public void onlyGettingUncompletedTasks() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + todo.updateTaskStatus("Sleep", true); + ArrayList tasks = todo.getUncompletedTasks(); + Assertions.assertFalse(tasks.contains("Sleep")); + Assertions.assertTrue(tasks.contains("Study")); + Assertions.assertTrue(tasks.contains("Cook")); + } } From 1ae3b9ef473fcb8618944280bb6be523da3d3def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:24:39 +0100 Subject: [PATCH 32/46] Add some things I'd missed, add getTaskId to domain model, add test for ID of 1st task --- domain-model.md | 1 + .../com/booleanuk/extension/TodoList.java | 21 +++++++ .../com/booleanuk/extension/TodoListTest.java | 57 +++++++++++++++---- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/domain-model.md b/domain-model.md index 2eb32c652..9ef9ee1af 100644 --- a/domain-model.md +++ b/domain-model.md @@ -70,6 +70,7 @@ | | | Task with the given ID does not exist | return null | | updateTaskName(int id, String newName) | | Task with ID exists/does not exist | return true/false | | updateTaskStatusById(int id, Boolean status) | | Task with ID exists/does not exist | return true/false | +| getTaskId(String name) | | Task with name exists/does not exist | Return int/return -1 | ## Task diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 4f9ab90fe..f59745daa 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -1,5 +1,6 @@ package com.booleanuk.extension; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -84,4 +85,24 @@ public String taskAscending() { } return sb.toString(); } + + public ArrayList getCompletedTasks() { + ArrayList tasks = new ArrayList<>(); + for (String k : todo.keySet()) { + if (todo.get(k)) { + tasks.add(k); + } + } + return tasks; + } + + public ArrayList getUncompletedTasks() { + ArrayList tasks = new ArrayList<>(); + for (String k : todo.keySet()) { + if (!todo.get(k)) { + tasks.add(k); + } + } + return tasks; + } } diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index fec592b0d..82aec4150 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -1,33 +1,34 @@ package com.booleanuk.extension; -import com.booleanuk.core.TodoList; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; + class TodoListTest { @Test public void canAddTask() { String name = "Study"; - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); Assertions.assertTrue(todo.add(name)); } @Test public void cannotAddDuplicateTasks() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Study"); Assertions.assertFalse(todo.add("Study")); } @Test public void emptyListShouldReturnError() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); Assertions.assertEquals("There is nothing to do!", todo.listTasks()); } @Test public void nonemptyListShouldListAll() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Study"); todo.add("Cook"); todo.add("Sleep"); @@ -38,13 +39,13 @@ public void nonemptyListShouldListAll() { @Test public void updateNonexistentTask() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); Assertions.assertFalse(todo.updateTaskStatus("Eat cake", true)); } @Test public void updateTaskUpdatesTask() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Study"); Assertions.assertFalse(todo.getTaskStatus("Study")); Assertions.assertTrue(todo.updateTaskStatus("Study", true)); @@ -53,7 +54,7 @@ public void updateTaskUpdatesTask() { @Test public void searchingWorksCorrectly() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Study"); todo.add("Cook"); todo.add("Sleep"); @@ -65,13 +66,13 @@ public void searchingWorksCorrectly() { @Test public void cannotRemoveNonexistentTask() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); Assertions.assertFalse(todo.removeTask("Study")); } @Test public void removesTaskIfExists() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Study"); Assertions.assertTrue(todo.removeTask("Study")); Assertions.assertFalse(todo.searchTask("Study")); @@ -79,7 +80,7 @@ public void removesTaskIfExists() { @Test public void tasksAreDescending() { - com.booleanuk.core.TodoList todo = new com.booleanuk.core.TodoList(); + TodoList todo = new TodoList(); todo.add("Cook"); todo.add("Eat"); todo.add("Tidy up"); @@ -96,7 +97,7 @@ public void tasksAreDescending() { @Test public void tasksAreAscending() { - com.booleanuk.core.TodoList todo = new TodoList(); + TodoList todo = new TodoList(); todo.add("Cook"); todo.add("Eat"); todo.add("Tidy up"); @@ -110,4 +111,36 @@ public void tasksAreAscending() { "Tidy up: uncompleted", todo.taskAscending().split("\n")[0]); } + + @Test + public void onlyGettingCompletedTasks() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + todo.updateTaskStatus("Sleep", true); + ArrayList completedTasks = todo.getCompletedTasks(); + Assertions.assertTrue(completedTasks.contains("Sleep")); + Assertions.assertFalse(completedTasks.contains("Study")); + Assertions.assertFalse(completedTasks.contains("Cook")); + } + + @Test + public void onlyGettingUncompletedTasks() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + todo.updateTaskStatus("Sleep", true); + ArrayList tasks = todo.getUncompletedTasks(); + Assertions.assertFalse(tasks.contains("Sleep")); + Assertions.assertTrue(tasks.contains("Study")); + Assertions.assertTrue(tasks.contains("Cook")); + } + + public void firstTaskIdShouldBeZero() { + TodoList todo = new TodoList(); + todo.add("Drink coffee"); + Assertions.assertEquals(0, todo.getTaskId("Drink coffee")); + } } From d0bae3386a56984e51af9630870606999d13c9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:25:39 +0100 Subject: [PATCH 33/46] Add trivial method getTaskId --- src/main/java/com/booleanuk/extension/TodoList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index f59745daa..dcc360fee 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -105,4 +105,8 @@ public ArrayList getUncompletedTasks() { } return tasks; } + + public int getTaskId(String name) { + return 0; + } } From 97f3eb60ad4be989944ed722aee33c6c0200e943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:27:04 +0100 Subject: [PATCH 34/46] Add test for ID of 2nd item --- src/test/java/com/booleanuk/extension/TodoListTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index 82aec4150..ecb4f9fd1 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -138,9 +138,18 @@ public void onlyGettingUncompletedTasks() { Assertions.assertTrue(tasks.contains("Cook")); } + @Test public void firstTaskIdShouldBeZero() { TodoList todo = new TodoList(); todo.add("Drink coffee"); Assertions.assertEquals(0, todo.getTaskId("Drink coffee")); } + + @Test + public void sndTaskIdShouldBeOne() { + TodoList todo = new TodoList(); + todo.add("Drink coffee"); + todo.add("Start working"); + Assertions.assertEquals(1, todo.getTaskId("Start working")); + } } From dae499a2c7e5918539abb7fb5e48f976d8407ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:54:17 +0100 Subject: [PATCH 35/46] Add class Task --- .../java/com/booleanuk/extension/Task.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/com/booleanuk/extension/Task.java 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..23396636d --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -0,0 +1,38 @@ +package com.booleanuk.extension; + +public class Task { + private static int nextId = 0; + private int id; + private boolean completed; + private String name; + + public Task(String name) { + completed = false; + this.id = nextId; + nextId++; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean isCompleted() { + return completed; + } + + public void setCompleted(boolean completed) { + this.completed = completed; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} From 24835f074832970b743677c9d57ff832ae30f081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 16:55:02 +0100 Subject: [PATCH 36/46] Adjust ID tests so that they are actually possible, implement IDs in TodoList --- .../com/booleanuk/extension/TodoList.java | 23 +++++++++++-------- .../com/booleanuk/extension/TodoListTest.java | 10 ++++---- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index dcc360fee..994c41155 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -6,14 +6,14 @@ import java.util.Map; public class TodoList { - private Map todo = new HashMap<>(); + private Map todo = new HashMap<>(); // public boolean add(String name) { if (this.todo.containsKey(name)) { return false; } - this.todo.put(name, false); + this.todo.put(name, new Task(name)); return true; } @@ -25,7 +25,7 @@ public String listTasks() { for (String s : todo.keySet()) { sb.append(s) .append(": ") - .append(todo.get(s) ? "completed" : "uncompleted") + .append(todo.get(s).isCompleted() ? "completed" : "uncompleted") .append("\n"); } return sb.toString(); @@ -34,14 +34,14 @@ public String listTasks() { public boolean updateTaskStatus(String name, boolean updatedStatus) { if (!todo.containsKey(name)) return false; - todo.replace(name, updatedStatus); + todo.get(name).setCompleted(updatedStatus); return true; } public boolean getTaskStatus(String name) { if (!todo.containsKey(name)) return false; - return todo.get(name); + return todo.get(name).isCompleted(); } public boolean searchTask(String name) { @@ -65,7 +65,7 @@ public String taskDescending() { for (String s : sortedKeys) { sb.append(s) .append(": ") - .append(todo.get(s) ? "completed" : "uncompleted") + .append(todo.get(s).isCompleted() ? "completed" : "uncompleted") .append("\n"); } return sb.toString(); @@ -80,7 +80,7 @@ public String taskAscending() { for (String s : sortedKeys) { sb.append(s) .append(": ") - .append(todo.get(s) ? "completed" : "uncompleted") + .append(todo.get(s).isCompleted() ? "completed" : "uncompleted") .append("\n"); } return sb.toString(); @@ -89,7 +89,7 @@ public String taskAscending() { public ArrayList getCompletedTasks() { ArrayList tasks = new ArrayList<>(); for (String k : todo.keySet()) { - if (todo.get(k)) { + if (todo.get(k).isCompleted()) { tasks.add(k); } } @@ -99,7 +99,7 @@ public ArrayList getCompletedTasks() { public ArrayList getUncompletedTasks() { ArrayList tasks = new ArrayList<>(); for (String k : todo.keySet()) { - if (!todo.get(k)) { + if (!todo.get(k).isCompleted()) { tasks.add(k); } } @@ -107,6 +107,9 @@ public ArrayList getUncompletedTasks() { } public int getTaskId(String name) { - return 0; + if (!todo.containsKey(name)) { + return -1; + } + return todo.get(name).getId(); } } diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index ecb4f9fd1..df731883b 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -139,17 +139,19 @@ public void onlyGettingUncompletedTasks() { } @Test - public void firstTaskIdShouldBeZero() { + public void firstTaskIdShouldBeValid() { TodoList todo = new TodoList(); todo.add("Drink coffee"); - Assertions.assertEquals(0, todo.getTaskId("Drink coffee")); + Assertions.assertTrue(-1 < todo.getTaskId("Drink coffee")); } @Test - public void sndTaskIdShouldBeOne() { + public void sndTaskIdShouldBeGtr() { TodoList todo = new TodoList(); todo.add("Drink coffee"); todo.add("Start working"); - Assertions.assertEquals(1, todo.getTaskId("Start working")); + Assertions.assertTrue( + todo.getTaskId("Drink coffee") + < todo.getTaskId("Start working")); } } From 9ccdd0ed24e15411667c1aecabd8ca526b7b1ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 17:01:56 +0100 Subject: [PATCH 37/46] Add simple test for getting task by ID --- src/test/java/com/booleanuk/extension/TodoListTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index df731883b..f37f19caa 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -154,4 +154,13 @@ public void sndTaskIdShouldBeGtr() { todo.getTaskId("Drink coffee") < todo.getTaskId("Start working")); } + + @Test + public void getByIdReturnsRightTask() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertEquals("Study", todo.getTaskById(todo.getTaskId("Study"))); + } } From f974bc2f783b19402a899ddc019a3f8a70927088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:35:07 +0100 Subject: [PATCH 38/46] Implement getTaskById --- src/main/java/com/booleanuk/extension/TodoList.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 994c41155..6268a14b3 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -112,4 +112,13 @@ public int getTaskId(String name) { } return todo.get(name).getId(); } + + public String getTaskById(int id) { + for (String name : todo.keySet()) { + if (todo.get(name).getId() == id) { + return name; + } + } + return null; + } } From 39c90e38d8067bf10d712ea2f7887360ec6ee226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:36:52 +0100 Subject: [PATCH 39/46] Add test for trying to get ID of nonexistent tasks --- src/test/java/com/booleanuk/extension/TodoListTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index f37f19caa..4faa0b705 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -163,4 +163,13 @@ public void getByIdReturnsRightTask() { todo.add("Sleep"); Assertions.assertEquals("Study", todo.getTaskById(todo.getTaskId("Study"))); } + + @Test + public void getNonexistentTaskByIdShouldBeNull() { + TodoList todo = new TodoList(); + todo.add("Study"); + todo.add("Cook"); + todo.add("Sleep"); + Assertions.assertNull(todo.getTaskById(todo.getTaskId("Walk"))); + } } From 594ab1c675fce4c56bd91419f08e3f41825a37ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:42:35 +0100 Subject: [PATCH 40/46] Add test for updating name of nonexistent task --- src/test/java/com/booleanuk/extension/TodoListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index 4faa0b705..fd73c54d8 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -172,4 +172,10 @@ public void getNonexistentTaskByIdShouldBeNull() { todo.add("Sleep"); Assertions.assertNull(todo.getTaskById(todo.getTaskId("Walk"))); } + + @Test + public void updateNonexistenTaskName() { + TodoList todo = new TodoList(); + Assertions.assertFalse(todo.updateTaskName("Say hi")); + } } From 57c43d495b7fb4a2e1fb5a71d25a74550be1dbe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:43:17 +0100 Subject: [PATCH 41/46] Add method for updating task name --- src/main/java/com/booleanuk/extension/TodoList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 6268a14b3..6c80568ca 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -121,4 +121,8 @@ public String getTaskById(int id) { } return null; } + + public boolean updateTaskName(String newName) { + return false; + } } From c869877f5d1dbf147c9ec5102c3c34c084ddb721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:46:25 +0100 Subject: [PATCH 42/46] Add test to verify that task name is updated --- src/main/java/com/booleanuk/extension/TodoList.java | 2 +- .../java/com/booleanuk/extension/TodoListTest.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 6c80568ca..6e12a6d45 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -122,7 +122,7 @@ public String getTaskById(int id) { return null; } - public boolean updateTaskName(String newName) { + public boolean updateTaskName(int id, String newName) { return false; } } diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index fd73c54d8..3a4c8eb75 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -174,8 +174,17 @@ public void getNonexistentTaskByIdShouldBeNull() { } @Test - public void updateNonexistenTaskName() { + public void updateNonexistentTaskName() { TodoList todo = new TodoList(); - Assertions.assertFalse(todo.updateTaskName("Say hi")); + Assertions.assertFalse(todo.updateTaskName(0, "Say hi")); + } + + @Test + public void verifyUpdatedTaskName() { + TodoList todo = new TodoList(); + todo.add("Say hi"); + int id = todo.getTaskId("Say hi"); + todo.updateTaskName(id,"Say bye"); + Assertions.assertEquals("Say bye", todo.getTaskById(id)); } } From e069f49b95d93817a004dbb71f79181c24a2a73c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 21:59:04 +0100 Subject: [PATCH 43/46] Make sure task name is updated --- src/main/java/com/booleanuk/extension/Task.java | 1 + .../java/com/booleanuk/extension/TodoList.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/extension/Task.java b/src/main/java/com/booleanuk/extension/Task.java index 23396636d..9be675063 100644 --- a/src/main/java/com/booleanuk/extension/Task.java +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -10,6 +10,7 @@ public Task(String name) { completed = false; this.id = nextId; nextId++; + this.name = name; } public int getId() { diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 6e12a6d45..1ef973e87 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -123,6 +123,18 @@ public String getTaskById(int id) { } public boolean updateTaskName(int id, String newName) { - return false; + Task task = null; + boolean found = false; + for (String name : todo.keySet()) { + if (todo.get(name).getId() == id) { + task = todo.get(name); + found = true; + } + } + if (found) { + todo.remove(task.getName()); + todo.put(newName, task); + } + return found; } } From 3d378090a634e377e5c95a6a1084a440d0c9acde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 22:00:49 +0100 Subject: [PATCH 44/46] Add test for updating status of nonexistent task --- src/test/java/com/booleanuk/extension/TodoListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index 3a4c8eb75..9b8241396 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -187,4 +187,10 @@ public void verifyUpdatedTaskName() { todo.updateTaskName(id,"Say bye"); Assertions.assertEquals("Say bye", todo.getTaskById(id)); } + + @Test + public void updateNonexistentTaskStatus() { + TodoList todo = new TodoList(); + Assertions.assertFalse(todo.updateTaskStatusById(0, "Say hi")); + } } From dbe08b8f960cda01e0ff7e5b70c6a1a3245d2378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 22:09:37 +0100 Subject: [PATCH 45/46] Add test for verifying updating status by ID and fix updating name by ID --- .../java/com/booleanuk/extension/TodoList.java | 9 +++++++-- .../com/booleanuk/extension/TodoListTest.java | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index 1ef973e87..d80c0d3a0 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -113,10 +113,10 @@ public int getTaskId(String name) { return todo.get(name).getId(); } - public String getTaskById(int id) { + public Task getTaskById(int id) { for (String name : todo.keySet()) { if (todo.get(name).getId() == id) { - return name; + return todo.get(name); } } return null; @@ -128,6 +128,7 @@ public boolean updateTaskName(int id, String newName) { for (String name : todo.keySet()) { if (todo.get(name).getId() == id) { task = todo.get(name); + task.setName(newName); found = true; } } @@ -137,4 +138,8 @@ public boolean updateTaskName(int id, String newName) { } return found; } + + public boolean updateTaskStatusById(int id, boolean newStatus) { + return false; + } } diff --git a/src/test/java/com/booleanuk/extension/TodoListTest.java b/src/test/java/com/booleanuk/extension/TodoListTest.java index 9b8241396..f73533310 100644 --- a/src/test/java/com/booleanuk/extension/TodoListTest.java +++ b/src/test/java/com/booleanuk/extension/TodoListTest.java @@ -161,7 +161,7 @@ public void getByIdReturnsRightTask() { todo.add("Study"); todo.add("Cook"); todo.add("Sleep"); - Assertions.assertEquals("Study", todo.getTaskById(todo.getTaskId("Study"))); + Assertions.assertEquals("Study", todo.getTaskById(todo.getTaskId("Study")).getName()); } @Test @@ -185,12 +185,21 @@ public void verifyUpdatedTaskName() { todo.add("Say hi"); int id = todo.getTaskId("Say hi"); todo.updateTaskName(id,"Say bye"); - Assertions.assertEquals("Say bye", todo.getTaskById(id)); + Assertions.assertEquals("Say bye", todo.getTaskById(id).getName()); } @Test public void updateNonexistentTaskStatus() { TodoList todo = new TodoList(); - Assertions.assertFalse(todo.updateTaskStatusById(0, "Say hi")); + Assertions.assertFalse(todo.updateTaskStatusById(0, true)); + } + + @Test + public void verifyUpdatedTaskStatus() { + TodoList todo = new TodoList(); + todo.add("Write a todo list"); + int id = todo.getTaskId("Write a todo list"); + todo.updateTaskStatusById(id,true); + Assertions.assertTrue((todo.getTaskById(id).isCompleted())); } } From 7b128fa9a80a294b389432201461a1c322e341e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Sat, 11 Jan 2025 22:11:30 +0100 Subject: [PATCH 46/46] Add test for verifying updating status by ID and fix updating name by ID --- src/main/java/com/booleanuk/extension/TodoList.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/booleanuk/extension/TodoList.java b/src/main/java/com/booleanuk/extension/TodoList.java index d80c0d3a0..511f72018 100644 --- a/src/main/java/com/booleanuk/extension/TodoList.java +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -140,6 +140,12 @@ public boolean updateTaskName(int id, String newName) { } public boolean updateTaskStatusById(int id, boolean newStatus) { + for (String name : todo.keySet()) { + if (todo.get(name).getId() == id) { + todo.get(name).setCompleted(newStatus); + return true; + } + } return false; } }