From 63a0b83450c97b1477413830809d9d55dbe85e99 Mon Sep 17 00:00:00 2001 From: Hanna Adenholm Date: Thu, 7 Aug 2025 13:40:27 +0200 Subject: [PATCH 1/2] Finished ex --- src/main/java/com/booleanuk/core/Task.java | 38 +++++++ .../java/com/booleanuk/core/TodoList.java | 59 +++++++++++ .../java/com/booleanuk/core/domain-model.md | 14 +++ .../java/com/booleanuk/core/TodoListTest.java | 100 +++++++++++++++++- 4 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Task.java create mode 100644 src/main/java/com/booleanuk/core/domain-model.md 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..d90c47d13 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Task.java @@ -0,0 +1,38 @@ +package com.booleanuk.core; + +public class Task { + private String description; + private boolean status; + + public Task(String description){ + this.description = description; + this.status = false; + } + + public Task(String description, boolean status){ + this.description = description; + this.status = status; + } + + public void toggleStatus(){ + status = !status; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + + public boolean getStatus() { + return status; + } + + public void setStatus(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 675adaf0b..e6dd756a1 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,64 @@ package com.booleanuk.core; +import java.util.ArrayList; +import java.util.List; + public class TodoList { + List tasks = new ArrayList<>(); + + public void add(String desc) { + tasks.add(new Task(desc)); + } + + public void add(String desc, boolean status) { + tasks.add(new Task(desc, status)); + } + + public List getTasks() { + return tasks; + } + + public List getCompleteTasks() { + List complete = new ArrayList<>(); + for(Task task: tasks){ + if (task.getStatus()) + complete.add(task); + } + return complete; + } + + public List getIncompleteTasks() { + List complete = new ArrayList<>(); + for(Task task: tasks){ + if (!task.getStatus()) + complete.add(task); + } + return complete; + } + + public Task search(String search) { + for(Task task: tasks){ + if (task.getDescription().equals(search)) + return task; + } + return null; + } + + public boolean remove(String description) { + Task task = search(description); + if (task == null) + return false; + tasks.remove(task); + return true; + } + + public List getAlphAsc() { + tasks.sort((a, b) -> a.getDescription().compareTo(b.getDescription())); + return tasks; + } + public List getAlphDesc() { + tasks.sort((a, b) -> b.getDescription().compareTo(a.getDescription())); + return tasks; + } } diff --git a/src/main/java/com/booleanuk/core/domain-model.md b/src/main/java/com/booleanuk/core/domain-model.md new file mode 100644 index 000000000..4418fda1e --- /dev/null +++ b/src/main/java/com/booleanuk/core/domain-model.md @@ -0,0 +1,14 @@ +| Class | Members | Method | Scenario | Output | +|----------|--------------------|----------------------------|---------------------|------------| +| TodoList | List tasks | add(String description) | | Void | +| | | getTasks() | | List | +| | | getCompleteTasks() | | List | +| | | getIncompleteTasks() | | List | +| | | search(String search) | Task exists | Task | +| | | | Task does not exist | null | +| | | remove(String description) | Task exists | True | +| | | | Task doesnt exist | False | +| | | getAlphAsc() | | List | +| | | getAlphDesc() | | List | +| Task | boolean status | toggleStatus() | | Void | +| | String description | | | | diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..4372c299a 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -5,9 +5,101 @@ class TodoListTest { @Test - public void exampleTest() { - String hello = "Hello"; - Assertions.assertEquals("Hello", hello); - Assertions.assertNotEquals("Goodbye", hello); + public void addTask() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + Assertions.assertEquals("Do dishes", todo.getTasks().getFirst().getDescription()); + } + + @Test + public void testToggleStatus() { + Task task = new Task("Do dishes"); + task.toggleStatus(); + Assertions.assertTrue(task.getStatus()); + } + + @Test + public void testToggleStatusFalse() { + Task task = new Task("Do dishes", true); + task.toggleStatus(); + Assertions.assertFalse(task.getStatus()); + } + + @Test + public void getCompleteTask() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals(1, todo.getCompleteTasks().size()); + } + + @Test + public void getinCompleteTask() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals(2, todo.getIncompleteTasks().size()); + } + + @Test + public void testSearch() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals("Do dishes", todo.search("Do dishes").getDescription()); + } + + @Test + public void testSearchNull() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals(null, todo.search("Play games")); + } + + @Test + public void testRemoving() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals(true, todo.remove("Do dishes")); + Assertions.assertEquals(2, todo.getTasks().size()); + } + + @Test + public void testRemovingNotExisting() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals(false, todo.remove("Play Games")); + Assertions.assertEquals(3, todo.getTasks().size()); + } + + @Test + public void testSortAsc() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals("Do dishes", todo.getAlphAsc().get(0).getDescription()); + Assertions.assertEquals("Do homework", todo.getAlphAsc().get(1).getDescription()); + Assertions.assertEquals("Do vacuuming", todo.getAlphAsc().get(2).getDescription()); + } + + @Test + public void testSortDesc() { + TodoList todo = new TodoList(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + todo.add("Do homework", true); + Assertions.assertEquals("Do dishes", todo.getAlphDesc().get(2).getDescription()); + Assertions.assertEquals("Do homework", todo.getAlphDesc().get(1).getDescription()); + Assertions.assertEquals("Do vacuuming", todo.getAlphDesc().get(0).getDescription()); } } From 6f0c10b7b68c13989025bd9463e316deafe5bb63 Mon Sep 17 00:00:00 2001 From: Hanna Adenholm Date: Thu, 7 Aug 2025 13:40:49 +0200 Subject: [PATCH 2/2] Finished extension --- .../java/com/booleanuk/extension/TaskExt.java | 54 +++++++++++ .../com/booleanuk/extension/TodoListExt.java | 90 +++++++++++++++++++ .../extension/domain-model-extension.md | 22 +++++ .../booleanuk/extension/TodoListExtTest.java | 62 +++++++++++++ 4 files changed, 228 insertions(+) create mode 100644 src/main/java/com/booleanuk/extension/TaskExt.java create mode 100644 src/main/java/com/booleanuk/extension/TodoListExt.java create mode 100644 src/main/java/com/booleanuk/extension/domain-model-extension.md create mode 100644 src/test/java/com/booleanuk/extension/TodoListExtTest.java diff --git a/src/main/java/com/booleanuk/extension/TaskExt.java b/src/main/java/com/booleanuk/extension/TaskExt.java new file mode 100644 index 000000000..cfd1770e9 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TaskExt.java @@ -0,0 +1,54 @@ +package com.booleanuk.extension; + +import java.text.SimpleDateFormat; +import java.util.UUID; + +public class TaskExt { + private String description; + private boolean status; + private final String id; + private final String timeStamp; + + public TaskExt(String description){ + this.description = description; + this.status = false; + this.timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date()); + this.id = UUID.randomUUID().toString(); + } + + public TaskExt(String description, boolean status){ + this.description = description; + this.status = status; + this.timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date()); + this.id = UUID.randomUUID().toString(); + } + + public void toggleStatus(){ + status = !status; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + + public boolean getStatus() { + return status; + } + + public void setStatus(boolean status) { + this.status = status; + } + + public String getTimeStamp() { + return timeStamp; + } + + public String getId() { + return id; + } +} diff --git a/src/main/java/com/booleanuk/extension/TodoListExt.java b/src/main/java/com/booleanuk/extension/TodoListExt.java new file mode 100644 index 000000000..9890b5a25 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoListExt.java @@ -0,0 +1,90 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.Task; + +import java.util.ArrayList; +import java.util.List; + +public class TodoListExt { + List tasks = new ArrayList<>(); + + public void add(String desc) { + tasks.add(new TaskExt(desc)); + } + + public void add(String desc, boolean status) { + tasks.add(new TaskExt(desc, status)); + } + + public List getTasks() { + return tasks; + } + + public List getCompleteTasks() { + List complete = new ArrayList<>(); + for(TaskExt task: tasks){ + if (task.getStatus()) + complete.add(task); + } + return complete; + } + + public List getIncompleteTasks() { + List complete = new ArrayList<>(); + for(TaskExt task: tasks){ + if (!task.getStatus()) + complete.add(task); + } + return complete; + } + + public TaskExt search(String search) { + for(TaskExt task: tasks){ + if (task.getDescription().equals(search)) + return task; + } + return null; + } + + public TaskExt searchById(String id) { + for(TaskExt task: tasks){ + if (task.getId().equals(id)) + return task; + } + return null; + } + + public boolean remove(String description) { + TaskExt task = search(description); + if (task == null) + return false; + tasks.remove(task); + return true; + } + + public List getAlphAsc() { + tasks.sort((a, b) -> a.getDescription().compareTo(b.getDescription())); + return tasks; + } + + public List getAlphDesc() { + tasks.sort((a, b) -> b.getDescription().compareTo(a.getDescription())); + return tasks; + } + + public boolean renameTask(String id, String newDesc) { + TaskExt task = searchById(id); + if (task == null) + return false; + task.setDescription(newDesc); + return true; + } + + public boolean changeTaskStatus(String id) { + TaskExt task = searchById(id); + if (task == null) + return false; + task.toggleStatus(); + return true; + } +} diff --git a/src/main/java/com/booleanuk/extension/domain-model-extension.md b/src/main/java/com/booleanuk/extension/domain-model-extension.md new file mode 100644 index 000000000..e8f9a6a27 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/domain-model-extension.md @@ -0,0 +1,22 @@ +| Class | Members | Method | Scenario | Output | +|----------|--------------------|------------------------------------|---------------------|------------| +| TodoList | List tasks | add(String description) | | Void | +| | | getTasks() | | List | +| | | getCompleteTasks() | | List | +| | | getIncompleteTasks() | | List | +| | | search(String search) | Task exists | Task | +| | | | Task does not exist | null | +| | | search(int id) | Task exists | Task | +| | | | Task does not exist | null | +| | | remove(String description) | Task exists | True | +| | | | Task doesnt exist | False | +| | | getAlphAsc() | | List | +| | | getAlphDesc() | | List | +| | | renameTask(int id, String newDesc) | Task exists | true | +| | | | Task doesnt exist | false | +| | | changeTaskStatus(int id) | Task exists | true | +| | | | Task doesnt exist | false | +| Task | boolean status | toggleStatus() | | Void | +| | int id | | | | +| | String description | | | | +| | String timestamp | | | | diff --git a/src/test/java/com/booleanuk/extension/TodoListExtTest.java b/src/test/java/com/booleanuk/extension/TodoListExtTest.java new file mode 100644 index 000000000..58b241929 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListExtTest.java @@ -0,0 +1,62 @@ +package com.booleanuk.extension; + + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class TodoListExtTest { + @Test + public void testIdIsCreated() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + Assertions.assertNotEquals("", todo.getTasks().getFirst().getId()); + } + + @Test + public void testIdIsUnique() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + Assertions.assertNotEquals(todo.search("Do dishes").getId(), todo.search("Do vacuuming").getId()); + } + + @Test + public void testUpdateName() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + String id = todo.search("Do dishes").getId(); + Assertions.assertTrue(todo.renameTask(id, "Play games")); + Assertions.assertEquals("Play games", todo.searchById(id).getDescription()); + } + + @Test + public void testUpdateNameWithWrongId() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + String id = todo.search("Do dishes").getId(); + Assertions.assertFalse(todo.renameTask("wrong id", "Play games")); + Assertions.assertEquals("Do dishes", todo.searchById(id).getDescription()); + } + + @Test + public void testUpdateStatus() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + String id = todo.search("Do dishes").getId(); + Assertions.assertTrue(todo.changeTaskStatus(id)); + Assertions.assertEquals(true, todo.searchById(id).getStatus()); + } + + @Test + public void testUpdateStatusWithWrongId() { + TodoListExt todo = new TodoListExt(); + todo.add("Do dishes"); + todo.add("Do vacuuming"); + String id = todo.search("Do dishes").getId(); + Assertions.assertFalse(todo.changeTaskStatus("wrong id")); + Assertions.assertEquals(false, todo.searchById(id).getStatus()); + } +}