Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions domain-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

## Domain Model ##
| Classes | Members | Methods | Scenario | Outputs |
|--------------|-------------------------------------------------------------------|--------------------------------------|--------------------------------------------------------------------|-------------------------|
| **TodoList** | `hashMap<String, Boolean> tasks` (key: name, value: true or false | boolean `addTask(String name)` | If task with the provided name is nor in the to do list | `true` |
| | | | Task with the provided name is already in to do list` → do nothing | `false` |
| | | List<String> getAll() | List that contains tasks | HashMap<String, Boolean |
| | | Boolean changeStatus(String name) | Name exists, then flip status | True |
| | | | Not found | False |
| | | List<String> getCompleteTasks() | when tasks are completed, then get completed tasks with name | True |
| | | List<String> getIncomplete | look for incomplete tasks and return them | True |
| | | List<String> getIncomplete | All tasks completed or no tasks exist | empty List |
| | | String search(String name) | found | String |
| | | | not found | String |
| | | boolean remove(String name) | found --> delete | True |
| | | | not found --> delete | False |
| | | List<String> sortedInAscendingOrder | Go through list and sort | String |
| | | List<String> sortedInDescendingOrder | go through list and sort | String |


103 changes: 103 additions & 0 deletions src/main/java/com/booleanuk/core/TodoList.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,108 @@
package com.booleanuk.core;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;

public class TodoList {
HashMap<String, Boolean> tasks = new LinkedHashMap<>();


public Boolean addTask(String name) {
if (name == null)
return false;

String nTrim = name.trim();
if (nTrim.isEmpty())
return false;

if (tasks.containsKey(nTrim))
return false;


tasks.put(nTrim, false);
return true;

}



public ArrayList<String> getTasks() {
return new ArrayList<>(tasks.keySet());
}



public Boolean changeStatus(String name) {
if (name == null)
return false;
String nTrim = name.trim();

if (nTrim.isEmpty())
return false;

Boolean status = tasks.get(nTrim);
if (status == null)
return false;

tasks.put(nTrim, !status);
return true;

}

public ArrayList<String> getCompletedTasks() {
ArrayList<String> doneTasks = new ArrayList<>();
for (HashMap.Entry<String, Boolean> entry : tasks.entrySet()) {
if (entry.getValue() == true) {
doneTasks.add(entry.getKey());
}

}
return doneTasks;
}

public ArrayList<String> getIncompleteTasks() {
ArrayList<String> doneTasks = new ArrayList<>();
for (HashMap.Entry<String, Boolean> entry : tasks.entrySet()) {
if (entry.getValue() == false) {
doneTasks.add(entry.getKey());
}
}
return doneTasks;
}

public String search(String name){
String nTrim = name.trim();
if (tasks.containsKey(nTrim)) {
return nTrim;
}
return "Task not found";
}

public boolean deleteTask(String name){
if (name == null) {
return false;
}
String nTrim = name.trim();
if (nTrim.isEmpty()) {
return false;
}
return tasks.remove(nTrim) != null;
}

public ArrayList<String> sortTasksAscOrder(){
ArrayList<String> sortedTasks = new ArrayList<>(tasks.keySet());
Collections.sort(sortedTasks);
return sortedTasks;
}

public ArrayList<String> sortTasksDescOrder(){
ArrayList<String> sortedTasks = new ArrayList<>(tasks.keySet());
sortedTasks.sort(Collections.reverseOrder());
return sortedTasks;
}



}
140 changes: 136 additions & 4 deletions src/test/java/com/booleanuk/core/TodoListTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,143 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.HashMap;

class TodoListTest {

@Test
public void addTaskWhenNewValidName() {
TodoList todo = new TodoList();
boolean result = todo.addTask("Play football today");
Assertions.assertTrue(result);


}

@Test
public void getFalseIfDuplicate() {
TodoList todo = new TodoList();
Assertions.assertTrue(todo.addTask("Play football today"));
Assertions.assertFalse(todo.addTask("Play football today"));
}
@Test
public void listAllTasks() {
TodoList todo = new TodoList();
// add tasks into the TodoList
todo.addTask("buy milk");
todo.addTask("buy cheese");
todo.addTask("go and run");

ArrayList<String> list = new ArrayList<>();
list.add("buy milk");
list.add("buy cheese");
list.add("go and run");

Assertions.assertEquals(list, todo.getTasks());
}

@Test
public void changeStatusOfTask() {
TodoList todo = new TodoList();
todo.addTask("buy cheese");
Assertions.assertTrue(todo.changeStatus("buy cheese"));
Assertions.assertTrue(todo.getCompletedTasks().contains("buy cheese"));

Assertions.assertTrue(todo.changeStatus("buy cheese"));
Assertions.assertTrue(todo.getIncompleteTasks().contains("buy cheese"));

Assertions.assertFalse(todo.changeStatus("Play football today"));
Assertions.assertFalse(todo.changeStatus("Non existent task"));

}

@Test
public void getTaskByCompletion() {
TodoList todo = new TodoList();
todo.addTask("run");
todo.addTask("buy milk");
todo.addTask("buy cheese");

todo.changeStatus("run");
todo.changeStatus("buy milk");

ArrayList<String> list = new ArrayList<>();
list.add("run");
list.add("buy milk");

Assertions.assertEquals(list, todo.getCompletedTasks());
}

@Test
public void getTasksByIncompletion() {
TodoList todo = new TodoList();
todo.addTask("cut hair");
todo.addTask("Write story");

Assertions.assertTrue(todo.changeStatus("Write story"));

ArrayList<String> list = new ArrayList<>();
list.add("cut hair");

Assertions.assertEquals(list, todo.getIncompleteTasks());
}

@Test
public void searchForTasksAndReturnMessageIfTaskNotFound() {
TodoList todo = new TodoList();

todo.addTask("Go and run");
todo.addTask("buy cheese");

String str = todo.search("clean table");
Assertions.assertEquals("Task not found", str);


}

@Test
public void exampleTest() {
String hello = "Hello";
Assertions.assertEquals("Hello", hello);
Assertions.assertNotEquals("Goodbye", hello);
public void deleteTaskIfFound() {
TodoList todo = new TodoList();
todo.addTask("Go and run");
todo.addTask("buy cheese");
todo.addTask("buy food");


Assertions.assertTrue(todo.deleteTask("buy food"));
Assertions.assertFalse(todo.getTasks().contains("buy food"));
}

@Test
public void sortedInAscendingOrder() {
TodoList todo = new TodoList();
todo.addTask("C");
todo.addTask("A");
todo.addTask("B");

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

Assertions.assertEquals(list, todo.sortTasksAscOrder());
}

@Test
public void sortedInDescendingOrder() {
TodoList todo = new TodoList();
todo.addTask("A");
todo.addTask("B");
todo.addTask("C");

ArrayList<String> list = new ArrayList<>();
list.add("C");
list.add("B");
list.add("A");

Assertions.assertEquals(list, todo.sortTasksDescOrder());
}


}

Loading