From 4b02675c791d9316b075cf1e45ba328dc212e073 Mon Sep 17 00:00:00 2001 From: Tein Schoemaker Date: Thu, 7 Aug 2025 17:01:14 +0200 Subject: [PATCH 1/3] Written Core Requirements Tests --- domain-model.md | 33 ++++ tdd-todo-list.CSharp.Main/ToDoList.cs | 3 +- tdd-todo-list.CSharp.Test/TaskTests.cs | 10 ++ tdd-todo-list.CSharp.Test/TodoListTests.cs | 179 +++++++++++++++++++++ tdd-todo-list.sln | 1 + 5 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 domain-model.md create mode 100644 tdd-todo-list.CSharp.Test/TaskTests.cs create mode 100644 tdd-todo-list.CSharp.Test/TodoListTests.cs diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 00000000..c64798eb --- /dev/null +++ b/domain-model.md @@ -0,0 +1,33 @@ +# Core Requirements + +| Classes | Methods/Properties | Scenario | Outputs +| ----------- | ------------------------------------------------------ | --------------------------------------- | --------------------------------- +| Task.cs | string Name | Name the task | Task name +| Task.cs | Guid Id | Unique identifier for the task | Task ID +| Task.cs | bool IsComplete | Track completion status | True or false +| Task.cs | enum Priority | Task priority Low, Medium, High | Priority status of 3 possible levels +| Task.cs | enum Category | Task categories for differation | Category name +| TodoList.cs | AddTask(string name, enum priority, enum category) | Add task to the list | Task added to list +| TodoList.cs | GetAllTasks() | View all tasks | List of tasks +| TodoList.cs | GetCompletedTasks() | View only completed tasks | Filtered list of tasks +| TodoList.cs | GetIncompleteTasks() | View only incomplete tasks | Filtered list of tasks +| TodoList.cs | ChangeTaskStatus(Guid id, bool isComplete) | Mark task complete/incomplete by ID | Updated task status +| TodoList.cs | SearchTask(string name) | Search task by name | Task found or "Not Found" message +| TodoList.cs | RemoveTask(Guid id) | Remove task from list | Task removed by id +| TodoList.cs | GetTasksAscendingAZ() | Get tasks sorted A-Z | Alphabetically sorted list +| TodoList.cs | GetTasksDescendingAZ() | Get tasks sorted Z-A | Alphabetically sorted list +| TodoList.cs | GetTasksByPriority(string priority) | List tasks by selected priority | List of tasks by priority + +# Extension Requirements + +| Classes | Methods/Properties | Scenario | Outputs +| ----------- | ------------------------------------------ | ---------------------------------------- | ------------- +| Task.cs | GetTaskById(int id) | Retrieve task by ID | Task with matching id +| Task.cs | UpdateTaskName(int id, string newName) | Update task name | Updated task name +| Task.cs | ChangeStatusById(int id, bool isComplete) | Change task status using ID | Updated task +| Task.cs | CreatedAt(DateTime ) | Show creation time | DateTime of creation +| Task.cs | CompletedAt (DateTime) | Show completed time | DateTime of completion +| ToDoList.cs | GetLongestCompletionTime() | Find task that took longest to complete | Task with biggest difference in CreatedAt & CompletedAt +| ToDoList.cs | GetShortestCompletionTime() | Find task that took shortest to complete | Task with shortest difference in CreatedAt & CompletedAt +| ToDoList.cs | GetTasksLongerThanDays(int days) | List tasks completed after x days | List of tasks where the time it took is longer than x days +| ToDoList.cs | GetTasksByCategory(enum category) | List all tasks by category | List of tasks displayed by category diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 835cb600..18f80f60 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -6,7 +6,8 @@ namespace tdd_todo_list.CSharp.Main { - public class TodoList + public class ToDoList { + } } diff --git a/tdd-todo-list.CSharp.Test/TaskTests.cs b/tdd-todo-list.CSharp.Test/TaskTests.cs new file mode 100644 index 00000000..275fbdaf --- /dev/null +++ b/tdd-todo-list.CSharp.Test/TaskTests.cs @@ -0,0 +1,10 @@ +using tdd_todo_list.CSharp.Main; +using NUnit.Framework; + +namespace td_todo_list.CSharp.Test +{ + public class TaskTests + { + + } +} diff --git a/tdd-todo-list.CSharp.Test/TodoListTests.cs b/tdd-todo-list.CSharp.Test/TodoListTests.cs new file mode 100644 index 00000000..073ab562 --- /dev/null +++ b/tdd-todo-list.CSharp.Test/TodoListTests.cs @@ -0,0 +1,179 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using System.Collections.Generic; +using tdd_todo_list.CSharp.Main; + +namespace tdd_todo_list.CSharp.Test +{ + public class ToDoListTests + { + [Test] + public void AddedTaskToList() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", PriorityQueue.High, Category.Work); + + //act + var tasks = list.GetAllTasks(); + + //assert + Assert.That(tasks[0].Name, Is.EqualTo("Test")); + } + + [Test] + public void ShowsAllTasksOnList() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.High, Category.Work); + list.AddTask("Test2", PriorityQueue.Medium, Category.School); + list.AddTask("Test3", PriorityQueue.Low, Category.Life); + + //act + var allTasks = list.GetAllTasks(); + + //assert + Assert.That(allTasks.Count, Is.EqualTo(3)); + + } + + [Test] + public void ChangeTaskStatus() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", PriorityQueue.High, Category.Work); + + //act + var changed = list.ChangeTaskStatus(list[0].id, true); + + //assert + Assert.That(changed[0].Status, Is.EqualTo(true)); + } + + [Test] + public void GetOnlyCompletedTasks() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.High, Category.Work); + list.AddTask("Test2", PriorityQueue.Medium, Category.School); + + //act + list.ChangeTaskStatus(list[1].id, true); + var completedTasks = list.GetCompletedTasks(); + + //assert + Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + } + + [Test] + public void GetOnlyInCompletedTasks() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.High, Category.Work); + list.AddTask("Test2", PriorityQueue.Medium, Category.School); + + //act + list.ChangeTaskStatus(list[1].id, false); + var completedTasks = list.GetInCompletedTasks(); + + //assert + Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + } + + [Test] + public void ErrorMessageIfTaskNotFound() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.High, Category.Work); + + //act + var search = list.SearchTask("Test32"); + + //assert + Assert.Null(search); + } + + [Test] + public void RemoveTaskById() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.High, Category.Work); + + //act + list.RemoveTask(1); + + //assert + Assert.Null(list); + } + + [Test] + public void GetTasksAscendingAZ() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Bread", PriorityQueue.High, Category.Work); + list.AddTask("Ants", PriorityQueue.High, Category.Work); + list.AddTask("Crab", PriorityQueue.High, Category.Work); + + //act + var ascendingList = list.GetTasksAscendingAZ(); + + //assert + Assert.That(ascendingList[0].name, Is.EqualTo("Ants")); + Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); + Assert.That(ascendingList[2].name, Is.EqualTo("Crab")); + } + + [Test] + public void GetTasksDescendingAZ() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Bread", PriorityQueue.High, Category.Work); + list.AddTask("Ants", PriorityQueue.High, Category.Work); + list.AddTask("Crab", PriorityQueue.High, Category.Work); + + //act + var ascendingList = list.GetTasksAscendingAZ(); + + //assert + Assert.That(ascendingList[2].name, Is.EqualTo("Ants")); + Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); + Assert.That(ascendingList[0].name, Is.EqualTo("Crab")); + } + + [Test] + public void ListTasksByPriority() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", PriorityQueue.Medium, Category.Work); + list.AddTask("Test2", PriorityQueue.Low, Category.School); + list.AddTask("Test3", PriorityQueue.High, Category.Life); + + //act + var byPriority = list.GetTasksByPriority(); + + //assert + Assert.That(byPriority[0].name, Is.EqualTo("Test3")); + Assert.That(byPriority[1].name, Is.EqualTo("Test1")); + Assert.That(byPriority[2].name, Is.EqualTo("Test2")); + } + } +} 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 From a4577f95159c40b74fbf4ca21fca264dba917ad9 Mon Sep 17 00:00:00 2001 From: Tein Schoemaker Date: Thu, 7 Aug 2025 21:20:01 +0200 Subject: [PATCH 2/3] Added Extension Tests Till TimeCompleted --- tdd-todo-list.CSharp.Test/CoreTests.cs | 172 ++++++++++++++++++- tdd-todo-list.CSharp.Test/ExtensionTests.cs | 62 ++++++- tdd-todo-list.CSharp.Test/TaskTests.cs | 10 -- tdd-todo-list.CSharp.Test/TodoListTests.cs | 179 -------------------- 4 files changed, 225 insertions(+), 198 deletions(-) delete mode 100644 tdd-todo-list.CSharp.Test/TaskTests.cs delete mode 100644 tdd-todo-list.CSharp.Test/TodoListTests.cs diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 084cce19..037fc6e3 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -1,17 +1,179 @@ -using tdd_todo_list.CSharp.Main; -using NUnit.Framework; +using NUnit.Framework; +using System.Collections.Generic; +using tdd_todo_list.CSharp.Main; namespace tdd_todo_list.CSharp.Test { [TestFixture] public class CoreTests { + [Test] + public void AddedTaskToList() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", Priority.High, Category.Work); + + //act + var tasks = list.GetAllTasks(); + + //assert + Assert.That(tasks[0].Name, Is.EqualTo("Test")); + } + + [Test] + public void ShowsAllTasksOnList() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.High, Category.Work); + list.AddTask("Test2", Priority.Medium, Category.School); + list.AddTask("Test3", Priority.Low, Category.Life); + + //act + var allTasks = list.GetAllTasks(); + + //assert + Assert.That(allTasks.Count, Is.EqualTo(3)); + + } + + [Test] + public void ChangeTaskStatus() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", Priority.High, Category.Work); + + //act + var changed = list.ChangeTaskStatus(list[0].id, true); + + //assert + Assert.That(changed[0].Status, Is.EqualTo(true)); + } + + [Test] + public void GetOnlyCompletedTasks() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.High, Category.Work); + list.AddTask("Test2", Priority.Medium, Category.School); + + //act + list.ChangeTaskStatus(list[1].id, true); + var completedTasks = list.GetCompletedTasks(); + + //assert + Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + } + + [Test] + public void GetOnlyInCompletedTasks() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.High, Category.Work); + list.AddTask("Test2", Priority.Medium, Category.School); + + //act + list.ChangeTaskStatus(list[1].id, false); + var completedTasks = list.GetInCompletedTasks(); + + //assert + Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + } + + [Test] + public void ErrorMessageIfTaskNotFound() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.High, Category.Work); + + //act + var search = list.SearchTask("Test32"); + + //assert + Assert.Null(search); + } [Test] - public void FirstTest() + public void RemoveTaskById() { - TodoList core = new TodoList(); - Assert.Pass(); + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.High, Category.Work); + + //act + list.RemoveTask(1); + + //assert + Assert.Null(list); + } + + [Test] + public void GetTasksAscendingAZ() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Bread", Priority.High, Category.Work); + list.AddTask("Ants", Priority.High, Category.Work); + list.AddTask("Crab", Priority.High, Category.Work); + + //act + var ascendingList = list.GetTasksAscendingAZ(); + + //assert + Assert.That(ascendingList[0].name, Is.EqualTo("Ants")); + Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); + Assert.That(ascendingList[2].name, Is.EqualTo("Crab")); + } + + [Test] + public void GetTasksDescendingAZ() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Bread", Priority.High, Category.Work); + list.AddTask("Ants", Priority.High, Category.Work); + list.AddTask("Crab", Priority.High, Category.Work); + + //act + var ascendingList = list.GetTasksAscendingAZ(); + + //assert + Assert.That(ascendingList[2].name, Is.EqualTo("Ants")); + Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); + Assert.That(ascendingList[0].name, Is.EqualTo("Crab")); + } + + [Test] + public void ListTasksByPriority() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test1", Priority.Medium, Category.Work); + list.AddTask("Test2", Priority.Low, Category.School); + list.AddTask("Test3", Priority.High, Category.Life); + + //act + var byPriority = list.GetTasksByPriority(); + + //assert + Assert.That(byPriority[0].name, Is.EqualTo("Test3")); + Assert.That(byPriority[1].name, Is.EqualTo("Test1")); + Assert.That(byPriority[2].name, Is.EqualTo("Test2")); } } } \ 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..5d81f17b 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -1,18 +1,72 @@ -using tdd_todo_list.CSharp.Main; +using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using tdd_todo_list.CSharp.Main; namespace tdd_todo_list.CSharp.Test { public class ExtensionTests { - private TodoListExtension _extension; - public ExtensionTests() + [Test] + public void FindATaskById() { - _extension = new TodoListExtension(); + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", Priority.High, Category.Work); + + //act + var tasks = list.GetTaskById(list.id); + + //assert + Assert.That(tasks.Name, Is.EqualTo("Test")); + } + + [Test] + public void ChangeTaskNameById() + { + //arrange + ToDoList list = new ToDoList(); + + list.AddTask("Test", Priority.High, Category.Work); + + //act + list.UpdateTaskName(list.id, "UpdatedTest"); + + //assert + Assert.That(tasks.Name, Is.EqualTo("UpdatedTest")); + } + + [Test] + public void TimeCreatedAtIsSet() + { + //arrange + ToDoList list = new ToDoList(); + var currentTime = DateTime.Now; + list.AddTask("Test", Priority.High, Category.Work); + + //act + var createdAt = list.CreatedAt; + + //assert + Assert.That(currentTime, Is.EqualTo(createdAt)); + } + + public void TimeCompletedAtIsSet() + { + //arrange + ToDoList list = new ToDoList(); + list.AddTask("Test", Priority.High, Category.Work); + + //act + list.ChangeStatusById(list.id, true); + var completedAt = list.CompletedAt; + + //assert + Assert.That(completedAt, Is.EqualTo(null!)); } } } diff --git a/tdd-todo-list.CSharp.Test/TaskTests.cs b/tdd-todo-list.CSharp.Test/TaskTests.cs deleted file mode 100644 index 275fbdaf..00000000 --- a/tdd-todo-list.CSharp.Test/TaskTests.cs +++ /dev/null @@ -1,10 +0,0 @@ -using tdd_todo_list.CSharp.Main; -using NUnit.Framework; - -namespace td_todo_list.CSharp.Test -{ - public class TaskTests - { - - } -} diff --git a/tdd-todo-list.CSharp.Test/TodoListTests.cs b/tdd-todo-list.CSharp.Test/TodoListTests.cs deleted file mode 100644 index 073ab562..00000000 --- a/tdd-todo-list.CSharp.Test/TodoListTests.cs +++ /dev/null @@ -1,179 +0,0 @@ -using NUnit.Framework; -using NUnit.Framework.Interfaces; -using System.Collections.Generic; -using tdd_todo_list.CSharp.Main; - -namespace tdd_todo_list.CSharp.Test -{ - public class ToDoListTests - { - [Test] - public void AddedTaskToList() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test", PriorityQueue.High, Category.Work); - - //act - var tasks = list.GetAllTasks(); - - //assert - Assert.That(tasks[0].Name, Is.EqualTo("Test")); - } - - [Test] - public void ShowsAllTasksOnList() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.High, Category.Work); - list.AddTask("Test2", PriorityQueue.Medium, Category.School); - list.AddTask("Test3", PriorityQueue.Low, Category.Life); - - //act - var allTasks = list.GetAllTasks(); - - //assert - Assert.That(allTasks.Count, Is.EqualTo(3)); - - } - - [Test] - public void ChangeTaskStatus() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test", PriorityQueue.High, Category.Work); - - //act - var changed = list.ChangeTaskStatus(list[0].id, true); - - //assert - Assert.That(changed[0].Status, Is.EqualTo(true)); - } - - [Test] - public void GetOnlyCompletedTasks() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.High, Category.Work); - list.AddTask("Test2", PriorityQueue.Medium, Category.School); - - //act - list.ChangeTaskStatus(list[1].id, true); - var completedTasks = list.GetCompletedTasks(); - - //assert - Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); - } - - [Test] - public void GetOnlyInCompletedTasks() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.High, Category.Work); - list.AddTask("Test2", PriorityQueue.Medium, Category.School); - - //act - list.ChangeTaskStatus(list[1].id, false); - var completedTasks = list.GetInCompletedTasks(); - - //assert - Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); - } - - [Test] - public void ErrorMessageIfTaskNotFound() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.High, Category.Work); - - //act - var search = list.SearchTask("Test32"); - - //assert - Assert.Null(search); - } - - [Test] - public void RemoveTaskById() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.High, Category.Work); - - //act - list.RemoveTask(1); - - //assert - Assert.Null(list); - } - - [Test] - public void GetTasksAscendingAZ() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Bread", PriorityQueue.High, Category.Work); - list.AddTask("Ants", PriorityQueue.High, Category.Work); - list.AddTask("Crab", PriorityQueue.High, Category.Work); - - //act - var ascendingList = list.GetTasksAscendingAZ(); - - //assert - Assert.That(ascendingList[0].name, Is.EqualTo("Ants")); - Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); - Assert.That(ascendingList[2].name, Is.EqualTo("Crab")); - } - - [Test] - public void GetTasksDescendingAZ() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Bread", PriorityQueue.High, Category.Work); - list.AddTask("Ants", PriorityQueue.High, Category.Work); - list.AddTask("Crab", PriorityQueue.High, Category.Work); - - //act - var ascendingList = list.GetTasksAscendingAZ(); - - //assert - Assert.That(ascendingList[2].name, Is.EqualTo("Ants")); - Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); - Assert.That(ascendingList[0].name, Is.EqualTo("Crab")); - } - - [Test] - public void ListTasksByPriority() - { - //arrange - ToDoList list = new ToDoList(); - - list.AddTask("Test1", PriorityQueue.Medium, Category.Work); - list.AddTask("Test2", PriorityQueue.Low, Category.School); - list.AddTask("Test3", PriorityQueue.High, Category.Life); - - //act - var byPriority = list.GetTasksByPriority(); - - //assert - Assert.That(byPriority[0].name, Is.EqualTo("Test3")); - Assert.That(byPriority[1].name, Is.EqualTo("Test1")); - Assert.That(byPriority[2].name, Is.EqualTo("Test2")); - } - } -} From 6f3d9cacb9a859a44e5263779d6d46d6378ce68b Mon Sep 17 00:00:00 2001 From: Tein Schoemaker Date: Fri, 8 Aug 2025 17:35:35 +0200 Subject: [PATCH 3/3] Created ToDoList.cs / Task.cs & Fixed Tests --- tdd-todo-list.CSharp.Main/Task.cs | 30 +++++ tdd-todo-list.CSharp.Main/ToDoList.cs | 119 ++++++++++++++++++++ tdd-todo-list.CSharp.Test/CoreTests.cs | 48 ++++---- tdd-todo-list.CSharp.Test/ExtensionTests.cs | 27 ++--- 4 files changed, 184 insertions(+), 40 deletions(-) create mode 100644 tdd-todo-list.CSharp.Main/Task.cs diff --git a/tdd-todo-list.CSharp.Main/Task.cs b/tdd-todo-list.CSharp.Main/Task.cs new file mode 100644 index 00000000..bcfd74e3 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/Task.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class Task + { + public Guid Id { get; set; } + public string Name { get; set; } + public bool IsComplete { get; set; } + public Priority Priority { get; set; } + public Category Category { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime CompletedAt { get; set; } + + public Task(string name, Priority priority, Category category) + { + Id = Guid.NewGuid(); + Name = name; + Priority = priority; + Category = category; + IsComplete = false; + CreatedAt = DateTime.Now; + } + } +} diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 18f80f60..b9a916cd 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -6,8 +6,127 @@ namespace tdd_todo_list.CSharp.Main { + + public enum Priority + { + Low, + Medium, + High + } + public enum Category + { + Work, + School, + Life + } + public class ToDoList { + private List tasks = new List(); + + public void AddTask(string name, Priority priority, Category category) + { + var task = new Task(name, priority, category); + tasks.Add(task); + } + + public List GetAllTasks() + { + return tasks; + } + + public List GetCompletedTasks() + { + return tasks.Where(x => x.IsComplete).ToList(); + } + + public List GetInCompletedTasks() + { + return tasks.Where(x => !x.IsComplete).ToList(); + } + + public List ChangeTaskStatus(Guid id, bool isComplete) + { + var task = tasks.Find(x => x.Id == id); + if (task != null) + { + task.IsComplete = isComplete; + task.CompletedAt = isComplete ? DateTime.Now : default; + } + return tasks; + } + + public Task? SearchTask(string name) + { + return tasks.Find(x => x.Name == name); + } + + public void RemoveTask(Guid id) + { + var task = tasks.FirstOrDefault(t => t.Id == id); + if (task != null) + { + tasks.Remove(task); + } + } + + public List GetTasksAscendingAZ() + { + return tasks.OrderBy(x => x.Name).ToList(); + } + + public List GetTasksDescendingAZ() + { + return tasks.OrderByDescending(x => x.Name).ToList(); + } + + public List GetTasksByPriority() + { + return tasks.OrderByDescending(x =>x.Priority).ToList(); + } + + public Task? GetTaskById(Guid id) + { + return tasks.Find(x => x.Id == id); + } + + public void UpdateTaskName(Guid id, string newName) + { + var task = tasks.Find(x => x.Id == id); + if ( task != null) + { + task.Name = newName; + } + } + + public void ChangeStatusById(Guid id, bool isComplete) + { + var task = tasks.Find(x => x.Id == id); + if ( task != null) + { + task.IsComplete = isComplete; + task.CompletedAt = isComplete ? DateTime.Now : default; + } + } + + public Task GetLongestCompletionTime() + { + return null; + } + + public Task GetShortestCompletionTime() + { + return null; + } + + public List GetTasksLongerThanDays(int days) + { + return null; + } + public List GetTasksByCategory(Category category) + { + return tasks.Where(x => x.Category == category).ToList(); + } } } diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 037fc6e3..19ae3396 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -12,7 +12,6 @@ public void AddedTaskToList() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test", Priority.High, Category.Work); //act @@ -27,7 +26,6 @@ public void ShowsAllTasksOnList() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test1", Priority.High, Category.Work); list.AddTask("Test2", Priority.Medium, Category.School); list.AddTask("Test3", Priority.Low, Category.Life); @@ -45,14 +43,14 @@ public void ChangeTaskStatus() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test", Priority.High, Category.Work); //act - var changed = list.ChangeTaskStatus(list[0].id, true); + var changed = list.GetAllTasks()[0]; + list.ChangeTaskStatus(changed.Id, true); //assert - Assert.That(changed[0].Status, Is.EqualTo(true)); + Assert.That(changed.IsComplete, Is.True); } [Test] @@ -60,16 +58,16 @@ public void GetOnlyCompletedTasks() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test1", Priority.High, Category.Work); list.AddTask("Test2", Priority.Medium, Category.School); //act - list.ChangeTaskStatus(list[1].id, true); - var completedTasks = list.GetCompletedTasks(); + var tasks = list.GetAllTasks()[1]; + list.ChangeTaskStatus(tasks.Id, true); //assert - Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + var completedTasks = list.GetCompletedTasks(); + Assert.That(completedTasks[0].Name, Is.EqualTo("Test2")); } [Test] @@ -77,16 +75,14 @@ public void GetOnlyInCompletedTasks() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test1", Priority.High, Category.Work); list.AddTask("Test2", Priority.Medium, Category.School); //act - list.ChangeTaskStatus(list[1].id, false); var completedTasks = list.GetInCompletedTasks(); //assert - Assert.That(completedTasks[0].name, Is.EqualTo("Test2")); + Assert.That(completedTasks.Count, Is.EqualTo(2)); } [Test] @@ -94,7 +90,6 @@ public void ErrorMessageIfTaskNotFound() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test1", Priority.High, Category.Work); //act @@ -109,14 +104,14 @@ public void RemoveTaskById() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test1", Priority.High, Category.Work); + var task = list.GetAllTasks().First(); //act - list.RemoveTask(1); + list.RemoveTask(task.Id); //assert - Assert.Null(list); + Assert.That(list.GetAllTasks().Count, Is.EqualTo(0)); } [Test] @@ -124,7 +119,6 @@ public void GetTasksAscendingAZ() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Bread", Priority.High, Category.Work); list.AddTask("Ants", Priority.High, Category.Work); list.AddTask("Crab", Priority.High, Category.Work); @@ -133,9 +127,9 @@ public void GetTasksAscendingAZ() var ascendingList = list.GetTasksAscendingAZ(); //assert - Assert.That(ascendingList[0].name, Is.EqualTo("Ants")); - Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); - Assert.That(ascendingList[2].name, Is.EqualTo("Crab")); + Assert.That(ascendingList[0].Name, Is.EqualTo("Ants")); + Assert.That(ascendingList[1].Name, Is.EqualTo("Bread")); + Assert.That(ascendingList[2].Name, Is.EqualTo("Crab")); } [Test] @@ -149,12 +143,12 @@ public void GetTasksDescendingAZ() list.AddTask("Crab", Priority.High, Category.Work); //act - var ascendingList = list.GetTasksAscendingAZ(); + var ascendingList = list.GetTasksDescendingAZ(); //assert - Assert.That(ascendingList[2].name, Is.EqualTo("Ants")); - Assert.That(ascendingList[1].name, Is.EqualTo("Bread")); - Assert.That(ascendingList[0].name, Is.EqualTo("Crab")); + Assert.That(ascendingList[0].Name, Is.EqualTo("Crab")); + Assert.That(ascendingList[1].Name, Is.EqualTo("Bread")); + Assert.That(ascendingList[2].Name, Is.EqualTo("Ants")); } [Test] @@ -171,9 +165,9 @@ public void ListTasksByPriority() var byPriority = list.GetTasksByPriority(); //assert - Assert.That(byPriority[0].name, Is.EqualTo("Test3")); - Assert.That(byPriority[1].name, Is.EqualTo("Test1")); - Assert.That(byPriority[2].name, Is.EqualTo("Test2")); + Assert.That(byPriority[0].Name, Is.EqualTo("Test3")); + Assert.That(byPriority[1].Name, Is.EqualTo("Test1")); + Assert.That(byPriority[2].Name, Is.EqualTo("Test2")); } } } \ 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 5d81f17b..144e5fbe 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -15,14 +15,14 @@ public void FindATaskById() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test", Priority.High, Category.Work); //act - var tasks = list.GetTaskById(list.id); + var task = list.GetAllTasks().First(); + var found = list.GetTaskById(task.Id); //assert - Assert.That(tasks.Name, Is.EqualTo("Test")); + Assert.That(found?.Name, Is.EqualTo("Test")); } [Test] @@ -30,14 +30,15 @@ public void ChangeTaskNameById() { //arrange ToDoList list = new ToDoList(); - list.AddTask("Test", Priority.High, Category.Work); //act - list.UpdateTaskName(list.id, "UpdatedTest"); + var task = list.GetAllTasks().First(); + list.UpdateTaskName(task.Id, "UpdatedTest"); + var updated = list.GetTaskById(task.Id); //assert - Assert.That(tasks.Name, Is.EqualTo("UpdatedTest")); + Assert.That(updated?.Name, Is.EqualTo("UpdatedTest")); } [Test] @@ -45,28 +46,28 @@ public void TimeCreatedAtIsSet() { //arrange ToDoList list = new ToDoList(); - var currentTime = DateTime.Now; - list.AddTask("Test", Priority.High, Category.Work); //act - var createdAt = list.CreatedAt; + list.AddTask("Test", Priority.High, Category.Work); + var task = list.GetAllTasks().First(); //assert - Assert.That(currentTime, Is.EqualTo(createdAt)); + Assert.That((DateTime.Now - task.CreatedAt).TotalSeconds, Is.LessThan(2)); } + [Test] public void TimeCompletedAtIsSet() { //arrange ToDoList list = new ToDoList(); list.AddTask("Test", Priority.High, Category.Work); + var task = list.GetAllTasks().First(); //act - list.ChangeStatusById(list.id, true); - var completedAt = list.CompletedAt; + list.ChangeStatusById(task.Id, true); //assert - Assert.That(completedAt, Is.EqualTo(null!)); + Assert.That(task.CompletedAt, Is.Not.EqualTo(default(DateTime))); } } }