diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 00000000..a6491966 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,42 @@ +# Domain Model + +- I want to add tasks to my todo list. +- I want to see all the tasks in my todo list. +- I want to change the status of a task between incomplete and complete. +- I want to be able to get only the complete tasks. +- I want to be able to get only the incomplete tasks. +- I want to search for a task and receive a message that says it wasn't found if it doesn't exist. +- I want to remove tasks from my list. +- I want to see all the tasks in my list ordered alphabetically in ascending order. +- I want to see all the tasks in my list ordered alphabetically in descending order. +- I want to prioritise tasks e.g. low, medium, high +- I want to list all tasks by priority + + +| Classes | Methods/Properties | Scenario | Outputs | +|-------------------|-------------------------------|---------------|-----------| +|ToDoList.cs |AddTask(Task t) |adds task t to the todolist |void | +|ToDoList.cs |GetAllTasks() |fetches out all tasks |List | +|TaskItem.cs |ChangeStatus() |flips boolean value of StatusComplete |void | +|ToDoList.cs |GetAllCompleteTasks() |fetches all tasks where statusComplete == true|List | +|ToDoList.cs |GetAllIncompleteTasks() |fetches all tasks where statusComplete == false|List | +|ToDoList.cs |DoesTaskExist(Task t) |Checks if a given task exists in toDoList|bool | +|ToDoList.cs |RemoveTask(Task t) |Removes a given TaskItem from todoList.|void | +|ToDoList.cs |GetAllTasksInOrder() |fetches all tasks in alphabetical order |List | +|ToDoList.cs |GetAllTasksInReverseOrder() |fetches all tasks in reverse alphabetical order |List | +|ToDoList.cs |GetTasksSortedByPriority() |fetches all tasks in order by priority |List | + + + +## Extension tests + +- I want to be able to get a task by a unique ID. +- I want to update the name of a task by providing its ID and a new name. +- I want to be able to change the status of a task by providing its ID. +- I want to be able to see the date and time that I created each task. +- I want to be able to see the date and time that I completed a task. +- I want to know which task took the longest amount of time to complete. +- I want to know which task took the shortest amount of time to complete. +- I want to know which tasks took longer than 5 days to complete. +- I want to categorise tasks e.g. study, work, admin etc +- I want to list all tasks by category \ No newline at end of file diff --git a/tdd-todo-list.CSharp.Main/Program.cs b/tdd-todo-list.CSharp.Main/Program.cs index 3751555c..5ee493b4 100644 --- a/tdd-todo-list.CSharp.Main/Program.cs +++ b/tdd-todo-list.CSharp.Main/Program.cs @@ -1,2 +1,54 @@ // See https://aka.ms/new-console-template for more information +using tdd_todo_list.CSharp.Main; +using TaskItem = tdd_todo_list.CSharp.Main.TaskItem; + Console.WriteLine("Hello, World!"); + +TodoList todoList = new TodoList(); +TaskItem t1 = new TaskItem("vaske", "vaske trapp og kjeller", 3, "husarbeid"); +TaskItem t2 = new TaskItem("rydde", "rydde kjøkken", 1, "husarbeid"); +TaskItem t3 = new TaskItem("lade", "lade mobilen", 1, "annet", true); +todoList.AddTask(t1); +todoList.AddTask(t2); +todoList.AddTask(t3); + +todoList.PrintAllTasks(); + +todoList.GetAllTasksInOrder(); +todoList.PrintAllTasks(); + +todoList.PrintListOfTasks(todoList.GetCompletedTasks()); +Console.WriteLine(); + +Console.WriteLine(todoList.GetTaskById(1)); + +todoList.UpdateNameById(1, "nyttNavn"); + +Console.WriteLine(); +todoList.PrintAllTasks(); + +Console.WriteLine(); +Console.WriteLine(); + +Console.WriteLine(t1.ToString()); +t1.ChangeStatus(); +Console.WriteLine(t1.ToString()); + +Console.WriteLine(); +Console.WriteLine(todoList.DoesTaskExistByName("rydde")); + +Console.WriteLine(); +Console.WriteLine(todoList.GetTaskById(1)); + +todoList.UpdateNameById(1, "nyttNavnForTest"); +todoList.PrintAllTasks(); +Console.WriteLine(t1.Name); + +Console.WriteLine(); +Console.WriteLine(t3.ShowDateTimeOfCreation()); + +Console.WriteLine(); +Console.WriteLine(t2.ShowDateTimeOfCompletion()); +t2.ChangeStatus(); +t2.ChangeStatus(); +Console.WriteLine(t2.ShowDateTimeOfCompletion()); \ No newline at end of file diff --git a/tdd-todo-list.CSharp.Main/TaskItem.cs b/tdd-todo-list.CSharp.Main/TaskItem.cs new file mode 100644 index 00000000..8d10b338 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/TaskItem.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class TaskItem + { + private static int _nextId = 1; + + private int _id; + private string _name; + private bool _statusComplete; + private string _text; + private int _priority; + private string _category; + public DateTime _created; + public DateTime _completed; + + + public TaskItem(string name, string text, int priority, string category, bool statusComplete=false) + { + _id = _nextId++; + _name = name; + _text = text; + _priority = priority; + _statusComplete = statusComplete; + _created = DateTime.Now; + + } + public bool StatusComplete { get { return _statusComplete; } set { _statusComplete = value; } } + public string Text { get { return _text; } } + public string Name { get { return _name; } set { _name = value; } } + public int Id { get { return _id; } } + public DateTime Completed { get { return _completed; } set { _completed = value; } } + public int Priority { get { return _priority; } } + + override + public string ToString() + { + return $" id: {_id} name: {_name} - text: {_text} - priority: {_priority} - status: {_statusComplete}"; + } + + public string ShowDateTimeOfCreation() + { + return _created.ToString() ; + } + + public string ShowDateTimeOfCompletion() + { + return _completed.ToString(); + } + + public void ChangeStatus() + { + _statusComplete = !_statusComplete; + _completed = _statusComplete ? DateTime.Now : DateTime.MaxValue; + } + + + + + + + + + + } +} diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 835cb600..bfb8a7ba 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -8,5 +8,109 @@ namespace tdd_todo_list.CSharp.Main { public class TodoList { + private List _tasks = new List(); + + public TodoList() + { + + + } + + //public List Tasks { get { return _tasks; } } + + + public void AddTask(TaskItem task) + { + _tasks.Add(task); + } + + public void PrintAllTasks() + { + foreach (var task in _tasks) + { + Console.WriteLine(task.ToString()); + } + } + + public List GetAllTasks() + { + return _tasks; + } + + public void ChangeStatus(TaskItem task) + { + task.StatusComplete = !task.StatusComplete; + + + task.Completed = task.StatusComplete ? DateTime.Now : DateTime.MaxValue; + } + + public List GetCompletedTasks() + { + return _tasks.Where(t => t.StatusComplete.Equals("complete")).ToList(); + } + + public List GetIncompleteTasks() + { + return _tasks.Where(t => t.StatusComplete.Equals("incomplete")).ToList(); + } + + public void RemoveTask(TaskItem task) + { + _tasks.Remove(task); + } + + public List GetAllTasksInOrder() + { + return _tasks.OrderBy(t => t.Name).ToList(); + } + + public List GetAllTasksInReverseOrder() + { + return _tasks.OrderByDescending(t => t.Name).ToList(); + } + + public List GetAllTasksSortedByPriority() + { + return _tasks.OrderBy(t => t.Priority).ToList(); + } + + public void PrintListOfTasks(List tasks) + { + foreach(var task in tasks) + { + Console.WriteLine(task.ToString()); + } + } + + public TaskItem GetTaskById(int id) + { + return _tasks.First(t => t.Id == id); + } + + public void UpdateNameById(int id, string name) + { + + GetTaskById(id).Name = name; + } + + public void UpdateStatusById(int id, bool statusComplete) + { + TaskItem t = GetTaskById(id); + t.StatusComplete = statusComplete; + + t.Completed = t.StatusComplete ? DateTime.Now : DateTime.MaxValue; + } + + public bool DoesTaskExistByName(string name) + { + return _tasks.Any(t => t.Name == name); + } + + public bool DoesTaskExist(TaskItem t) + { + return _tasks.Contains(t); + } } + } diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 084cce19..3df14dd4 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -1,17 +1,131 @@ -using tdd_todo_list.CSharp.Main; -using NUnit.Framework; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using tdd_todo_list.CSharp.Main; +using TaskItem = tdd_todo_list.CSharp.Main.TaskItem; namespace tdd_todo_list.CSharp.Test { [TestFixture] public class CoreTests { + List tempTaskItemList = new List(); + + TodoList todoList; + TaskItem t1; + TaskItem newTask1 = new TaskItem("danse", "danse litt", 1, "hobby"); + TaskItem newTask2 = new TaskItem("synge", "synge litt", 2, "hobby"); + [SetUp] + public void Init() + { + todoList = new TodoList(); + t1 = new TaskItem("vaske", "vaske trapp og kjeller", 3, "husarbeid"); + TaskItem t2 = new TaskItem("rydde", "rydde kjøkken", 1, "husarbeid"); + TaskItem t3 = new TaskItem("lade", "lade mobilen", 1, "annet", true); + todoList.AddTask(t1); + todoList.AddTask(t2); + todoList.AddTask(t3); + } + + + + [Test] - public void FirstTest() + public void AddingOneTaskShouldBe4() { - TodoList core = new TodoList(); - Assert.Pass(); + todoList.AddTask(newTask1); + Assert.That(todoList.GetAllTasksInOrder().Count, Is.EqualTo(4)); + } + + [Test] + public void RemovingOneTaskShouldBe2() + { + TodoList todoList1 = new TodoList(); + TaskItem newTask1 = new TaskItem("danse", "danse litt", 1, "hobby"); + TaskItem newTask2 = new TaskItem("synge", "synge litt", 2, "hobby"); + + todoList1.AddTask(newTask1); + todoList1.AddTask(newTask2); + + todoList1.RemoveTask(newTask1); + + + //todoList.RemoveTask(todoList.GetTaskById(2)); + //Assert.That(todoList.GetAllTasksInOrder().Count, Is.EqualTo(2)); + Assert.That(todoList1.GetAllTasks().Count, Is.EqualTo(1)); + } + + [Test] + public void ChangingStatusToComplete() + { + TaskItem task1 = new TaskItem("test1", "dette er en test", 1, "vasking"); + todoList.AddTask(task1); + + task1.ChangeStatus(); + Assert.That(task1.StatusComplete, Is.True); + } + + [Test] + public void GetAllTasksShouldBe3() + { + List taskItems = todoList.GetAllTasks(); + Assert.That(taskItems.Count, Is.EqualTo(3)); + } + + [Test] + public void GetAllCompleteTasks() + { + tempTaskItemList = todoList.GetCompletedTasks(); + + Assert.That(tempTaskItemList.All(t => t.StatusComplete == true), Is.True); } + + [Test] + public void GetAllIncompleteTasks() + { + tempTaskItemList = todoList.GetIncompleteTasks(); + + Assert.That(tempTaskItemList.All(t => t.StatusComplete == false), Is.True); + } + + [Test] + public void GetTasksInOrderShouldBeInOrder() + { + tempTaskItemList = todoList.GetAllTasksInOrder(); + Assert.That(tempTaskItemList[0].Name.CompareTo(tempTaskItemList[1].Name) <= 0, Is.True); + } + + [Test] + public void GetTasksInReverseOrderShouldBeInReverseOrder() + { + tempTaskItemList = todoList.GetAllTasksInReverseOrder(); + Assert.That(tempTaskItemList[0].Name.CompareTo(tempTaskItemList[1].Name) >= 0, Is.True); + } + + [Test] + public void GetTasksSortedByPriorityShouldBeOrderedByPriority() + { + tempTaskItemList = todoList.GetAllTasksSortedByPriority(); + Assert.That(tempTaskItemList[0].Priority.CompareTo(tempTaskItemList[1].Priority) <= 0, Is.True); + } + + [Test] + public void TaskDoesExistShouldReturnTrue() + { + TaskItem tempTaskItem = new TaskItem("test", "test", 1, "test"); + todoList.AddTask(tempTaskItem); + + Assert.That(todoList.DoesTaskExist(tempTaskItem), Is.True); + } + + + [Test] + public void UpdatingNameShouldGiveNewName() + { + todoList.UpdateNameById(t1.Id, "johan"); + Assert.That(t1.Name, Is.EqualTo("johan")); + } + + } } \ No newline at end of file diff --git a/tdd-todo-list.CSharp.Test/ExtensionTests.cs b/tdd-todo-list.CSharp.Test/ExtensionTests.cs index bdc82ad7..05c67c3f 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -4,15 +4,32 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using NUnit.Framework; + +using tdd_todo_list.CSharp.Main; namespace tdd_todo_list.CSharp.Test { public class ExtensionTests { - private TodoListExtension _extension; - public ExtensionTests() + + [Test] + public void UpdatingName() { - _extension = new TodoListExtension(); + TodoList todoList = new TodoList(); + TaskItem taskItem1 = new TaskItem("vaske", "vaske kjeller", 1, "vasking"); + TaskItem taskItem2 = new TaskItem("rydde", "rydde kjøkken", 2, "rydding"); + + todoList.AddTask(taskItem1); + todoList.AddTask(taskItem2); + + todoList.UpdateNameById(taskItem1.Id, "nyttNavnForTest"); + + + + Assert.That(taskItem1.Name.Equals("nyttNavnForTest")); } + + } } diff --git a/tdd-todo-list.sln b/tdd-todo-list.sln index 66d24763..2a5e0bbd 100644 --- a/tdd-todo-list.sln +++ b/tdd-todo-list.sln @@ -10,6 +10,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{663B0373-6031-46F8-ADD5-9AF01A5E82D5}" ProjectSection(SolutionItems) = preProject .github\workflows\core-criteria.yml = .github\workflows\core-criteria.yml + domain-model.md = domain-model.md .github\workflows\extension-criteria.yml = .github\workflows\extension-criteria.yml README.md = README.md EndProjectSection