diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..587ba9e6c --- /dev/null +++ b/domain-model.md @@ -0,0 +1,22 @@ +| Classes | Variables | Methods | Scenario | Outcomes | +|------------|-------------------------|------------------------------------------|------------------------------------------------------------------------------------|---------------------------------------------------------------------| +| `TodoList` | `ArrayList tasks` | `add(Task task)` | I want to add tasks to my todo list. | task is added to tasks and return confirmation print | +| | | `seeTasks()` | I want to see all the tasks in my todo list. | Return print of elements in task | +| | | `changeStatus(Task task)` | Change status of task in tasks | Change completed and return completed | +| | | `seeTasksCompleted()` | I want to be able to get only the complete tasks. | Return print of completed elements in task | +| | | `seeTasksIncomplete()` | I want to be able to get only the incomplete tasks. | Return print of incomplete elements in task | +| | | `search(String task)` | Search for task in tasks | Return print of status | +| | | | Search for task not in tasks | Return not found print | +| | | `remove(Task task)` | Remove task in tasks | Return confirmation print | +| | | | Remove task not in tasks | Return not found print | +| | | `seeTasksAscending()` | I want to see all the tasks in my list ordered alphabetically in ascending order. | Return print of elements in task in alphabetically ascending order | +| | | `seeTasksDescending()` | I want to see all the tasks in my list ordered alphabetically in descending order. | Return print of elements in task in alphabetically descending order | +| | | `getTaskById(String id)` | I want to be able to get a task by a unique ID. | Return task | +| | | `setNameById(String id, String newName)` | I want to update the name of a task by providing its ID and a new name. | Return new name | +| | | `changeStatusById(String id)` | I want to be able to change the status of a task by providing its ID. | Return new status | +| | | `seeDates()` | I want to be able to see the date and time that I created each task. | Return print of dates and times | +| `Task` | `String name` | `getName()` | | Return name | +| | | `setName(String newName)` | | Set name to newName | +| | `String id` | `getId()` | | Return id | +| | `Boolean completed` | `getCompleted()` | | Return completed | +| | | `setCompleted(Boolean bool)` | | Set completed to bool | 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..e76a8b6ee --- /dev/null +++ b/src/main/java/com/booleanuk/core/Task.java @@ -0,0 +1,16 @@ +package com.booleanuk.core; + +public class Task { + + private String name; + private Boolean completed; + + Task(String name){ + this.name = name; + this.completed = false; + } + + public String getName(){return name;} + public Boolean getCompleted(){return completed;} + public void setCompleted(Boolean bool){completed = bool;} +} diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..0831b49b8 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,128 @@ package com.booleanuk.core; +import java.util.ArrayList; + public class TodoList { + ArrayList tasks = new ArrayList<>(); + + public String add(Task task){ + tasks.add(task); + String result = task.getName() + " added."; + return result; + } + + public String seeTasks(){ + String result = ""; + for(Task task : tasks){ + result += task.getName(); + + if(task.getCompleted()){ + result += " completed"; + } + else{ + result += " incomplete"; + } + + if(tasks.getLast() != task){ + result += ", "; + } + } + return result; + } + + public Boolean changeStatus(Task task){ + /*if(!tasks.contains(task)){ + throw new Exception("Task not found!"); + }*/ + if(tasks.contains(task)){ + if(task.getCompleted()){ + task.setCompleted(false); + } + else{ + task.setCompleted(true); + } + } + return task.getCompleted(); + } + + public String seeCompletedTasks(){ + String result = ""; + for(Task task : tasks){ + if(task.getCompleted()){ + result += task.getName(); + if(tasks.getLast() != task){ + result += ", "; + } + } + } + return result; + } + + public String seeIncompleteTasks(){ + String result = ""; + for(Task task : tasks){ + if(!task.getCompleted()){ + result += task.getName(); + if(tasks.getLast() != task){ + result += ", "; + } + } + } + return result; + } + + public String search(String searchedTask){ + String result = ""; + for(Task task : tasks){ + if(task.getName().equals(searchedTask)){ + result += task.getName(); + if(task.getCompleted()){ + result += " completed"; + } + else{ + result += " incomplete"; + } + return result; + } + } + return "Task not found"; + } + + public String remove(Task task){ + if(tasks.contains(task)){ + tasks.remove(task); + return task.getName() + " removed"; + } + return "Task not found"; + } + + public String seeTasksAscending(){ + String result = ""; + tasks.sort((t1, t2) -> t1.getName().compareTo(t2.getName())); + for(Task task : tasks){ + result += task.getName(); + + if(tasks.getLast() != task){ + result += " "; + } + } + return result; + } + + public String seeTasksDescending(){ + String result = ""; + tasks.sort((t2, t1) -> t2.getName().compareTo(t1.getName())); + for(int i = tasks.size()-1; i > -1; --i){ + result += tasks.get(i).getName(); + + if(tasks.getFirst() != tasks.get(i)){ + result += " "; + } + } + return result; + } + + + } 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..eedc3f65e --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Task.java @@ -0,0 +1,33 @@ +package com.booleanuk.extension; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.UUID; + +public class Task { + + private String name; + private String id; + private Boolean completed; + private LocalDateTime date; + + Task(String name){ + this.name = name; + this.id = generateId(); + this.completed = false; + this.date = LocalDateTime.now(); + } + + private String generateId(){ + final String uuid = UUID.randomUUID().toString().replace("-", ""); + return uuid; + } + + public String getName(){return this.name;} + public void setName(String newName){this.name = newName;} + public Boolean getCompleted(){return this.completed;} + public void setCompleted(Boolean bool){this.completed = bool;} + public String getId(){return this.id;} + public LocalDateTime getDate(){return date;} + +} 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..9af69eb4b --- /dev/null +++ b/src/main/java/com/booleanuk/extension/TodoList.java @@ -0,0 +1,160 @@ +package com.booleanuk.extension; + +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; + +public class TodoList { + + ArrayList tasks = new ArrayList<>(); + + public String add(Task task){ + tasks.add(task); + String result = task.getName() + " added."; + return result; + } + + public String seeTasks(){ + String result = ""; + for(Task task : tasks){ + result += task.getName(); + + if(task.getCompleted()){ + result += " completed"; + } + else{ + result += " incomplete"; + } + + if(tasks.getLast() != task){ + result += ", "; + } + } + return result; + } + + public Boolean changeStatus(Task task){ + /*if(!tasks.contains(task)){ + throw new Exception("Task not found!"); + }*/ + if(tasks.contains(task)){ + if(task.getCompleted()){ + task.setCompleted(false); + } + else{ + task.setCompleted(true); + } + } + return task.getCompleted(); + } + + public String seeCompletedTasks(){ + String result = ""; + for(Task task : tasks){ + if(task.getCompleted()){ + result += task.getName(); + if(tasks.getLast() != task){ + result += ", "; + } + } + } + return result; + } + + public String seeIncompleteTasks(){ + String result = ""; + for(Task task : tasks){ + if(!task.getCompleted()){ + result += task.getName(); + if(tasks.getLast() != task){ + result += ", "; + } + } + } + return result; + } + + public String search(String searchedTask){ + String result = ""; + for(Task task : tasks){ + if(task.getName().equals(searchedTask)){ + result += task.getName(); + if(task.getCompleted()){ + result += " completed"; + } + else{ + result += " incomplete"; + } + return result; + } + } + return "Task not found"; + } + + public String remove(Task task){ + if(tasks.contains(task)){ + tasks.remove(task); + return task.getName() + " removed"; + } + return "Task not found"; + } + + public String seeTasksAscending(){ + String result = ""; + tasks.sort((t1, t2) -> t1.getName().compareTo(t2.getName())); + for(Task task : tasks){ + result += task.getName(); + + if(tasks.getLast() != task){ + result += " "; + } + } + return result; + } + + public String seeTasksDescending(){ + String result = ""; + tasks.sort((t2, t1) -> t2.getName().compareTo(t1.getName())); + for(int i = tasks.size()-1; i > -1; --i){ + result += tasks.get(i).getName(); + + if(tasks.getFirst() != tasks.get(i)){ + result += " "; + } + } + return result; + } + + public Task getTaskById(String id){ + for(Task task : tasks){ + if(task.getId().equals(id)){ + return task; + } + } + return null; + } + + public String setNameById(String id, String newName){ + Task task = getTaskById(id); + task.setName(newName); + return task.getName(); + } + + public Boolean changeStatusById(String id){ + return changeStatus(getTaskById(id)); + //return null; + } + + public String seeDates(){ + String result = ""; + for(Task task : tasks){ + result += task.getName() + " " + task.getDate().truncatedTo(ChronoUnit.SECONDS).toString(); + + if(tasks.getLast() != task){ + result += " "; + } + } + System.out.println(result); + return result; + } + +} diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..ca498c1e6 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -10,4 +10,101 @@ public void exampleTest() { Assertions.assertEquals("Hello", hello); Assertions.assertNotEquals("Goodbye", hello); } + + TodoList todoList = new TodoList(); + + @Test + public void testAdd(){ + Task taskOne = new Task("taskOne"); + Assertions.assertEquals("taskOne added.", todoList.add(taskOne)); + Assertions.assertTrue(todoList.tasks.contains(taskOne)); + } + + @Test + public void testSeeTasks(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + todoList.add(taskOne); + todoList.add(taskTwo); + Assertions.assertEquals("taskOne incomplete, taskTwo incomplete", todoList.seeTasks()); + } + + @Test + public void testChangeStatus(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + todoList.add(taskOne); + Assertions.assertTrue(todoList.changeStatus(taskOne)); + Assertions.assertFalse(todoList.changeStatus(taskOne)); + //Assertions.assertFalse(todoList.changeStatus(taskOne)); + Assertions.assertFalse(todoList.changeStatus(taskTwo)); + //Assertions.fail(todoList.changeStatus(taskTwo)); + } + + @Test + public void testSeeCompletedTasks(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + Task taskThree = new Task("taskThree"); + todoList.add(taskOne); + todoList.add(taskTwo); + todoList.add(taskThree); + todoList.changeStatus(taskOne); + todoList.changeStatus(taskThree); + Assertions.assertEquals("taskOne, taskThree", todoList.seeCompletedTasks()); + } + + @Test + public void testSeeTasksIncomplete(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + Task taskThree = new Task("taskThree"); + todoList.add(taskOne); + todoList.add(taskTwo); + todoList.add(taskThree); + todoList.changeStatus(taskOne); + todoList.changeStatus(taskThree); + Assertions.assertEquals("taskTwo, ", todoList.seeIncompleteTasks()); + } + + @Test + public void testSearch(){ + Task taskOne = new Task("taskOne"); + todoList.add(taskOne); + Assertions.assertEquals("taskOne incomplete", todoList.search("taskOne")); + Assertions.assertEquals("Task not found", todoList.search("taskTwo")); + } + + @Test + public void testRemove(){ + Task taskOne = new Task("taskOne"); + Assertions.assertEquals("Task not found", todoList.remove(taskOne)); + todoList.add(taskOne); + Assertions.assertTrue(todoList.tasks.contains(taskOne)); + Assertions.assertEquals("taskOne removed", todoList.remove(taskOne)); + Assertions.assertFalse(todoList.tasks.contains(taskOne)); + } + + @Test + public void testSeeTasksAscending(){ + Task taskA = new Task("taskA"); + Task taskB = new Task("taskB"); + Task taskC = new Task("taskC"); + todoList.add(taskC); + todoList.add(taskA); + todoList.add(taskB); + Assertions.assertEquals("taskA taskB taskC", todoList.seeTasksAscending()); + } + + @Test + public void testSeeTasksDescending(){ + Task taskA = new Task("taskA"); + Task taskB = new Task("taskB"); + Task taskC = new Task("taskC"); + todoList.add(taskC); + todoList.add(taskA); + todoList.add(taskB); + Assertions.assertEquals("taskC taskB taskA", todoList.seeTasksDescending()); + } + } diff --git a/src/test/java/com/booleanuk/extension/TodoListTestExtension.java b/src/test/java/com/booleanuk/extension/TodoListTestExtension.java new file mode 100644 index 000000000..fbac99977 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/TodoListTestExtension.java @@ -0,0 +1,143 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +public class TodoListTestExtension { + @Test + public void exampleTest() { + String hello = "Hello"; + Assertions.assertEquals("Hello", hello); + Assertions.assertNotEquals("Goodbye", hello); + } + + TodoList todoList = new TodoList(); + + @Test + public void testAdd(){ + Task taskOne = new Task("taskOne"); + Assertions.assertEquals("taskOne added.", todoList.add(taskOne)); + Assertions.assertTrue(todoList.tasks.contains(taskOne)); + } + + @Test + public void testSeeTasks(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + todoList.add(taskOne); + todoList.add(taskTwo); + Assertions.assertEquals("taskOne incomplete, taskTwo incomplete", todoList.seeTasks()); + } + + @Test + public void testChangeStatus(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + todoList.add(taskOne); + Assertions.assertTrue(todoList.changeStatus(taskOne)); + Assertions.assertFalse(todoList.changeStatus(taskOne)); + //Assertions.assertFalse(todoList.changeStatus(taskOne)); + Assertions.assertFalse(todoList.changeStatus(taskTwo)); + //Assertions.fail(todoList.changeStatus(taskTwo)); + } + + @Test + public void testSeeCompletedTasks(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + Task taskThree = new Task("taskThree"); + todoList.add(taskOne); + todoList.add(taskTwo); + todoList.add(taskThree); + todoList.changeStatus(taskOne); + todoList.changeStatus(taskThree); + Assertions.assertEquals("taskOne, taskThree", todoList.seeCompletedTasks()); + } + + @Test + public void testSeeTasksIncomplete(){ + Task taskOne = new Task("taskOne"); + Task taskTwo = new Task("taskTwo"); + Task taskThree = new Task("taskThree"); + todoList.add(taskOne); + todoList.add(taskTwo); + todoList.add(taskThree); + todoList.changeStatus(taskOne); + todoList.changeStatus(taskThree); + Assertions.assertEquals("taskTwo, ", todoList.seeIncompleteTasks()); + } + + @Test + public void testSearch(){ + Task taskOne = new Task("taskOne"); + todoList.add(taskOne); + Assertions.assertEquals("taskOne incomplete", todoList.search("taskOne")); + Assertions.assertEquals("Task not found", todoList.search("taskTwo")); + } + + @Test + public void testRemove(){ + Task taskOne = new Task("taskOne"); + Assertions.assertEquals("Task not found", todoList.remove(taskOne)); + todoList.add(taskOne); + Assertions.assertTrue(todoList.tasks.contains(taskOne)); + Assertions.assertEquals("taskOne removed", todoList.remove(taskOne)); + Assertions.assertFalse(todoList.tasks.contains(taskOne)); + } + + @Test + public void testSeeTasksAscending(){ + Task taskA = new Task("taskA"); + Task taskB = new Task("taskB"); + Task taskC = new Task("taskC"); + todoList.add(taskC); + todoList.add(taskA); + todoList.add(taskB); + Assertions.assertEquals("taskA taskB taskC", todoList.seeTasksAscending()); + } + + @Test + public void testSeeTasksDescending(){ + Task taskA = new Task("taskA"); + Task taskB = new Task("taskB"); + Task taskC = new Task("taskC"); + todoList.add(taskC); + todoList.add(taskA); + todoList.add(taskB); + Assertions.assertEquals("taskC taskB taskA", todoList.seeTasksDescending()); + } + + @Test + public void testGetTaskById(){ + Task taskA = new Task("taskA"); + todoList.add(taskA); + Assertions.assertEquals(taskA, todoList.getTaskById(taskA.getId())); + } + + @Test + public void testSetNameById(){ + Task taskA = new Task("taskA"); + todoList.add(taskA); + Assertions.assertEquals("newName", todoList.setNameById(taskA.getId(), "newName")); + } + + @Test + public void testChangeStatusById(){ + Task taskA = new Task("taskA"); + todoList.add(taskA); + Assertions.assertTrue(todoList.changeStatusById(taskA.getId())); + } + + @Test + public void testSeeDates(){ + Task taskA = new Task("taskA"); + Task taskB = new Task("taskB"); + todoList.add(taskA); + todoList.add(taskB); + Assertions.assertEquals("taskA " + LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS).toString() + + " taskB " + LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS).toString(), todoList.seeDates()); + } +}