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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions domain-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
| Classes | Methods/properties | Scenario | Outputs |
|-------------|----------------------------------------------------|--------------------------------------------------------------------|-----------------------------------------------------------------|
| TodoList.cs | Task Add(string title, string description) | Add a task to the tasklist | The added task |
| TodoList.cs | List<Task> GetTasks() | Get all tasks from the Tasklist | The complete tasklist |
| TodoList.cs | Task ChangeTask(string title, bool status) | Change the status of a task based on the title of a task | The updated task |
| TodoList.cs | List<Task> GetCompletedTasks() | Get all tasks that are done | All completed tasks |
| TodoList.cs | List<Task> GetIncompleteTasks() | Get all tasks that are not done | All incomplete tasks |
| TodoList.cs | Task GetTask(string Title) | Get a task based on the title. Return an empty task if not found. | The specified task, an empty task otherwise |
| TodoList.cs | Task RemoveTask(string Title) | Remove a task from the tasklist based on the title of the task | The removed task, an empty task if not found |
| TodoList.cs | List<Task> SortTasksAlphabetically(bool ascending) | Sorts the tasklist alphabetically based on the ascending parameter | The tasklist sorted alphabetically |
| TodoList.cs | Task GetTaskByID(long id) | Get a task by its ID | The specified task, an empty task if not found |
| TodoList.cs | Task UpdateTaskTitle(long id, string title) | Set the title of a task by its ID | The updated task, an empty task if not found |
| TodoList.cs | Task UpdateTaskStatus(long id, bool status) | Set the status of a task by its ID | The updated task, an empty task if not found |
| TodoList.cs | string GetCreationTime() | Get the creation time, id, and title of each task | A string consisting of the ID, title, and datetime of all tasks |
160 changes: 158 additions & 2 deletions tdd-todo-list.CSharp.Main/Extension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,166 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace tdd_todo_list.CSharp.Main
{
public class TodoListExtension
public class TodoListExtension
{
public List<TaskExtension> tasks { get; set; }

public TodoListExtension()
{
tasks = new List<TaskExtension>();

}

public List<long> GetIDs()
{
List<long> ids = new List<long>();
foreach (TaskExtension t in tasks)
{
ids.Add(t.id);
}
return ids;
}

public TaskExtension Add(string title, string description)
{

// TaskExtensions needs different titles
if (tasks.Where(x => x.title == title).Any() || title == "")
{
return new TaskExtension("", "", GetIDs());
}
TaskExtension taskToAdd = new TaskExtension(title, description, GetIDs());
tasks.Add(taskToAdd);
return new TaskExtension(taskToAdd);
}

public List<TaskExtension> GetTasks()
{
return new List<TaskExtension>(tasks);
}

public TaskExtension GetTask(string title)
{
TaskExtension? queried_task = tasks.FirstOrDefault(x => x.title == title) ?? new TaskExtension("", "", GetIDs());

return new TaskExtension(queried_task);
}

public TaskExtension ChangeTask(string title, bool status)
{
TaskExtension? taskToUpdate = tasks.FirstOrDefault(x => x.title == title) ?? new TaskExtension("", "", GetIDs());
taskToUpdate.status = status;
return new TaskExtension(taskToUpdate);
}

public List<TaskExtension> GetCompletedTasks()
{
List<TaskExtension>? completedTasks = tasks.Where(x => x.status).ToList() ?? new List<TaskExtension>();
return new List<TaskExtension>(completedTasks);
}

public List<TaskExtension> GetIncompleteTasks()
{
List<TaskExtension>? completedTasks = tasks.Where(x => !x.status).ToList() ?? new List<TaskExtension>();
return new List<TaskExtension>(completedTasks);
}



public TaskExtension RemoveTask(string title)
{
TaskExtension? taskToRemove = tasks.FirstOrDefault(x => x.title == title) ?? new TaskExtension("", "", GetIDs());
if (taskToRemove.title == "")
{
return taskToRemove;
}
tasks.Remove(taskToRemove);
return new TaskExtension(taskToRemove);
}

public List<TaskExtension> SortTasksAlphabetically(bool ascending)
{
List<TaskExtension> sortedTasks = new List<TaskExtension>();
if (ascending)
{
sortedTasks = tasks.OrderBy(x => x.title).ToList();
}
else
{
sortedTasks = tasks.OrderByDescending(x => x.title).ToList();
}

return new List<TaskExtension>(sortedTasks);
}
public TaskExtension GetTaskByID(long id)
{
TaskExtension? retrievedTask = tasks.FirstOrDefault(x => x.id == id) ?? new TaskExtension("", "", GetIDs());
return new TaskExtension(retrievedTask);
}

public TaskExtension UpdateTaskTitle(long id, string title)
{
TaskExtension? taskToUpdate = tasks.FirstOrDefault(x => x.id == id) ?? new TaskExtension("", "", GetIDs());
taskToUpdate.title = title;
return new TaskExtension(taskToUpdate);
}

public TaskExtension UpdateTaskStatus(long id, bool status)
{
TaskExtension? taskToUpdate = tasks.FirstOrDefault(x => x.id == id) ?? new TaskExtension("", "", GetIDs());
taskToUpdate.status = status;
return new TaskExtension(taskToUpdate);
}

public string GetCreationTime()
{
string creationTime = "";
foreach (TaskExtension task in tasks)
{
creationTime += task.id + " " + task.title + " " + task.creationTime.ToString() + "\n";
}
return creationTime;
}
}


public class TaskExtension
{
public string title { get; set; }
public string description { get; set; }
public bool status { get; set; }
public long id { get; }
public DateTime creationTime = DateTime.Now;
public Random rng = new Random();

public TaskExtension(string title, string description, List<long> usedIDs)
{
this.title = title;
this.description = description;
status = false;
long id = 0;
while (usedIDs.Contains(id))
{
id = rng.NextInt64(0, 1000);
}
this.id = id;
}

public TaskExtension(TaskExtension t)
{
this.title = t.title;
this.description = t.description;
this.status = t.status;
this.id = id;

}


public bool Equals(TaskExtension other)
{
return this.title == other.title && this.id == other.id; //Check whether the identifier of a task are equal
}
}
}
14 changes: 13 additions & 1 deletion tdd-todo-list.CSharp.Main/Program.cs
Original file line number Diff line number Diff line change
@@ -1,2 +1,14 @@
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

using System.ComponentModel;
using tdd_todo_list.CSharp.Main;

TodoListExtension l = new TodoListExtension();
l.Add("Task 1", "work");
l.Add("Task 2", "Coffee");
l.Add("Task 3", "Lunch");
l.Add("Task 4", "Go Home");

string time = l.GetCreationTime();
Console.WriteLine(time);

111 changes: 111 additions & 0 deletions tdd-todo-list.CSharp.Main/ToDoList.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,123 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace tdd_todo_list.CSharp.Main
{

public class TodoList
{
public List<Task> tasks { get; set; }

public TodoList()
{
tasks = new List<Task>();

}



public Task Add(string title, string description)
{
// Tasks needs different titles
if (tasks.Where(x => x.title == title).Any() || title == "")
{
return new Task("", "");
}
Task taskToAdd = new Task(title, description);
tasks.Add(taskToAdd);
return new Task(taskToAdd);
}

public List<Task> GetTasks()
{
return new List<Task>(tasks);
}

public Task GetTask(string title)
{
Task? queried_task = tasks.FirstOrDefault(x => x.title == title) ?? new Task("", "");

return new Task(queried_task);
}

public Task ChangeTask(string title, bool status)
{
Task? taskToUpdate = tasks.FirstOrDefault(x => x.title == title) ?? new Task("", "");
taskToUpdate.status = status;
return new Task(taskToUpdate);
}

public List<Task> GetCompletedTasks()
{
List<Task>? completedTasks = tasks.Where(x => x.status).ToList() ?? new List<Task>();
return new List<Task>(completedTasks);
}

public List<Task> GetIncompleteTasks()
{
List<Task>? completedTasks = tasks.Where(x => !x.status).ToList() ?? new List<Task>();
return new List<Task>(completedTasks);
}



public Task RemoveTask(string title)
{
Task? taskToRemove = tasks.FirstOrDefault(x => x.title == title) ?? new Task("", "");
if (taskToRemove.title == "")
{
return taskToRemove;
}
tasks.Remove(taskToRemove);
return new Task(taskToRemove);
}

public List<Task> SortTasksAlphabetically(bool ascending)
{
List<Task> sortedTasks = new List<Task> ();
if (ascending)
{
sortedTasks = tasks.OrderBy(x => x.title).ToList();
}
else
{
sortedTasks = tasks.OrderByDescending(x => x.title).ToList();
}

return new List<Task>(sortedTasks);
}


}

public class Task
{
public string title { get; set; }
public string description { get; set; }
public bool status { get; set; }

public Task(string title, string description)
{
this.title = title;
this.description = description;
status = false;
}

public Task(Task t)
{
this.title = t.title;
this.description = t.description;
status = t.status;
}


public bool Equals(Task other)
{
return this.title == other.title; //Check whether the identifier of a task are equal
}
}
}
Loading
Loading