From fc07b3e5f1ec35bd3dc0e6763477f2b5a4cbb1c4 Mon Sep 17 00:00:00 2001 From: Jakub Mroz Date: Thu, 7 Aug 2025 13:26:30 +0200 Subject: [PATCH 1/6] feat: core tests --- tdd-todo-list.CSharp.Main/Task.cs | 50 ++++ tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs | 17 ++ .../TaskNotFoundException.cs | 12 + tdd-todo-list.CSharp.Main/TaskPriorityEnum.cs | 15 ++ tdd-todo-list.CSharp.Main/ToDoList.cs | 109 +++++++++ tdd-todo-list.CSharp.Test/CoreTests.cs | 213 +++++++++++++++++- 6 files changed, 413 insertions(+), 3 deletions(-) create mode 100644 tdd-todo-list.CSharp.Main/Task.cs create mode 100644 tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs create mode 100644 tdd-todo-list.CSharp.Main/TaskNotFoundException.cs create mode 100644 tdd-todo-list.CSharp.Main/TaskPriorityEnum.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..c6e100d0 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/Task.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class Task + { + private string _taskContent = ""; + private bool _isCompleted = false; + private TaskPriorityEnum _priority; + private DateTime _timeCompleted; + private TimeSpan _timeToComplete; + + public int Id { get; } + public bool IsCompleted { get { return _isCompleted; } } + + public string TaskContent { get { return _taskContent; } } + public TaskPriorityEnum Priority { get { return _priority; } } + + public DateTime TimeCreated { get; } + public DateTime TimeUpdated { get { return _timeCompleted; } } + public TimeSpan TimeToComplete { get { return _timeToComplete; } } + + public TaskCategoryEnum Category { get; set; } + + public void ChangeTaskContent(string taskContent) + { + _taskContent = taskContent; + } + + public Task(int id, string taskContent) + { + Id = id; + _taskContent = taskContent; + } + + public void CompleteTask() + { + _timeCompleted= DateTime.Now; + _timeToComplete = (TimeUpdated - TimeCreated); + + } + + + } + +} diff --git a/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs b/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs new file mode 100644 index 00000000..c00a3609 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public enum TaskCategoryEnum + { + Study, + Work, + Admin + } +} + + diff --git a/tdd-todo-list.CSharp.Main/TaskNotFoundException.cs b/tdd-todo-list.CSharp.Main/TaskNotFoundException.cs new file mode 100644 index 00000000..f40d6453 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/TaskNotFoundException.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class TaskNotFoundException : Exception + { + } +} diff --git a/tdd-todo-list.CSharp.Main/TaskPriorityEnum.cs b/tdd-todo-list.CSharp.Main/TaskPriorityEnum.cs new file mode 100644 index 00000000..54916f4c --- /dev/null +++ b/tdd-todo-list.CSharp.Main/TaskPriorityEnum.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public enum TaskPriorityEnum + { + Low, + Medium, + High + } +} diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 835cb600..01336e76 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -8,5 +8,114 @@ namespace tdd_todo_list.CSharp.Main { public class TodoList { + public readonly List tasks = new(); + + public void AddTask(string taskContent) + { + int id = tasks.Count; + var task = new Task(id, taskContent); + tasks.Add(task); + } + + public void ChangeTaskStatus(string taskName) + { + + } + + public IEnumerable GetAllTasks() + { + throw new NotImplementedException(); + } + + public IEnumerable GetCompletedTasks() + { + throw new NotImplementedException(); + } + + public IEnumerable GetIncompleteTasks() + { + throw new NotImplementedException(); + } + + public Task SearchForTask(string taskContent) + { + throw new NotImplementedException(); + } + + public void RemoveTaskByName(string taskContent) + { + + } + + public void RemoveTaskById(int id) + { + + } + + public IEnumerable GetAlphabeticallySortedTasks(bool ascending) + { + throw new NotImplementedException(); + } + + public void ChangeTaskPriorityByName(string name, TaskPriorityEnum priority) + { + + } + + public void ChangeTaskPriorityById(int id, TaskPriorityEnum priority) + { + + } + + public IEnumerable GetAllTasksByPriority(TaskPriorityEnum priority) + { + throw new NotImplementedException(); + } + + public Task GetTaskByName(string name) + { + throw new NotImplementedException(); + } + + public Task GetTaskById(int id) + { + throw new NotImplementedException(); + } + + public void UpdateTaskNameById(int id, string name) + { + throw new NotImplementedException(); + } + + public void UpdateTaskStatusById(int id) + { + throw new NotImplementedException(); + } + + public Task GetTaskLongestToComplete() + { + throw new NotImplementedException(); + } + + public Task GetTaskShortestToComplete() + { + throw new NotImplementedException(); + } + + public IEnumerable GetTasksWhichTookLongerToCompleteThan(int time) + { + throw new NotImplementedException(); + } + + public void AssignCategoryToTaskById(int id, TaskCategoryEnum category) + { + throw new NotImplementedException(); + } + + public IEnumerable GetTasksByCategory(TaskCategoryEnum category) + { + throw new NotImplementedException(); + } + } } diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 084cce19..03e4f53a 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -8,10 +8,217 @@ public class CoreTests { [Test] - public void FirstTest() + public void Add1TaskTest() { - TodoList core = new TodoList(); - Assert.Pass(); + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + + int expectedTasksNumber = 1; + + Assert.That(todoList.tasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void Add2TasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int expectedTasksNumber = 2; + + Assert.That(todoList.tasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void ChangeTaskStatusTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + + todoList.ChangeTaskStatus(taskContent); + bool expectedCompleteness = true; + + Assert.That(todoList.tasks.First().IsCompleted, Is.EqualTo(expectedCompleteness)); + } + + [Test] + public void GetAllTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + string taskContent3 = "do the dishes3"; + todoList.AddTask(taskContent3); + + int expectedTasksNumber = 3; + + todoList.ChangeTaskStatus(taskContent); + + var allTasks = todoList.GetAllTasks(); + + Assert.That(allTasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void GetCompleteTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int expectedTasksNumber = 1; + + todoList.ChangeTaskStatus(taskContent); + + var completedTasks = todoList.GetCompletedTasks(); + + Assert.That(completedTasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void GetIncompleteTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + string taskContent3 = "do the dishes3"; + todoList.AddTask(taskContent3); + + int expectedTasksNumber = 2; + + todoList.ChangeTaskStatus(taskContent); + + var incompletedTasks = todoList.GetIncompleteTasks(); + + Assert.That(incompletedTasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void GetTaskNotFoundExceptionTest() + { + TodoList todoList = new TodoList(); + + Assert.Throws( () => todoList.GetTaskByName("name") ); + } + + [Test] + public void RemoveTaskTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + int expectedTasksNumber = 0; + + todoList.ChangeTaskStatus(taskContent); + + var allTasks = todoList.GetAllTasks(); + + Assert.That(allTasks.Count, Is.EqualTo(expectedTasksNumber)); + } + + [Test] + public void GetAlphabethicallySortedTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "aaa"; + todoList.AddTask(taskContent); + + string taskContent2 = "bbb"; + todoList.AddTask(taskContent2); + + string taskContent3 = "ccc"; + todoList.AddTask(taskContent3); + + bool ascending = true; + var sortedTasks = todoList.GetAlphabeticallySortedTasks(ascending); + + int expectedTasksNumber = 3; + + Assert.That(sortedTasks.Count, Is.EqualTo(expectedTasksNumber)); + + Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent)); + } + + [Test] + public void GetAlphabethicallyReverseSortedTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "aaa"; + todoList.AddTask(taskContent); + + string taskContent2 = "bbb"; + todoList.AddTask(taskContent2); + + string taskContent3 = "ccc"; + todoList.AddTask(taskContent3); + + bool ascending = false; + var sortedTasks = todoList.GetAlphabeticallySortedTasks(ascending); + + int expectedTasksNumber = 3; + + Assert.That(sortedTasks.Count, Is.EqualTo(expectedTasksNumber)); + + Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent3)); + } + + [Test] + public void ChangeTaskPriorityTest() + { + TodoList todoList = new TodoList(); + string taskContent = "aaa"; + todoList.AddTask(taskContent); + + todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.High); + + TaskPriorityEnum expectedTaskPriority = TaskPriorityEnum.High; + + var task = todoList.GetTaskByName("name"); + + Assert.That(task.Priority, Is.EqualTo(expectedTaskPriority)); + } + + [Test] + public void GetHighPriorityTasksTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + string taskContent3 = "do the dishes3"; + todoList.AddTask(taskContent3); + + int expectedTasksNumber = 2; + + todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.High); + todoList.ChangeTaskPriorityByName(taskContent2, TaskPriorityEnum.High); + + var incompletedTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); + + Assert.That(incompletedTasks.Count, Is.EqualTo(expectedTasksNumber)); } } } \ No newline at end of file From 5c70ba2c49b9d9bc69a2cc1e41e5934614928ecf Mon Sep 17 00:00:00 2001 From: Jakub Mroz Date: Thu, 7 Aug 2025 14:18:42 +0200 Subject: [PATCH 2/6] feat: core implemented --- tdd-todo-list.CSharp.Main/Task.cs | 13 ++++- tdd-todo-list.CSharp.Main/ToDoList.cs | 72 ++++++++++++++++---------- tdd-todo-list.CSharp.Test/CoreTests.cs | 12 +++-- 3 files changed, 64 insertions(+), 33 deletions(-) diff --git a/tdd-todo-list.CSharp.Main/Task.cs b/tdd-todo-list.CSharp.Main/Task.cs index c6e100d0..82fb8c5f 100644 --- a/tdd-todo-list.CSharp.Main/Task.cs +++ b/tdd-todo-list.CSharp.Main/Task.cs @@ -13,6 +13,7 @@ public class Task private TaskPriorityEnum _priority; private DateTime _timeCompleted; private TimeSpan _timeToComplete; + private TaskCategoryEnum _category; public int Id { get; } public bool IsCompleted { get { return _isCompleted; } } @@ -24,7 +25,7 @@ public class Task public DateTime TimeUpdated { get { return _timeCompleted; } } public TimeSpan TimeToComplete { get { return _timeToComplete; } } - public TaskCategoryEnum Category { get; set; } + public TaskCategoryEnum Category { get { return _category; } } public void ChangeTaskContent(string taskContent) { @@ -41,7 +42,17 @@ public void CompleteTask() { _timeCompleted= DateTime.Now; _timeToComplete = (TimeUpdated - TimeCreated); + _isCompleted = true; + } + public void ChangeTaskPriority(TaskPriorityEnum priority) + { + _priority = priority; + } + + public void ChangeTaskCategory(TaskCategoryEnum category) + { + _category = category; } diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 01336e76..c2d8f65b 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml.Linq; namespace tdd_todo_list.CSharp.Main { @@ -19,102 +20,119 @@ public void AddTask(string taskContent) public void ChangeTaskStatus(string taskName) { - + tasks.Where(t => t.TaskContent == taskName).First().CompleteTask(); } public IEnumerable GetAllTasks() { - throw new NotImplementedException(); + return tasks; } public IEnumerable GetCompletedTasks() { - throw new NotImplementedException(); + return tasks.Where(t => t.IsCompleted == true).ToList(); } public IEnumerable GetIncompleteTasks() { - throw new NotImplementedException(); + return tasks.Where(t => t.IsCompleted == false).ToList(); } public Task SearchForTask(string taskContent) { - throw new NotImplementedException(); + return tasks.Where(t => t.TaskContent == taskContent).First(); } public void RemoveTaskByName(string taskContent) { - + var taskToRemove = tasks.Where(t => t.TaskContent == taskContent).First(); + tasks.Remove(taskToRemove); } public void RemoveTaskById(int id) { - + var taskToRemove = tasks.Where(t => t.Id == id).First(); + tasks.Remove(taskToRemove); } public IEnumerable GetAlphabeticallySortedTasks(bool ascending) { - throw new NotImplementedException(); + if (ascending) + return tasks.OrderByDescending(task => task.TaskContent).ToArray(); + + return tasks.OrderBy(task => task.TaskContent).ToArray(); } public void ChangeTaskPriorityByName(string name, TaskPriorityEnum priority) - { - + { + tasks.Where(t => t.TaskContent == name).First().ChangeTaskPriority(priority); } public void ChangeTaskPriorityById(int id, TaskPriorityEnum priority) { - + tasks.Where(t => t.Id == id).First().ChangeTaskPriority(priority); } public IEnumerable GetAllTasksByPriority(TaskPriorityEnum priority) { - throw new NotImplementedException(); + return tasks.Where(t => t.Priority == priority).ToList(); } public Task GetTaskByName(string name) { - throw new NotImplementedException(); + var task = tasks.Where(t => t.TaskContent == name).FirstOrDefault(); + + if (task != null) + return task; + + else + throw new TaskNotFoundException(); } public Task GetTaskById(int id) - { - throw new NotImplementedException(); + { + return tasks.Where(t => t.Id == id).First(); } - public void UpdateTaskNameById(int id, string name) + public void UpdateTaskNameById(int id, string newName) { - throw new NotImplementedException(); + var task = GetTaskById(id); + task.ChangeTaskContent(newName); } public void UpdateTaskStatusById(int id) - { - throw new NotImplementedException(); + { + var task = GetTaskById(id); + task.CompleteTask(); } public Task GetTaskLongestToComplete() { - throw new NotImplementedException(); + var task = tasks.OrderByDescending(t => t.TimeToComplete).First(); + return task; } public Task GetTaskShortestToComplete() - { - throw new NotImplementedException(); + { + var task = tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderByDescending(t => t.TimeToComplete).First(); + return task; } public IEnumerable GetTasksWhichTookLongerToCompleteThan(int time) - { - throw new NotImplementedException(); + { + TimeSpan timeSpan = TimeSpan.FromHours(time); + return tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderByDescending(t => t.TimeToComplete).ToList(); } public void AssignCategoryToTaskById(int id, TaskCategoryEnum category) - { - throw new NotImplementedException(); + { + var task = GetTaskById(id); + task.ChangeTaskCategory(category); } public IEnumerable GetTasksByCategory(TaskCategoryEnum category) { - throw new NotImplementedException(); + return tasks.Where(task => task.Category == category).ToList(); } } diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 03e4f53a..bcc8b7c9 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -116,6 +116,8 @@ public void GetIncompleteTasksTest() public void GetTaskNotFoundExceptionTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); Assert.Throws( () => todoList.GetTaskByName("name") ); } @@ -129,7 +131,7 @@ public void RemoveTaskTest() int expectedTasksNumber = 0; - todoList.ChangeTaskStatus(taskContent); + todoList.RemoveTaskByName(taskContent); var allTasks = todoList.GetAllTasks(); @@ -163,7 +165,7 @@ public void GetAlphabethicallySortedTasksTest() public void GetAlphabethicallyReverseSortedTasksTest() { TodoList todoList = new TodoList(); - string taskContent = "aaa"; + string taskContent = "ddd"; todoList.AddTask(taskContent); string taskContent2 = "bbb"; @@ -172,14 +174,14 @@ public void GetAlphabethicallyReverseSortedTasksTest() string taskContent3 = "ccc"; todoList.AddTask(taskContent3); - bool ascending = false; + bool ascending = true; var sortedTasks = todoList.GetAlphabeticallySortedTasks(ascending); int expectedTasksNumber = 3; Assert.That(sortedTasks.Count, Is.EqualTo(expectedTasksNumber)); - Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent3)); + Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent)); } [Test] @@ -193,7 +195,7 @@ public void ChangeTaskPriorityTest() TaskPriorityEnum expectedTaskPriority = TaskPriorityEnum.High; - var task = todoList.GetTaskByName("name"); + var task = todoList.GetTaskByName(taskContent); Assert.That(task.Priority, Is.EqualTo(expectedTaskPriority)); } From a23ca91852607a4be2370387ca466f3294d4c3c8 Mon Sep 17 00:00:00 2001 From: Jakub Mroz Date: Thu, 7 Aug 2025 15:36:29 +0200 Subject: [PATCH 3/6] feat: extension tests --- tdd-todo-list.CSharp.Main/Task.cs | 5 +- tdd-todo-list.CSharp.Main/ToDoList.cs | 8 +- tdd-todo-list.CSharp.Test/ExtensionTests.cs | 209 +++++++++++++++++++- 3 files changed, 212 insertions(+), 10 deletions(-) diff --git a/tdd-todo-list.CSharp.Main/Task.cs b/tdd-todo-list.CSharp.Main/Task.cs index 82fb8c5f..6f9337ae 100644 --- a/tdd-todo-list.CSharp.Main/Task.cs +++ b/tdd-todo-list.CSharp.Main/Task.cs @@ -22,7 +22,7 @@ public class Task public TaskPriorityEnum Priority { get { return _priority; } } public DateTime TimeCreated { get; } - public DateTime TimeUpdated { get { return _timeCompleted; } } + public DateTime TimeCompleted { get { return _timeCompleted; } } public TimeSpan TimeToComplete { get { return _timeToComplete; } } public TaskCategoryEnum Category { get { return _category; } } @@ -36,12 +36,13 @@ public Task(int id, string taskContent) { Id = id; _taskContent = taskContent; + TimeCreated = DateTime.Now; } public void CompleteTask() { _timeCompleted= DateTime.Now; - _timeToComplete = (TimeUpdated - TimeCreated); + _timeToComplete = (TimeCompleted - TimeCreated); _isCompleted = true; } diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index c2d8f65b..f96f501d 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -114,14 +114,14 @@ public Task GetTaskLongestToComplete() public Task GetTaskShortestToComplete() { - var task = tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderByDescending(t => t.TimeToComplete).First(); + var task = tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderBy(t => t.TimeToComplete).FirstOrDefault(); return task; } - public IEnumerable GetTasksWhichTookLongerToCompleteThan(int time) + public IEnumerable GetTasksWhichTookLongerToCompleteThan(int seconds) { - TimeSpan timeSpan = TimeSpan.FromHours(time); - return tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderByDescending(t => t.TimeToComplete).ToList(); + TimeSpan timeSpan = TimeSpan.FromSeconds(seconds); + return tasks.Where(task => task.TimeToComplete > timeSpan).OrderByDescending(t => t.TimeToComplete).ToList(); } public void AssignCategoryToTaskById(int id, TaskCategoryEnum category) diff --git a/tdd-todo-list.CSharp.Test/ExtensionTests.cs b/tdd-todo-list.CSharp.Test/ExtensionTests.cs index bdc82ad7..099cc103 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -1,18 +1,219 @@ -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 GetTaskByIdTest() { - _extension = new TodoListExtension(); + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + string taskContent3 = "do the dishes3"; + todoList.AddTask(taskContent3); + + int idOfFirstTask = 0; + + var task = todoList.GetTaskById(idOfFirstTask); + + Assert.That(task.TaskContent, Is.EqualTo(taskContent)); + } + + [Test] + public void UpdateTaskContentByIdTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + int idOfFirstTask = 0; + string updatedTaskContent = "do not do the dishes"; + + todoList.UpdateTaskNameById(idOfFirstTask, updatedTaskContent); + + var task = todoList.GetTaskById(idOfFirstTask); + + Assert.That(task.TaskContent, Is.EqualTo(updatedTaskContent)); + } + + [Test] + public void UpdateTaskStatusByIdTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + int idOfFirstTask = 0; + + todoList.UpdateTaskStatusById(idOfFirstTask); + + var task = todoList.GetTaskById(idOfFirstTask); + + bool expectedCompletionStatus = true; + + Assert.That(task.IsCompleted, Is.EqualTo(expectedCompletionStatus)); + } + + [Test] + public void TaskCreationTimeTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + int idOfFirstTask = 0; + + var task = todoList.GetTaskById(idOfFirstTask); + + Assert.That(task.TimeCreated, Is.Not.EqualTo(DateTime.MinValue)); + } + + [Test] + public void TaskCompletionTimeTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + int idOfFirstTask = 0; + + todoList.UpdateTaskStatusById(idOfFirstTask); + + var task = todoList.GetTaskById(idOfFirstTask); + + Assert.That(task.TimeCompleted, Is.Not.EqualTo(DateTime.MinValue)); + } + + [Test] + public void GetTaskWithMaximalCompletionTimeTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int idOfFirstTask = 0; + int idOfSecondTask = 1; + + todoList.UpdateTaskStatusById(idOfSecondTask); + todoList.UpdateTaskStatusById(idOfFirstTask); + + var task = todoList.GetTaskLongestToComplete(); + + Assert.That(task.Id, Is.EqualTo(idOfFirstTask)); + } + + [Test] + public void GetTaskWithMinimumCompletionTimeTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int idOfFirstTask = 0; + int idOfSecondTask = 1; + + Thread.Sleep(1000); + todoList.UpdateTaskStatusById(idOfSecondTask); + Thread.Sleep(1000); + todoList.UpdateTaskStatusById(idOfFirstTask); + + var task = todoList.GetTaskShortestToComplete(); + + Assert.That(task.Id, Is.EqualTo(idOfSecondTask)); + } + + [Test] + public void GetTaskWithGivenCompletionTimeTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int idOfFirstTask = 0; + int idOfSecondTask = 1; + + todoList.UpdateTaskStatusById(idOfSecondTask); + Thread.Sleep(1000); + todoList.UpdateTaskStatusById(idOfFirstTask); + + int thresholdSeconds = 1; + int expectedTasksNumber = 1; + var tasks = todoList.GetTasksWhichTookLongerToCompleteThan(thresholdSeconds); + + Assert.That(tasks.Count, Is.EqualTo(expectedTasksNumber)); + Assert.That(tasks.FirstOrDefault().Id, Is.EqualTo(idOfFirstTask)); + } + + [Test] + public void ChangeTaskPriorityTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + int idOfFirstTask = 0; + int idOfSecondTask = 1; + + todoList.ChangeTaskPriorityById(idOfFirstTask, TaskPriorityEnum.High); + + TaskPriorityEnum expectedTaskPriorityValue = TaskPriorityEnum.High; + + var task = todoList.GetTaskById(idOfFirstTask); + + Assert.That(task.Priority, Is.EqualTo(expectedTaskPriorityValue)); + } + + [Test] + public void GetTasksByPriorityTest() + { + TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; + todoList.AddTask(taskContent); + + string taskContent2 = "do the dishes2"; + todoList.AddTask(taskContent2); + + string taskContent3 = "do the dishes3"; + todoList.AddTask(taskContent3); + + int idOfFirstTask = 0; + int idOfSecondTask = 1; + int idOfThirdTask = 2; + + todoList.ChangeTaskPriorityById(idOfFirstTask, TaskPriorityEnum.High); + todoList.ChangeTaskPriorityById(idOfThirdTask, TaskPriorityEnum.High); + + TaskPriorityEnum expectedTaskPriorityValue = TaskPriorityEnum.High; + int expectedTasks = 2; + + var tasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); + + Assert.That(tasks.Count(), Is.EqualTo(expectedTasks)); + + Assert.That(tasks.FirstOrDefault().Priority, Is.EqualTo(expectedTaskPriorityValue)); } } } From a348729c428738d797b331cffa94e86897f1bdab Mon Sep 17 00:00:00 2001 From: JakubMroz4 Date: Thu, 7 Aug 2025 21:33:20 +0200 Subject: [PATCH 4/6] feat: ToDoList refactor, ITodoTask interface --- tdd-todo-list.CSharp.Main/ITodoTask.cs | 27 ++++ tdd-todo-list.CSharp.Main/MockTask.cs | 52 ++++++++ tdd-todo-list.CSharp.Main/ToDoList.cs | 34 +++-- .../{Task.cs => TodoTask.cs} | 13 +- tdd-todo-list.CSharp.Test/CoreTests.cs | 123 ++++++++++-------- tdd-todo-list.CSharp.Test/ExtensionTests.cs | 94 ++++++++----- 6 files changed, 232 insertions(+), 111 deletions(-) create mode 100644 tdd-todo-list.CSharp.Main/ITodoTask.cs create mode 100644 tdd-todo-list.CSharp.Main/MockTask.cs rename tdd-todo-list.CSharp.Main/{Task.cs => TodoTask.cs} (90%) diff --git a/tdd-todo-list.CSharp.Main/ITodoTask.cs b/tdd-todo-list.CSharp.Main/ITodoTask.cs new file mode 100644 index 00000000..385abfed --- /dev/null +++ b/tdd-todo-list.CSharp.Main/ITodoTask.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public interface ITodoTask + { + public int Id { get; } + public bool IsCompleted { get; } + public string TaskContent { get; } + public TaskPriorityEnum Priority { get; } + public DateTime TimeCreated { get; } + public DateTime TimeCompleted { get; } + public TimeSpan TimeToComplete { get; } + public TaskCategoryEnum Category { get; } + + public void CompleteTask(); + public void ChangeTaskPriority(TaskPriorityEnum priority); + public void ChangeTaskContent(string content); + public void ChangeTaskCategory(TaskCategoryEnum category); + + + } +} diff --git a/tdd-todo-list.CSharp.Main/MockTask.cs b/tdd-todo-list.CSharp.Main/MockTask.cs new file mode 100644 index 00000000..041fb8eb --- /dev/null +++ b/tdd-todo-list.CSharp.Main/MockTask.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class MockTask : ITodoTask + { + public MockTask() + { + + } + + public int Id => throw new NotImplementedException(); + + public bool IsCompleted => throw new NotImplementedException(); + + public string TaskContent => throw new NotImplementedException(); + + public TaskPriorityEnum Priority => throw new NotImplementedException(); + + public DateTime TimeCreated => throw new NotImplementedException(); + + public DateTime TimeCompleted => throw new NotImplementedException(); + + public TimeSpan TimeToComplete => throw new NotImplementedException(); + + public TaskCategoryEnum Category => throw new NotImplementedException(); + + public void ChangeTaskCategory(TaskCategoryEnum category) + { + throw new NotImplementedException(); + } + + public void ChangeTaskContent(string content) + { + throw new NotImplementedException(); + } + + public void ChangeTaskPriority(TaskPriorityEnum priority) + { + throw new NotImplementedException(); + } + + public void CompleteTask() + { + throw new NotImplementedException(); + } + } +} diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index f96f501d..d245213f 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -9,12 +9,10 @@ namespace tdd_todo_list.CSharp.Main { public class TodoList { - public readonly List tasks = new(); + public readonly List tasks = new(); - public void AddTask(string taskContent) + public void AddTask(ITodoTask task) { - int id = tasks.Count; - var task = new Task(id, taskContent); tasks.Add(task); } @@ -23,22 +21,22 @@ public void ChangeTaskStatus(string taskName) tasks.Where(t => t.TaskContent == taskName).First().CompleteTask(); } - public IEnumerable GetAllTasks() + public IEnumerable GetAllTasks() { return tasks; } - public IEnumerable GetCompletedTasks() + public IEnumerable GetCompletedTasks() { return tasks.Where(t => t.IsCompleted == true).ToList(); } - public IEnumerable GetIncompleteTasks() + public IEnumerable GetIncompleteTasks() { return tasks.Where(t => t.IsCompleted == false).ToList(); } - public Task SearchForTask(string taskContent) + public ITodoTask SearchForTask(string taskContent) { return tasks.Where(t => t.TaskContent == taskContent).First(); } @@ -55,12 +53,12 @@ public void RemoveTaskById(int id) tasks.Remove(taskToRemove); } - public IEnumerable GetAlphabeticallySortedTasks(bool ascending) + public IEnumerable GetAlphabeticallySortedTasks(bool ascending) { if (ascending) - return tasks.OrderByDescending(task => task.TaskContent).ToArray(); + return tasks.OrderBy(task => task.TaskContent).ToArray(); - return tasks.OrderBy(task => task.TaskContent).ToArray(); + return tasks.OrderByDescending(task => task.TaskContent).ToArray(); } public void ChangeTaskPriorityByName(string name, TaskPriorityEnum priority) @@ -73,12 +71,12 @@ public void ChangeTaskPriorityById(int id, TaskPriorityEnum priority) tasks.Where(t => t.Id == id).First().ChangeTaskPriority(priority); } - public IEnumerable GetAllTasksByPriority(TaskPriorityEnum priority) + public IEnumerable GetAllTasksByPriority(TaskPriorityEnum priority) { return tasks.Where(t => t.Priority == priority).ToList(); } - public Task GetTaskByName(string name) + public ITodoTask GetTaskByName(string name) { var task = tasks.Where(t => t.TaskContent == name).FirstOrDefault(); @@ -89,7 +87,7 @@ public Task GetTaskByName(string name) throw new TaskNotFoundException(); } - public Task GetTaskById(int id) + public ITodoTask GetTaskById(int id) { return tasks.Where(t => t.Id == id).First(); } @@ -106,19 +104,19 @@ public void UpdateTaskStatusById(int id) task.CompleteTask(); } - public Task GetTaskLongestToComplete() + public ITodoTask GetTaskLongestToComplete() { var task = tasks.OrderByDescending(t => t.TimeToComplete).First(); return task; } - public Task GetTaskShortestToComplete() + public ITodoTask GetTaskShortestToComplete() { var task = tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderBy(t => t.TimeToComplete).FirstOrDefault(); return task; } - public IEnumerable GetTasksWhichTookLongerToCompleteThan(int seconds) + public IEnumerable GetTasksWhichTookLongerToCompleteThan(int seconds) { TimeSpan timeSpan = TimeSpan.FromSeconds(seconds); return tasks.Where(task => task.TimeToComplete > timeSpan).OrderByDescending(t => t.TimeToComplete).ToList(); @@ -130,7 +128,7 @@ public void AssignCategoryToTaskById(int id, TaskCategoryEnum category) task.ChangeTaskCategory(category); } - public IEnumerable GetTasksByCategory(TaskCategoryEnum category) + public IEnumerable GetTasksByCategory(TaskCategoryEnum category) { return tasks.Where(task => task.Category == category).ToList(); } diff --git a/tdd-todo-list.CSharp.Main/Task.cs b/tdd-todo-list.CSharp.Main/TodoTask.cs similarity index 90% rename from tdd-todo-list.CSharp.Main/Task.cs rename to tdd-todo-list.CSharp.Main/TodoTask.cs index 6f9337ae..f59db31d 100644 --- a/tdd-todo-list.CSharp.Main/Task.cs +++ b/tdd-todo-list.CSharp.Main/TodoTask.cs @@ -6,11 +6,11 @@ namespace tdd_todo_list.CSharp.Main { - public class Task + public class TodoTask : ITodoTask { private string _taskContent = ""; private bool _isCompleted = false; - private TaskPriorityEnum _priority; + private TaskPriorityEnum _priority = TaskPriorityEnum.Medium; private DateTime _timeCompleted; private TimeSpan _timeToComplete; private TaskCategoryEnum _category; @@ -27,16 +27,15 @@ public class Task public TaskCategoryEnum Category { get { return _category; } } - public void ChangeTaskContent(string taskContent) + public TodoTask(int id, string taskContent) { + Id = id; _taskContent = taskContent; + TimeCreated = DateTime.Now; } - - public Task(int id, string taskContent) + public void ChangeTaskContent(string taskContent) { - Id = id; _taskContent = taskContent; - TimeCreated = DateTime.Now; } public void CompleteTask() diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index bcc8b7c9..130a2d3b 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -11,8 +11,9 @@ public class CoreTests public void Add1TaskTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + + var task1 = new TodoTask(0, "do the dishes"); + todoList.AddTask(task1); int expectedTasksNumber = 1; @@ -24,11 +25,12 @@ public void Add1TaskTest() public void Add2TasksTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var task1 = new TodoTask(0, "do the dishes"); + todoList.AddTask(task1); + + var task2 = new TodoTask(1, "do the dishes 2"); + todoList.AddTask(task2); int expectedTasksNumber = 2; @@ -39,8 +41,10 @@ public void Add2TasksTest() public void ChangeTaskStatusTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); todoList.ChangeTaskStatus(taskContent); @@ -53,18 +57,17 @@ public void ChangeTaskStatusTest() public void GetAllTasksTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var task1 = new TodoTask(0, "do the dishes"); + todoList.AddTask(task1); - string taskContent3 = "do the dishes3"; - todoList.AddTask(taskContent3); + var task2 = new TodoTask(1, "do the dishes2"); + todoList.AddTask(task2); - int expectedTasksNumber = 3; + var task3 = new TodoTask(2, "do the dishes3"); + todoList.AddTask(task3); - todoList.ChangeTaskStatus(taskContent); + int expectedTasksNumber = 3; var allTasks = todoList.GetAllTasks(); @@ -75,11 +78,13 @@ public void GetAllTasksTest() public void GetCompleteTasksTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var task2 = new TodoTask(1, "do the dishes2"); + todoList.AddTask(task2); int expectedTasksNumber = 1; @@ -88,20 +93,23 @@ public void GetCompleteTasksTest() var completedTasks = todoList.GetCompletedTasks(); Assert.That(completedTasks.Count, Is.EqualTo(expectedTasksNumber)); + Assert.That(completedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent)); } [Test] public void GetIncompleteTasksTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var task2 = new TodoTask(1, "do the dishes2"); + todoList.AddTask(task2); - string taskContent3 = "do the dishes3"; - todoList.AddTask(taskContent3); + var task3 = new TodoTask(2, "do the dishes3"); + todoList.AddTask(task3); int expectedTasksNumber = 2; @@ -116,8 +124,9 @@ public void GetIncompleteTasksTest() public void GetTaskNotFoundExceptionTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + + var task1 = new TodoTask(0, "do the dishes"); + todoList.AddTask(task1); Assert.Throws( () => todoList.GetTaskByName("name") ); } @@ -126,8 +135,10 @@ public void GetTaskNotFoundExceptionTest() public void RemoveTaskTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); int expectedTasksNumber = 0; @@ -143,13 +154,14 @@ public void GetAlphabethicallySortedTasksTest() { TodoList todoList = new TodoList(); string taskContent = "aaa"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "bbb"; - todoList.AddTask(taskContent2); + var task2 = new TodoTask(1, "bbb"); + todoList.AddTask(task2); - string taskContent3 = "ccc"; - todoList.AddTask(taskContent3); + var task3 = new TodoTask(2, "ccc"); + todoList.AddTask(task3); bool ascending = true; var sortedTasks = todoList.GetAlphabeticallySortedTasks(ascending); @@ -165,31 +177,34 @@ public void GetAlphabethicallySortedTasksTest() public void GetAlphabethicallyReverseSortedTasksTest() { TodoList todoList = new TodoList(); - string taskContent = "ddd"; - todoList.AddTask(taskContent); + var taskContent = "ddd"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "bbb"; - todoList.AddTask(taskContent2); + var taskContent2 = "fff"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); - string taskContent3 = "ccc"; - todoList.AddTask(taskContent3); + var task3 = new TodoTask(2, "ccc"); + todoList.AddTask(task3); - bool ascending = true; + bool ascending = false; var sortedTasks = todoList.GetAlphabeticallySortedTasks(ascending); int expectedTasksNumber = 3; Assert.That(sortedTasks.Count, Is.EqualTo(expectedTasksNumber)); - - Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent)); + Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent2)); } [Test] public void ChangeTaskPriorityTest() { TodoList todoList = new TodoList(); - string taskContent = "aaa"; - todoList.AddTask(taskContent); + + var taskContent = "ddd"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.High); @@ -204,23 +219,29 @@ public void ChangeTaskPriorityTest() public void GetHighPriorityTasksTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); - string taskContent3 = "do the dishes3"; - todoList.AddTask(taskContent3); + var taskContent3 = "ccc"; + var task3 = new TodoTask(2, taskContent3); + todoList.AddTask(task3); - int expectedTasksNumber = 2; + int expectedHighPriorityTasksNumber = 2; + int expectedMediumPriorityTasksNumber = 1; todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.High); todoList.ChangeTaskPriorityByName(taskContent2, TaskPriorityEnum.High); - var incompletedTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); + var highPriorityTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); + Assert.That(highPriorityTasks.Count, Is.EqualTo(expectedHighPriorityTasksNumber)); - Assert.That(incompletedTasks.Count, Is.EqualTo(expectedTasksNumber)); + var mediumPriorityTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.Medium); + Assert.That(mediumPriorityTasks.Count, Is.EqualTo(expectedMediumPriorityTasksNumber)); } } } \ 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 099cc103..903c0f2f 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -14,14 +14,17 @@ public class ExtensionTests public void GetTaskByIdTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); - string taskContent3 = "do the dishes3"; - todoList.AddTask(taskContent3); + var taskContent3 = "ccc"; + var task3 = new TodoTask(2, taskContent3); + todoList.AddTask(task3); int idOfFirstTask = 0; @@ -34,8 +37,9 @@ public void GetTaskByIdTest() public void UpdateTaskContentByIdTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var taskContent = "do the dishes"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); int idOfFirstTask = 0; string updatedTaskContent = "do not do the dishes"; @@ -51,8 +55,10 @@ public void UpdateTaskContentByIdTest() public void UpdateTaskStatusByIdTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + + var taskContent = "do the dishes"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); int idOfFirstTask = 0; @@ -69,8 +75,10 @@ public void UpdateTaskStatusByIdTest() public void TaskCreationTimeTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + + var taskContent = "do the dishes"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); int idOfFirstTask = 0; @@ -83,8 +91,10 @@ public void TaskCreationTimeTest() public void TaskCompletionTimeTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); int idOfFirstTask = 0; @@ -99,11 +109,14 @@ public void TaskCompletionTimeTest() public void GetTaskWithMaximalCompletionTimeTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); + + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); int idOfFirstTask = 0; int idOfSecondTask = 1; @@ -120,11 +133,14 @@ public void GetTaskWithMaximalCompletionTimeTest() public void GetTaskWithMinimumCompletionTimeTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); + + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); int idOfFirstTask = 0; int idOfSecondTask = 1; @@ -143,11 +159,14 @@ public void GetTaskWithMinimumCompletionTimeTest() public void GetTaskWithGivenCompletionTimeTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); + + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); int idOfFirstTask = 0; int idOfSecondTask = 1; @@ -168,11 +187,14 @@ public void GetTaskWithGivenCompletionTimeTest() public void ChangeTaskPriorityTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - todoList.AddTask(taskContent); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var taskContent = "aaa"; + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); + + var taskContent2 = "bbb"; + var task2 = new TodoTask(1, taskContent2); + todoList.AddTask(task2); int idOfFirstTask = 0; int idOfSecondTask = 1; @@ -190,14 +212,16 @@ public void ChangeTaskPriorityTest() public void GetTasksByPriorityTest() { TodoList todoList = new TodoList(); + string taskContent = "do the dishes"; - todoList.AddTask(taskContent); + var task1 = new TodoTask(0, taskContent); + todoList.AddTask(task1); - string taskContent2 = "do the dishes2"; - todoList.AddTask(taskContent2); + var task2 = new TodoTask(1, "do the dishes2"); + todoList.AddTask(task2); - string taskContent3 = "do the dishes3"; - todoList.AddTask(taskContent3); + var task3 = new TodoTask(2, "do the dishes3"); + todoList.AddTask(task3); int idOfFirstTask = 0; int idOfSecondTask = 1; From 119958cbecf8a2362f4f24f164af57d8676b6735 Mon Sep 17 00:00:00 2001 From: JakubMroz4 Date: Thu, 7 Aug 2025 23:21:40 +0200 Subject: [PATCH 5/6] feat: mock TodoTask for testing, domain model, refactored methods --- domain-model.md | 46 ++++++ tdd-todo-list.CSharp.Main/MockTask.cs | 52 ------- tdd-todo-list.CSharp.Main/MockTodoTask.cs | 72 +++++++++ tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs | 1 + tdd-todo-list.CSharp.Main/ToDoList.cs | 36 ++--- tdd-todo-list.CSharp.Test/CoreTests.cs | 21 ++- tdd-todo-list.CSharp.Test/ExtensionTests.cs | 144 +++++++++++------- 7 files changed, 237 insertions(+), 135 deletions(-) create mode 100644 domain-model.md delete mode 100644 tdd-todo-list.CSharp.Main/MockTask.cs create mode 100644 tdd-todo-list.CSharp.Main/MockTodoTask.cs diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 00000000..9299297d --- /dev/null +++ b/domain-model.md @@ -0,0 +1,46 @@ +# Domain Modelling + +## ITodoTask +| Methods/Properties | Scenario | Outputs | +|-----------------------------------------------|-------------------------------------|--------------------------| +| Id | Stores task ID | int | +| CompletionStatus | stores completion status | TaskCompletionStatusEnum | +| TaskContent | task description | string | +| Priority | stores task priority | TaskPriorityEnum | +| TimeCreated | stores time of task creation | DateTime | +| TimeCompleted | stores time of task completion | DateTime | +| TimeToComplete | shows time it took to complete task | TimeSpan | +| Category | stores task category | TaskCategoryEnum | +| CompleteTask() | changes task completion status | | +| ChangeTaskPriority(TaskPriorityEnum priority) | changes priority of the task | | +| ChangeTaskContent(string newContent) | changes content of the task | | +| ChangeTaskCategory(TaskCategoryEnum category) | changes category of the task | | +| | | | +| | | | + + + + +## ToDoList +| Method | Scenario | Outputs | +|-------------------------------------------------------------|--------------------------------------------------------|------------------------------------------------------------| +| AddTask(Task task) | add new task to list | | +| GetAllTasks() | gets all tasks | return all tasks in IEnumerable | +| GetCompletedTasks() | gets all completed tasks | return all completed tasks in IEnumerable | +| GetIncompleteTasks() | gets all incomplete tasks | return all incomplete tasks in IEnumerable | +| RemoveTaskByName(string name) | remove task by its content | | +| RemoveTaskById(int id) | remove task by its id | | +| GetAlphabeticallySortedTasks(bool ascending) | Get all tasks sorted by content | returns sorted tasks in IEnumerable | +| ChangeTaskPriorityByName(string name) | change tasks priority value by name | | +| ChangeTaskPriorityByid(int id) | change tasks priority value by id | | +| GetAllTasksByPriority() | get all tasks sorted by priority | returns tasks sorted by priority in IEnumerable | +| GetTaskByName(string name) | find a task by its name | return ITodoTask | +| GetTaskById(int id) | find a task by id | return ITodoTask | +| UpdateTaskNameById(int id, string newName) | update tasks description by id | | +| CompleteTaskById(int id) | complete task by id | | +| CompleteTaskByName(string name) | complete task by name | | +| GetTaskLongestToComplete() | get task which took the longest to complete | return ITodoTask | +| GetTaskShortestToComplete() | get task which took the shortest to complete | return ITodoTask | +| GetTasksWhichTookLongerToCompleteThan(int seconds) | get task which took longer to complete than given time | IEnumerable | +| AssignCategoryToTaskById(int id, TaskCategoryEnum category) | assign category to task by id | | +| GetTasksByCategory(TaskCategoryEnum category) | get tasks from given category | IEnumerable | diff --git a/tdd-todo-list.CSharp.Main/MockTask.cs b/tdd-todo-list.CSharp.Main/MockTask.cs deleted file mode 100644 index 041fb8eb..00000000 --- a/tdd-todo-list.CSharp.Main/MockTask.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace tdd_todo_list.CSharp.Main -{ - public class MockTask : ITodoTask - { - public MockTask() - { - - } - - public int Id => throw new NotImplementedException(); - - public bool IsCompleted => throw new NotImplementedException(); - - public string TaskContent => throw new NotImplementedException(); - - public TaskPriorityEnum Priority => throw new NotImplementedException(); - - public DateTime TimeCreated => throw new NotImplementedException(); - - public DateTime TimeCompleted => throw new NotImplementedException(); - - public TimeSpan TimeToComplete => throw new NotImplementedException(); - - public TaskCategoryEnum Category => throw new NotImplementedException(); - - public void ChangeTaskCategory(TaskCategoryEnum category) - { - throw new NotImplementedException(); - } - - public void ChangeTaskContent(string content) - { - throw new NotImplementedException(); - } - - public void ChangeTaskPriority(TaskPriorityEnum priority) - { - throw new NotImplementedException(); - } - - public void CompleteTask() - { - throw new NotImplementedException(); - } - } -} diff --git a/tdd-todo-list.CSharp.Main/MockTodoTask.cs b/tdd-todo-list.CSharp.Main/MockTodoTask.cs new file mode 100644 index 00000000..8b5c7346 --- /dev/null +++ b/tdd-todo-list.CSharp.Main/MockTodoTask.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace tdd_todo_list.CSharp.Main +{ + public class MockTodoTask : ITodoTask + { + private int _id; + private string _taskContent = ""; + private bool _isCompleted = false; + private TaskPriorityEnum _priority = TaskPriorityEnum.Medium; + private DateTime _timeCompleted; + private TimeSpan _timeToComplete; + private TaskCategoryEnum _category; + + private DateTime _timeCreated; + + public MockTodoTask(int id, string taskContent, bool isCompleted, TaskPriorityEnum priority, + DateTime timeCompleted, TimeSpan timeToComplete, TaskCategoryEnum category, + DateTime timeCreated) + { + _id = id; + _taskContent = taskContent; + _isCompleted = isCompleted; + _priority = priority; + _timeCompleted = timeCompleted; + _timeToComplete = timeToComplete; + _category = category; + _timeCreated = timeCreated; + + } + + public int Id { get { return _id; } } + + public bool IsCompleted { get { return _isCompleted; } } + + public string TaskContent { get { return _taskContent; } } + + public TaskPriorityEnum Priority { get { return _priority; } } + + public DateTime TimeCreated { get { return _timeCreated; } } + + public DateTime TimeCompleted { get { return _timeCompleted; } } + + public TimeSpan TimeToComplete { get { return _timeToComplete; } } + + public TaskCategoryEnum Category { get { return _category; } } + + public void ChangeTaskCategory(TaskCategoryEnum category) + { + _category = category; + } + + public void ChangeTaskContent(string content) + { + _taskContent = content; + } + + public void ChangeTaskPriority(TaskPriorityEnum priority) + { + _priority = priority; + } + + public void CompleteTask() + { + _isCompleted = true; + } + } +} diff --git a/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs b/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs index c00a3609..ec78dd81 100644 --- a/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs +++ b/tdd-todo-list.CSharp.Main/TaskCategoryEnum.cs @@ -8,6 +8,7 @@ namespace tdd_todo_list.CSharp.Main { public enum TaskCategoryEnum { + None, Study, Work, Admin diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index d245213f..6f993100 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -16,11 +16,6 @@ public void AddTask(ITodoTask task) tasks.Add(task); } - public void ChangeTaskStatus(string taskName) - { - tasks.Where(t => t.TaskContent == taskName).First().CompleteTask(); - } - public IEnumerable GetAllTasks() { return tasks; @@ -36,20 +31,15 @@ public IEnumerable GetIncompleteTasks() return tasks.Where(t => t.IsCompleted == false).ToList(); } - public ITodoTask SearchForTask(string taskContent) - { - return tasks.Where(t => t.TaskContent == taskContent).First(); - } - public void RemoveTaskByName(string taskContent) { - var taskToRemove = tasks.Where(t => t.TaskContent == taskContent).First(); + var taskToRemove = tasks.Where(t => t.TaskContent == taskContent).FirstOrDefault(); tasks.Remove(taskToRemove); } public void RemoveTaskById(int id) { - var taskToRemove = tasks.Where(t => t.Id == id).First(); + var taskToRemove = tasks.Where(t => t.Id == id).FirstOrDefault(); tasks.Remove(taskToRemove); } @@ -63,17 +53,17 @@ public IEnumerable GetAlphabeticallySortedTasks(bool ascending) public void ChangeTaskPriorityByName(string name, TaskPriorityEnum priority) { - tasks.Where(t => t.TaskContent == name).First().ChangeTaskPriority(priority); + tasks.Where(t => t.TaskContent == name).FirstOrDefault().ChangeTaskPriority(priority); } public void ChangeTaskPriorityById(int id, TaskPriorityEnum priority) { - tasks.Where(t => t.Id == id).First().ChangeTaskPriority(priority); + tasks.Where(t => t.Id == id).FirstOrDefault().ChangeTaskPriority(priority); } - public IEnumerable GetAllTasksByPriority(TaskPriorityEnum priority) + public IEnumerable GetAllTasksByPriority() { - return tasks.Where(t => t.Priority == priority).ToList(); + return tasks.OrderByDescending(t => t.Priority).ToArray(); } public ITodoTask GetTaskByName(string name) @@ -89,7 +79,7 @@ public ITodoTask GetTaskByName(string name) public ITodoTask GetTaskById(int id) { - return tasks.Where(t => t.Id == id).First(); + return tasks.Where(t => t.Id == id).FirstOrDefault(); } public void UpdateTaskNameById(int id, string newName) @@ -98,21 +88,27 @@ public void UpdateTaskNameById(int id, string newName) task.ChangeTaskContent(newName); } - public void UpdateTaskStatusById(int id) + public void CompleteTaskById(int id) { var task = GetTaskById(id); task.CompleteTask(); } + public void CompleteTaskByName(string name) + { + var task = GetTaskByName(name); + task.CompleteTask(); + } + public ITodoTask GetTaskLongestToComplete() { - var task = tasks.OrderByDescending(t => t.TimeToComplete).First(); + var task = tasks.OrderByDescending(t => t.TimeToComplete).FirstOrDefault(); return task; } public ITodoTask GetTaskShortestToComplete() { - var task = tasks.Where(task => task.TimeToComplete > TimeSpan.MinValue).OrderBy(t => t.TimeToComplete).FirstOrDefault(); + var task = tasks.Where(t => t.IsCompleted == true).OrderBy(t => t.TimeToComplete).FirstOrDefault(); return task; } diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index 130a2d3b..d21ac2dc 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -47,7 +47,7 @@ public void ChangeTaskStatusTest() todoList.AddTask(task1); - todoList.ChangeTaskStatus(taskContent); + todoList.CompleteTaskByName(taskContent); bool expectedCompleteness = true; Assert.That(todoList.tasks.First().IsCompleted, Is.EqualTo(expectedCompleteness)); @@ -88,7 +88,7 @@ public void GetCompleteTasksTest() int expectedTasksNumber = 1; - todoList.ChangeTaskStatus(taskContent); + todoList.CompleteTaskByName(taskContent); var completedTasks = todoList.GetCompletedTasks(); @@ -113,7 +113,7 @@ public void GetIncompleteTasksTest() int expectedTasksNumber = 2; - todoList.ChangeTaskStatus(taskContent); + todoList.CompleteTaskByName(taskContent); var incompletedTasks = todoList.GetIncompleteTasks(); @@ -231,17 +231,14 @@ public void GetHighPriorityTasksTest() var task3 = new TodoTask(2, taskContent3); todoList.AddTask(task3); - int expectedHighPriorityTasksNumber = 2; - int expectedMediumPriorityTasksNumber = 1; + int totalTasks = 3; - todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.High); - todoList.ChangeTaskPriorityByName(taskContent2, TaskPriorityEnum.High); - - var highPriorityTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); - Assert.That(highPriorityTasks.Count, Is.EqualTo(expectedHighPriorityTasksNumber)); + todoList.ChangeTaskPriorityByName(taskContent, TaskPriorityEnum.Low); + todoList.ChangeTaskPriorityByName(taskContent3, TaskPriorityEnum.High); - var mediumPriorityTasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.Medium); - Assert.That(mediumPriorityTasks.Count, Is.EqualTo(expectedMediumPriorityTasksNumber)); + var prioritySortedTasks = todoList.GetAllTasksByPriority(); + Assert.That(prioritySortedTasks.Count, Is.EqualTo(totalTasks)); + Assert.That(prioritySortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent3)); } } } \ 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 903c0f2f..d49f2c55 100644 --- a/tdd-todo-list.CSharp.Test/ExtensionTests.cs +++ b/tdd-todo-list.CSharp.Test/ExtensionTests.cs @@ -62,7 +62,7 @@ public void UpdateTaskStatusByIdTest() int idOfFirstTask = 0; - todoList.UpdateTaskStatusById(idOfFirstTask); + todoList.CompleteTaskById(idOfFirstTask); var task = todoList.GetTaskById(idOfFirstTask); @@ -98,7 +98,7 @@ public void TaskCompletionTimeTest() int idOfFirstTask = 0; - todoList.UpdateTaskStatusById(idOfFirstTask); + todoList.CompleteTaskById(idOfFirstTask); var task = todoList.GetTaskById(idOfFirstTask); @@ -121,8 +121,8 @@ public void GetTaskWithMaximalCompletionTimeTest() int idOfFirstTask = 0; int idOfSecondTask = 1; - todoList.UpdateTaskStatusById(idOfSecondTask); - todoList.UpdateTaskStatusById(idOfFirstTask); + todoList.CompleteTaskById(idOfSecondTask); + todoList.CompleteTaskById(idOfFirstTask); var task = todoList.GetTaskLongestToComplete(); @@ -134,21 +134,57 @@ public void GetTaskWithMinimumCompletionTimeTest() { TodoList todoList = new TodoList(); - var taskContent = "aaa"; - var task1 = new TodoTask(0, taskContent); + int idOfFirstTask = 0; + int idOfSecondTask = 1; + int idOfThirdTask = 2; + + var task1 = new MockTodoTask( + id: idOfFirstTask, + taskContent: "ccc", + isCompleted: true, + priority: TaskPriorityEnum.Medium, + timeCompleted: DateTime.Parse("Jan 5, 2009"), + timeCreated: DateTime.Parse("Jan 1, 2009"), + timeToComplete: TimeSpan.MaxValue, + category: TaskCategoryEnum.Study + ); todoList.AddTask(task1); - var taskContent2 = "bbb"; - var task2 = new TodoTask(1, taskContent2); + var task2 = new MockTodoTask( + id: idOfSecondTask, + taskContent: "ccc", + isCompleted: true, + priority: TaskPriorityEnum.Medium, + timeCompleted: DateTime.Parse("Jan 5, 2009"), + timeCreated: DateTime.Parse("Jan 1, 2009"), + timeToComplete: TimeSpan.FromSeconds(1), + category: TaskCategoryEnum.Study + ); todoList.AddTask(task2); - int idOfFirstTask = 0; - int idOfSecondTask = 1; + var task3 = new MockTodoTask( + id: idOfThirdTask, + taskContent: "ccc", + isCompleted: true, + priority: TaskPriorityEnum.Medium, + timeCompleted: DateTime.Parse("Jan 5, 2009"), + timeCreated: DateTime.Parse("Jan 1, 2009"), + timeToComplete: TimeSpan.MaxValue, + category: TaskCategoryEnum.Study + ); + todoList.AddTask(task3); - Thread.Sleep(1000); - todoList.UpdateTaskStatusById(idOfSecondTask); - Thread.Sleep(1000); - todoList.UpdateTaskStatusById(idOfFirstTask); + var task4 = new MockTodoTask( + id: idOfThirdTask, + taskContent: "ccc", + isCompleted: false, + priority: TaskPriorityEnum.Medium, + timeCompleted: DateTime.Parse("Jan 5, 2009"), + timeCreated: DateTime.Parse("Jan 1, 2009"), + timeToComplete: TimeSpan.MinValue, + category: TaskCategoryEnum.Study + ); + todoList.AddTask(task4); var task = todoList.GetTaskShortestToComplete(); @@ -160,84 +196,90 @@ public void GetTaskWithGivenCompletionTimeTest() { TodoList todoList = new TodoList(); + int idOfFirstTask = 0; + int idOfSecondTask = 1; + int idOfThirdTask = 2; + var taskContent = "aaa"; - var task1 = new TodoTask(0, taskContent); + var task1 = new TodoTask(idOfFirstTask, taskContent); todoList.AddTask(task1); var taskContent2 = "bbb"; - var task2 = new TodoTask(1, taskContent2); + var task2 = new TodoTask(idOfSecondTask, taskContent2); todoList.AddTask(task2); - int idOfFirstTask = 0; - int idOfSecondTask = 1; + var task3 = new MockTodoTask( + id: idOfThirdTask, + taskContent: "ccc", + isCompleted: true, + priority: TaskPriorityEnum.Medium, + timeCompleted: DateTime.Parse("Jan 5, 2009"), + timeCreated: DateTime.Parse("Jan 1, 2009"), + timeToComplete: TimeSpan.MaxValue, + category: TaskCategoryEnum.Study + ); + todoList.AddTask(task3); - todoList.UpdateTaskStatusById(idOfSecondTask); - Thread.Sleep(1000); - todoList.UpdateTaskStatusById(idOfFirstTask); + todoList.CompleteTaskById(idOfSecondTask); + todoList.CompleteTaskById(idOfFirstTask); - int thresholdSeconds = 1; + int thresholdSeconds = 10; int expectedTasksNumber = 1; var tasks = todoList.GetTasksWhichTookLongerToCompleteThan(thresholdSeconds); Assert.That(tasks.Count, Is.EqualTo(expectedTasksNumber)); - Assert.That(tasks.FirstOrDefault().Id, Is.EqualTo(idOfFirstTask)); + Assert.That(tasks.FirstOrDefault().Id, Is.EqualTo(idOfThirdTask)); } [Test] - public void ChangeTaskPriorityTest() + public void AssignCategoryToTaskTest() { TodoList todoList = new TodoList(); - var taskContent = "aaa"; - var task1 = new TodoTask(0, taskContent); - todoList.AddTask(task1); - - var taskContent2 = "bbb"; - var task2 = new TodoTask(1, taskContent2); - todoList.AddTask(task2); - int idOfFirstTask = 0; - int idOfSecondTask = 1; - todoList.ChangeTaskPriorityById(idOfFirstTask, TaskPriorityEnum.High); + var taskContent = "aaa"; + var task1 = new TodoTask(idOfFirstTask, taskContent); + todoList.AddTask(task1); - TaskPriorityEnum expectedTaskPriorityValue = TaskPriorityEnum.High; + todoList.AssignCategoryToTaskById(idOfFirstTask, TaskCategoryEnum.Admin); var task = todoList.GetTaskById(idOfFirstTask); - Assert.That(task.Priority, Is.EqualTo(expectedTaskPriorityValue)); + Assert.That(task.Category, Is.EqualTo(TaskCategoryEnum.Admin)); } [Test] - public void GetTasksByPriorityTest() + public void GetTasksByCategoryTest() { TodoList todoList = new TodoList(); - string taskContent = "do the dishes"; - var task1 = new TodoTask(0, taskContent); + int idOfFirstTask = 0; + int idOfSecondTask = 1; + int idOfThirdTask = 2; + int idOfFourthTask = 3; + + var task1 = new TodoTask(idOfFirstTask, "aaa"); todoList.AddTask(task1); - var task2 = new TodoTask(1, "do the dishes2"); + var task2 = new TodoTask(idOfSecondTask, "bbb"); todoList.AddTask(task2); - var task3 = new TodoTask(2, "do the dishes3"); + var task3 = new TodoTask(idOfThirdTask, "ccc"); todoList.AddTask(task3); - int idOfFirstTask = 0; - int idOfSecondTask = 1; - int idOfThirdTask = 2; + var task4 = new TodoTask(idOfFourthTask, "ddd"); + todoList.AddTask(task4); - todoList.ChangeTaskPriorityById(idOfFirstTask, TaskPriorityEnum.High); - todoList.ChangeTaskPriorityById(idOfThirdTask, TaskPriorityEnum.High); + todoList.AssignCategoryToTaskById(idOfSecondTask, TaskCategoryEnum.Admin); + todoList.AssignCategoryToTaskById(idOfThirdTask, TaskCategoryEnum.Admin); - TaskPriorityEnum expectedTaskPriorityValue = TaskPriorityEnum.High; - int expectedTasks = 2; + var tasks = todoList.GetTasksByCategory(TaskCategoryEnum.Admin); - var tasks = todoList.GetAllTasksByPriority(TaskPriorityEnum.High); + int expectedTasks = 2; Assert.That(tasks.Count(), Is.EqualTo(expectedTasks)); - - Assert.That(tasks.FirstOrDefault().Priority, Is.EqualTo(expectedTaskPriorityValue)); + Assert.That(tasks.FirstOrDefault().Category, Is.EqualTo(TaskCategoryEnum.Admin)); } } } From f19e64c711850a27ccba9bde350388f205f2f352 Mon Sep 17 00:00:00 2001 From: Jakub Mroz Date: Fri, 8 Aug 2025 08:06:20 +0200 Subject: [PATCH 6/6] fix: alphabetic order --- tdd-todo-list.CSharp.Main/ToDoList.cs | 4 ++-- tdd-todo-list.CSharp.Test/CoreTests.cs | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tdd-todo-list.CSharp.Main/ToDoList.cs b/tdd-todo-list.CSharp.Main/ToDoList.cs index 6f993100..715c1af2 100644 --- a/tdd-todo-list.CSharp.Main/ToDoList.cs +++ b/tdd-todo-list.CSharp.Main/ToDoList.cs @@ -46,9 +46,9 @@ public void RemoveTaskById(int id) public IEnumerable GetAlphabeticallySortedTasks(bool ascending) { if (ascending) - return tasks.OrderBy(task => task.TaskContent).ToArray(); + return tasks.OrderBy(task => task.TaskContent).ToList(); - return tasks.OrderByDescending(task => task.TaskContent).ToArray(); + return tasks.OrderByDescending(task => task.TaskContent).ToList(); } public void ChangeTaskPriorityByName(string name, TaskPriorityEnum priority) diff --git a/tdd-todo-list.CSharp.Test/CoreTests.cs b/tdd-todo-list.CSharp.Test/CoreTests.cs index d21ac2dc..dddd816e 100644 --- a/tdd-todo-list.CSharp.Test/CoreTests.cs +++ b/tdd-todo-list.CSharp.Test/CoreTests.cs @@ -153,14 +153,15 @@ public void RemoveTaskTest() public void GetAlphabethicallySortedTasksTest() { TodoList todoList = new TodoList(); - string taskContent = "aaa"; + string taskContent = "f"; var task1 = new TodoTask(0, taskContent); todoList.AddTask(task1); - var task2 = new TodoTask(1, "bbb"); + string taskContent2 = "a"; + var task2 = new TodoTask(1, taskContent2); todoList.AddTask(task2); - var task3 = new TodoTask(2, "ccc"); + var task3 = new TodoTask(2, "c"); todoList.AddTask(task3); bool ascending = true; @@ -170,7 +171,7 @@ public void GetAlphabethicallySortedTasksTest() Assert.That(sortedTasks.Count, Is.EqualTo(expectedTasksNumber)); - Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent)); + Assert.That(sortedTasks.FirstOrDefault().TaskContent, Is.EqualTo(taskContent2)); } [Test]