Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/onl mdn d 01/tomek #2

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 8 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,23 @@

# Kilka ważnych informacji

Przed przystąpieniem do rozwiązywania zadań przeczytaj poniższe wskazówki
Przed przystąpieniem do rozwiązywania zadań przeczytaj poniższe wskazówki.

## Jak zacząć?

1. Stwórz [*fork*](https://guides.github.com/activities/forking/) repozytorium z zadaniami.
2. Sklonuj fork repozytorium (stworzony w punkcie 1) na swój komputer. Użyj do tego komendy `git clone adres_repozytorium`
Adres możesz znaleźć na stronie forka repozytorium po naciśnięciu w guzik "Clone or download".
3. Rozwiąż zadania i skomituj zmiany do swojego repozytorium. Użyj do tego komend `git add nazwa_pliku`.
1. Sklonuj oryginalne repozytorium na swój komputer (nie klonuj forka). Użyj do tego komendy `git clone adres_repozytorium`
Adres możesz znaleźć na stronie repozytorium po naciśnięciu w guzik "Clone or download".
2. Przełącz się na branch `gitflow-NUMER_KURSU` tego repozytorium (w miejsce NUMER_KURSU podstaw rzeczywistą sygnaturę kursu).
3. Utwórz właśny unikalny branch `feature/X`, wstawiając za `X` unikalną nazwę, np. numer kursu i Twoje inicjały z liczbą.
4. Rozwiąż zadania i skomituj zmiany do swojego brancha z punktu 3. Użyj do tego komend `git add nazwa_pliku`.
Jeżeli chcesz dodać wszystkie zmienione pliki użyj `git add .`
Pamiętaj że kropka na końcu jest ważna!
Następnie skommituj zmiany komendą `git commit -m "nazwa_commita"`
4. Wypchnij zmiany do swojego repozytorium na GitHubie. Użyj do tego komendy `git push origin master`
5. Stwórz [*pull request*](https://help.github.com/articles/creating-a-pull-request) do oryginalnego repozytorium, gdy skończysz wszystkie zadania.
5. Wypchnij zmiany do swojego brancha w repozytorium na GitHubie. Użyj do tego komendy `git push origin feature/` (podstaw za `X` Twoją nazwę brancha).
6. Stwórz [*pull request*](https://help.github.com/articles/creating-a-pull-request) z Twojego brancha do brancha `gitflow-NUMER_KURSU`, gdy skończysz wszystkie zadania.

Poszczególne zadania rozwiązuj w odpowiednich plikach.

### Poszczególne zadania rozwiązuj w odpowiednich plikach.

**Repozytorium z ćwiczeniami zostanie usunięte 2 tygodnie po zakończeniu kursu. Spowoduje to też usunięcie wszystkich forków, które są zrobione z tego repozytorium.**


## Warsztat TaskManager

Jest to gotowa - wzorcowa wersja warsztatu TaskManager.
46 changes: 46 additions & 0 deletions TaskManager.Tests/MockRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using TaskManager.BusinessLogic;

namespace TaskManager.Tests
{
public class MockRepository : IRepository
{
private int _taskId = 0;
private List<TaskItem> _tasks = new List<TaskItem>();

private List<User> _users = new List<User> { new User(1, "Ja") };

public async Task<User[]> GetAllUsersAsync() => _users.ToArray();

public async Task<User> GetUserByIdAsync(int userId) => _users.FirstOrDefault(u => u.Id == userId);

public async Task<int> CreateTaskItemAsync(TaskItem newTaskItem)
{
var newTask = new TaskItem(newTaskItem.Id == 0 ? ++_taskId : newTaskItem.Id, newTaskItem.Description, newTaskItem.CreatedBy, newTaskItem.DueDate);
_tasks.Add(newTask);
return newTask.Id;
}

public async Task<bool> UpdateTaskItemAsync(TaskItem newTaskItem)
{
var result = await DeleteTaskItemAsync(newTaskItem.Id);
if (result)
_tasks.Add(newTaskItem);
return result;
}

public async Task<bool> DeleteTaskItemAsync(int taskItemId)
{
var task = await GetTaskItemByIdAsync(taskItemId);
return _tasks.Remove(task);
}

public async Task<TaskItem> GetTaskItemByIdAsync(int taskItemId) => _tasks.Find(t => t.Id == taskItemId);

public async Task<TaskItem[]> GetAllTaskItemsAsync() => _tasks.ToArray();

public async Task<TaskItem[]> GetTaskItemsByStatusAsync(TaskItemStatus status) => _tasks.Where(t => t.Status == status).ToArray();

public async Task<TaskItem[]> GetTaskItemsByDescriptionAsync(string description) =>
_tasks.FindAll(t => t.Description.Contains(description, StringComparison.InvariantCultureIgnoreCase)).ToArray();
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
//Task i TaskStatus już istnieją w przestrzeni System.Threading.Tasks, która jest automatycznie importowana.
//Musimy rozwiązać konflikt nazw stosując aliasy.
using Task = TaskManager.BusinessLogic.Task;
using TaskStatus = TaskManager.BusinessLogic.TaskStatus;
using TaskManager.BusinessLogic;

namespace TaskManager.Tests
{
public class TaskTests
public class TaskItemTests
{
private User _createdBy = new User(1, "Ja");

[Fact]
public void Should_CreateTask_WithAutoIncrementedId()
{
var task1 = new Task("Test task 1", null);
var task2 = new Task("Test task 2", null);
var task1 = new TaskItem(1, "Test task 1", _createdBy, null);
var task2 = new TaskItem(2, "Test task 2", _createdBy, null);

Assert.True(task1.Id > 0);
Assert.Equal(task1.Id + 1, task2.Id);
Assert.True(task1.Id < task2.Id);
}

[Fact]
public void Should_SetCreationDate_WhenCreatingTask()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);
var difference = DateTime.Now - task.CreationDate;

Assert.True(difference.TotalSeconds < 1);
Expand All @@ -30,34 +29,34 @@ public void Should_SetCreationDate_WhenCreatingTask()
public void Should_SetDueDate_WhenProvided()
{
var dueDate = DateTime.Now.AddDays(7);
var task = new Task("Test task", dueDate);
var task = new TaskItem(1, "Test task", _createdBy, dueDate);

Assert.Equal(dueDate, task.DueDate);
}

[Fact]
public void Should_SetStatusToTodo_WhenTaskIsCreated()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);

Assert.Equal(TaskStatus.ToDo, task.Status);
Assert.Equal(TaskItemStatus.ToDo, task.Status);
}

[Fact]
public void Should_ChangeStatus_ToInProgress_WhenStartIsCalled()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);

bool result = task.Start();

Assert.True(result);
Assert.Equal(TaskStatus.InProgress, task.Status);
Assert.Equal(TaskItemStatus.InProgress, task.Status);
}

[Fact]
public void Should_SetStartDate_WhenStartIsCalled()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);

task.Start();

Expand All @@ -69,31 +68,31 @@ public void Should_SetStartDate_WhenStartIsCalled()
[Fact]
public void Should_NotChangeStatus_ToInProgress_IfAlreadyInProgress()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);
task.Start();

bool result = task.Start();

Assert.False(result);
Assert.Equal(TaskStatus.InProgress, task.Status);
Assert.Equal(TaskItemStatus.InProgress, task.Status);
}

[Fact]
public void Should_ChangeStatus_ToDone_WhenDoneIsCalledAndStatusIsInProgress()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);
task.Start();

bool result = task.Done();

Assert.True(result);
Assert.Equal(TaskStatus.Done, task.Status);
Assert.Equal(TaskItemStatus.Done, task.Status);
}

[Fact]
public void Should_SetDoneDate_WhenDoneIsCalled()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);
task.Start();

task.Done();
Expand All @@ -106,18 +105,18 @@ public void Should_SetDoneDate_WhenDoneIsCalled()
[Fact]
public void Should_NotChangeStatus_ToDone_IfStatusIsNotInProgress()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);

bool result = task.Done();

Assert.False(result);
Assert.Equal(TaskStatus.ToDo, task.Status);
Assert.Equal(TaskItemStatus.ToDo, task.Status);
}

[Fact]
public void Should_CalculateDuration_WhenStatusIsInProgress()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);
task.Start();

var duration = task.Duration;
Expand All @@ -128,11 +127,32 @@ public void Should_CalculateDuration_WhenStatusIsInProgress()
[Fact]
public void Should_ReturnNullDuration_WhenStatusIsTodo()
{
var task = new Task("Test task", null);
var task = new TaskItem(1, "Test task", _createdBy, null);

var duration = task.Duration;

Assert.Null(duration);
}

[Fact]
public void Should_AssignTo_User()
{
var task = new TaskItem(1, "Test task", _createdBy, null);

task.AssignTo(_createdBy);

Assert.Equal(_createdBy, task.AssignedTo);
}

[Fact]
public void Should_Unassign_User_When_Null_Passed()
{
var task = new TaskItem(1, "Test task", _createdBy, null);
task.AssignTo(_createdBy);

task.AssignTo(null);

Assert.Null(task.AssignedTo);
}
}
}
Loading