diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/Csharp3-main/localdb.db b/Csharp3-main/localdb.db
new file mode 100644
index 0000000..ac3ab25
Binary files /dev/null and b/Csharp3-main/localdb.db differ
diff --git a/ToDoList/ToDoList.sln b/ToDoList/ToDoList.sln
index f8c142d..fe2bc36 100644
--- a/ToDoList/ToDoList.sln
+++ b/ToDoList/ToDoList.sln
@@ -15,7 +15,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToDoList.Test", "tests\ToDo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToDoList.Persistence", "src\ToDoList.Persistence\ToDoList.Persistence.csproj", "{9D93325A-6242-4417-AF1B-7B06DB3A7864}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToDoList.Frontend", "src\ToDoList.Frontend\ToDoList.Frontend.csproj", "{2A4A356C-0F7A-476E-88C9-E101784C9F30}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToDoList.Frontend", "src\ToDoList.Frontend\ToDoList.Frontend.csproj", "{04CA31F5-49D8-4978-B917-98D3B10CD156}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -42,16 +42,16 @@ Global
{9D93325A-6242-4417-AF1B-7B06DB3A7864}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D93325A-6242-4417-AF1B-7B06DB3A7864}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D93325A-6242-4417-AF1B-7B06DB3A7864}.Release|Any CPU.Build.0 = Release|Any CPU
- {2A4A356C-0F7A-476E-88C9-E101784C9F30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2A4A356C-0F7A-476E-88C9-E101784C9F30}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2A4A356C-0F7A-476E-88C9-E101784C9F30}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2A4A356C-0F7A-476E-88C9-E101784C9F30}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04CA31F5-49D8-4978-B917-98D3B10CD156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04CA31F5-49D8-4978-B917-98D3B10CD156}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04CA31F5-49D8-4978-B917-98D3B10CD156}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04CA31F5-49D8-4978-B917-98D3B10CD156}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D8E3A966-671F-4E7C-86BD-B51066E39B67} = {36FD4317-29CD-4B7B-AA95-92F1582DEC01}
{61CAF0A1-2EBB-410B-BB40-DA9590E88664} = {36FD4317-29CD-4B7B-AA95-92F1582DEC01}
{EEB409BA-8B59-4C14-84D3-301E75F542C4} = {D78FC9D1-46B7-4F93-AE9A-24719D8C82D2}
{9D93325A-6242-4417-AF1B-7B06DB3A7864} = {36FD4317-29CD-4B7B-AA95-92F1582DEC01}
- {2A4A356C-0F7A-476E-88C9-E101784C9F30} = {36FD4317-29CD-4B7B-AA95-92F1582DEC01}
+ {04CA31F5-49D8-4978-B917-98D3B10CD156} = {36FD4317-29CD-4B7B-AA95-92F1582DEC01}
EndGlobalSection
EndGlobal
diff --git a/ToDoList/data/localdb.db b/ToDoList/data/localdb.db
index cce3bb7..b8cc087 100644
Binary files a/ToDoList/data/localdb.db and b/ToDoList/data/localdb.db differ
diff --git a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemCreateRequestDto.cs b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemCreateRequestDto.cs
index 608d03c..9fbbc98 100644
--- a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemCreateRequestDto.cs
+++ b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemCreateRequestDto.cs
@@ -2,7 +2,7 @@ namespace ToDoList.Domain.DTOs;
using ToDoList.Domain.Models;
-public record ToDoItemCreateRequestDto(string Name, string Description, bool IsCompleted) //id is generated
+public record ToDoItemCreateRequestDto(string Name, string Description, bool IsCompleted, string? Category) //id is generated
{
- public ToDoItem ToDomain() => new() { Name = Name, Description = Description, IsCompleted = IsCompleted };
+ public ToDoItem ToDomain() => new() { Name = Name, Description = Description, IsCompleted = IsCompleted, Category = Category };
}
diff --git a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemGetResponseDto.cs b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemGetResponseDto.cs
index fa68fa7..5ed9a3e 100644
--- a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemGetResponseDto.cs
+++ b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemGetResponseDto.cs
@@ -1,7 +1,7 @@
namespace ToDoList.Domain.DTOs;
using ToDoList.Domain.Models;
-public record class ToDoItemGetResponseDto(int Id, string Name, string Description, bool IsCompleted) //let client know the Id
+public record class ToDoItemGetResponseDto(int Id, string Name, string Description, bool IsCompleted, string? Category) //let client know the Id
{
- public static ToDoItemGetResponseDto FromDomain(ToDoItem item) => new(item.ToDoItemId, item.Name, item.Description, item.IsCompleted);
+ public static ToDoItemGetResponseDto FromDomain(ToDoItem item) => new(item.ToDoItemId, item.Name, item.Description, item.IsCompleted, item.Category);
}
diff --git a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemUpdateRequestDto.cs b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemUpdateRequestDto.cs
index 0cd0486..a665166 100644
--- a/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemUpdateRequestDto.cs
+++ b/ToDoList/src/ToDoList.Domain/DTOs/ToDoItemUpdateRequestDto.cs
@@ -1,7 +1,7 @@
namespace ToDoList.Domain.DTOs;
using ToDoList.Domain.Models;
-public record class ToDoItemUpdateRequestDto(string Name, string Description, bool IsCompleted)
+public record class ToDoItemUpdateRequestDto(string Name, string Description, bool IsCompleted, string? Category)
{
- public ToDoItem ToDomain() => new() { Name = this.Name, Description = this.Description, IsCompleted = this.IsCompleted };
+ public ToDoItem ToDomain() => new() { Name = this.Name, Description = this.Description, IsCompleted = this.IsCompleted, Category = this.Category };
}
diff --git a/ToDoList/src/ToDoList.Domain/Models/ToDoItem.cs b/ToDoList/src/ToDoList.Domain/Models/ToDoItem.cs
index 8451335..1219fbb 100644
--- a/ToDoList/src/ToDoList.Domain/Models/ToDoItem.cs
+++ b/ToDoList/src/ToDoList.Domain/Models/ToDoItem.cs
@@ -11,4 +11,6 @@ public class ToDoItem
[StringLength(250)]
public string Description { get; set; }
public bool IsCompleted { get; set; }
+
+ public string? Category { get; set; }
}
diff --git a/ToDoList/src/ToDoList.Frontend/Components/AhojSvete.razor b/ToDoList/src/ToDoList.Frontend/Components/AhojSvete.razor
new file mode 100644
index 0000000..9b3d293
--- /dev/null
+++ b/ToDoList/src/ToDoList.Frontend/Components/AhojSvete.razor
@@ -0,0 +1,12 @@
+@page "/AhojSvete"
+
+Ahoj svete
+
+
@ahojSvete
+
+Vítej v moji aplikaci.
+
+@code
+{
+ string ahojSvete = "Ahoj světe přes c# z jiné stránky!";
+}
diff --git a/ToDoList/src/ToDoList.Frontend/Components/Pages/AhojSvete.razor b/ToDoList/src/ToDoList.Frontend/Components/Pages/AhojSvete.razor
deleted file mode 100644
index b8404e9..0000000
--- a/ToDoList/src/ToDoList.Frontend/Components/Pages/AhojSvete.razor
+++ /dev/null
@@ -1,12 +0,0 @@
-@page "/AhojSvete"
-
-Home
-
-@ahojSvete
-
-Vítej v mojí aplikaci.
-
-@code
-{
- string ahojSvete = "Ahoj světe z jiné stránky!";
-}
diff --git a/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard muj.razor b/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard muj.razor
new file mode 100644
index 0000000..03501b6
--- /dev/null
+++ b/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard muj.razor
@@ -0,0 +1,82 @@
+@page "/mujDashboard"
+@rendermode InteractiveServer
+
+DashBoard
+
+
+
+
+ |
+ ID Seřadit
+
+ |
+
+ Name Seřadit
+
+ |
+
+
+
+
+ @foreach (var todoItem in toDoItems)
+ {
+
+ | @todoItem.ToDoItemId |
+ @todoItem.Name |
+
+ }
+
+
+
+@code {
+/* public string GenerateTable()
+{
+ var html = new System.Text.StringBuilder();
+ html.Append("");
+ foreach (var todoitem in toDoItems)
+ {
+ html.Append("");
+ html.Append($"| {todoitem.ToDoItemId} | ");
+ html.Append($"{todoitem.Name} | ");
+ html.Append("
");
+ }
+ html.Append("
");
+ return html.ToString();
+}*/
+ private List toDoItems = new List
+ {
+ new ToDoItemView { ToDoItemId = 1, Name = "Udělat úkol na Czechitas", IsCompleted = false },
+ new ToDoItemView { ToDoItemId = 2, Name = "Udělat nepovinný úkol na Czechitas", IsCompleted = false }
+ };
+
+ private bool isSortedByIdAscending = true;
+ private bool isSortedByNameAscending = true;
+
+ private void OrderById()
+ {
+ if (isSortedByIdAscending)
+ toDoItems = toDoItems.OrderByDescending(item => item.ToDoItemId).ToList();
+ else
+ toDoItems = toDoItems.OrderBy(item => item.ToDoItemId).ToList();
+
+ isSortedByIdAscending = !isSortedByIdAscending;
+ }
+
+ private void OrderByName()
+ {
+ if (isSortedByNameAscending)
+ toDoItems = toDoItems.OrderByDescending(item => item.Name).ToList();
+ else
+ toDoItems = toDoItems.OrderBy(item => item.Name).ToList();
+
+ isSortedByNameAscending = !isSortedByNameAscending;
+ }
+
+ public class ToDoItemView
+ {
+ public int ToDoItemId { get; set; }
+ public string Name { get; set; }
+ public string Description { get; set; }
+ public bool IsCompleted { get; set; }
+ }
+}
diff --git a/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard.razor b/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard.razor
new file mode 100644
index 0000000..219bd97
--- /dev/null
+++ b/ToDoList/src/ToDoList.Frontend/Components/Pages/DashBoard.razor
@@ -0,0 +1,48 @@
+@using ToDoList.Frontend.Views
+@using ToDoList.Frontend.Clients
+@inject IToDoItemsClient ToDoItemsClient
+@rendermode InteractiveServer
+
+Dashboard
+
+
+
+ |
+ |
+ |
+ |
+
+@if(toDoItems!=null)
+{
+
+}
+ @foreach(var toDoItem in toDoItems)
+ {
+
+ | @toDoItem.ToDoItemId |
+ @toDoItem.Name |
+ @toDoItem.Description |
+ @toDoItem.IsCompleted |
+
+ }
+
+
+
+@code
+{
+ protected override async Task OnInitializedAsync()
+ {
+ toDoItems = await ToDoItemsClient.ReadItemsAsync();
+ }
+ private List? toDoItems = [];
+
+ public void OrderByName()
+ {
+ toDoItems = toDoItems?.OrderBy(x => x.Name).ToList();
+ }
+
+ public void OrderById()
+ {
+ toDoItems = toDoItems?.OrderBy(x => x.ToDoItemId).ToList();
+ }
+}
diff --git a/ToDoList/src/ToDoList.Frontend/Components/Pages/Home.razor b/ToDoList/src/ToDoList.Frontend/Components/Pages/Home.razor
index 5c56c98..eaae7fd 100644
--- a/ToDoList/src/ToDoList.Frontend/Components/Pages/Home.razor
+++ b/ToDoList/src/ToDoList.Frontend/Components/Pages/Home.razor
@@ -1,27 +1,55 @@
@page "/"
@rendermode InteractiveServer
+Domovska stranka
-Home
+
-
+
+
}
diff --git a/ToDoList/src/ToDoList.Frontend/Program.cs b/ToDoList/src/ToDoList.Frontend/Program.cs
index b85f5ad..5b6ea19 100644
--- a/ToDoList/src/ToDoList.Frontend/Program.cs
+++ b/ToDoList/src/ToDoList.Frontend/Program.cs
@@ -5,7 +5,10 @@
// Add services to the container.
builder.Services.AddRazorComponents()
- .AddInteractiveServerComponents();
+.AddInteractiveServerComponents();
+
+builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://localhost:5000") });
+builder.Services.AddScoped();
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://localhost:5000") });
builder.Services.AddScoped();
@@ -26,6 +29,6 @@
app.UseAntiforgery();
app.MapRazorComponents()
- .AddInteractiveServerRenderMode();
+.AddInteractiveServerRenderMode();
app.Run();
diff --git a/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.Designer.cs b/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.Designer.cs
new file mode 100644
index 0000000..3cd9ddd
--- /dev/null
+++ b/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.Designer.cs
@@ -0,0 +1,50 @@
+//
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using ToDoList.Persistence;
+
+#nullable disable
+
+namespace ToDoList.Persistence.Migrations
+{
+ [DbContext(typeof(ToDoItemsContext))]
+ [Migration("20241125120158_AddCategoryToToDoItem")]
+ partial class AddCategoryToToDoItem
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
+
+ modelBuilder.Entity("ToDoList.Domain.Models.ToDoItem", b =>
+ {
+ b.Property("ToDoItemId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Category")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(250)
+ .HasColumnType("TEXT");
+
+ b.Property("IsCompleted")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("ToDoItemId");
+
+ b.ToTable("ToDoItems");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.cs b/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.cs
new file mode 100644
index 0000000..deae25c
--- /dev/null
+++ b/ToDoList/src/ToDoList.Persistence/Migrations/20241125120158_AddCategoryToToDoItem.cs
@@ -0,0 +1,28 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace ToDoList.Persistence.Migrations
+{
+ ///
+ public partial class AddCategoryToToDoItem : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "Category",
+ table: "ToDoItems",
+ type: "TEXT",
+ nullable: true);
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "Category",
+ table: "ToDoItems");
+ }
+ }
+}
diff --git a/ToDoList/src/ToDoList.Persistence/Migrations/ToDoItemsContextModelSnapshot.cs b/ToDoList/src/ToDoList.Persistence/Migrations/ToDoItemsContextModelSnapshot.cs
index 38b43fb..b43b028 100644
--- a/ToDoList/src/ToDoList.Persistence/Migrations/ToDoItemsContextModelSnapshot.cs
+++ b/ToDoList/src/ToDoList.Persistence/Migrations/ToDoItemsContextModelSnapshot.cs
@@ -22,6 +22,9 @@ protected override void BuildModel(ModelBuilder modelBuilder)
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
+ b.Property("Category")
+ .HasColumnType("TEXT");
+
b.Property("Description")
.IsRequired()
.HasMaxLength(250)
diff --git a/ToDoList/src/ToDoList.Persistence/Repositories/IRepository.cs b/ToDoList/src/ToDoList.Persistence/Repositories/IRepository.cs
index 2a984fb..e0ab452 100644
--- a/ToDoList/src/ToDoList.Persistence/Repositories/IRepository.cs
+++ b/ToDoList/src/ToDoList.Persistence/Repositories/IRepository.cs
@@ -8,3 +8,11 @@ public interface IRepository where T : class
public void Update(T item);
public void Delete(T item);
}
+public interface IRepositoryAsync where T : class
+{
+ public Task CreateAsync(T item);
+ public Task> ReadAllAsync();
+ public Task ReadByIdAsync(int id);
+ public Task UpdateAsync(T item);
+ public Task DeleteAsync(T item);
+}
diff --git a/ToDoList/src/ToDoList.Persistence/Repositories/ToDoItemsRepository.cs b/ToDoList/src/ToDoList.Persistence/Repositories/ToDoItemsRepository.cs
index 3f4cae5..9c3fddc 100644
--- a/ToDoList/src/ToDoList.Persistence/Repositories/ToDoItemsRepository.cs
+++ b/ToDoList/src/ToDoList.Persistence/Repositories/ToDoItemsRepository.cs
@@ -1,9 +1,12 @@
namespace ToDoList.Persistence.Repositories;
using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
using ToDoList.Domain.Models;
-public class ToDoItemsRepository : IRepository
+public class ToDoItemsRepository : IRepositoryAsync
{
private readonly ToDoItemsContext context;
@@ -12,22 +15,31 @@ public ToDoItemsRepository(ToDoItemsContext context)
this.context = context;
}
- public void Create(ToDoItem item)
+ public async Task CreateAsync(ToDoItem item)
{
- context.ToDoItems.Add(item);
- context.SaveChanges();
+ await context.ToDoItems.AddAsync(item);
+ await context.SaveChangesAsync();
}
- public IEnumerable ReadAll() => context.ToDoItems.ToList();
- public ToDoItem? ReadById(int id) => context.ToDoItems.Find(id);
- public void Update(ToDoItem item)
+
+ public async Task> ReadAllAsync()
+ {
+ return await context.ToDoItems.ToListAsync();
+ }
+
+ public async Task ReadByIdAsync(int id)
{
- context.Entry(item).CurrentValues.SetValues(item);
- context.SaveChanges();
+ return await context.ToDoItems.FindAsync(id);
}
- public void Delete(ToDoItem item)
+ public async Task UpdateAsync(ToDoItem item)
+ {
+ var foundItem = await context.ToDoItems.FindAsync(item.ToDoItemId) ?? throw new ArgumentOutOfRangeException($"ToDo item with ID {item.ToDoItemId} not found.");
+ context.Entry(foundItem).CurrentValues.SetValues(item);
+ context.SaveChangesAsync();
+ }
+ public async Task DeleteAsync(ToDoItem item)
{
context.ToDoItems.Remove(item);
- context.SaveChanges();
+ await context.SaveChangesAsync();
}
}
diff --git a/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsController.cs b/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsController.cs
index bf9faf7..16a4eca 100644
--- a/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsController.cs
+++ b/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsController.cs
@@ -1,5 +1,9 @@
namespace ToDoList.WebApi.Controllers;
+
using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
using ToDoList.Domain.DTOs;
using ToDoList.Domain.Models;
using ToDoList.Persistence.Repositories;
@@ -8,123 +12,114 @@ namespace ToDoList.WebApi.Controllers;
[Route("api/[controller]")]
public class ToDoItemsController : ControllerBase
{
- private readonly IRepository repository;
+ private readonly IRepositoryAsync repository;
- public ToDoItemsController(IRepository repository)
+ public ToDoItemsController(IRepositoryAsync repository)
{
this.repository = repository;
}
[HttpPost]
- public ActionResult Create(ToDoItemCreateRequestDto request)
+ public async Task> CreateAsync(ToDoItemCreateRequestDto request)
{
- //map to Domain object as soon as possible
var item = request.ToDomain();
- //try to create an item
try
{
- repository.Create(item);
+ await repository.CreateAsync(item);
}
catch (Exception ex)
{
- return Problem(ex.Message, null, StatusCodes.Status500InternalServerError); //500
+ return Problem(ex.Message, null, StatusCodes.Status500InternalServerError);
}
- //respond to client
return CreatedAtAction(
- nameof(ReadById),
+ nameof(ReadByIdAsync),
new { toDoItemId = item.ToDoItemId },
- ToDoItemGetResponseDto.FromDomain(item)); //201
+ ToDoItemGetResponseDto.FromDomain(item));
}
[HttpGet]
- public ActionResult> Read()
+ [ActionName(nameof(ReadByIdAsync))]
+ public async Task>> ReadAsync()
{
IEnumerable itemsToGet;
+
try
{
- itemsToGet = repository.ReadAll();
+ itemsToGet = await repository.ReadAllAsync();
}
catch (Exception ex)
{
- return Problem(ex.Message, null, StatusCodes.Status500InternalServerError); //500
+ return Problem(ex.Message, null, StatusCodes.Status500InternalServerError);
}
- //respond to client
- return (itemsToGet is null || !itemsToGet.Any())
- ? NotFound() //404
- : Ok(itemsToGet.Select(ToDoItemGetResponseDto.FromDomain)); //200
+ return itemsToGet is null || !itemsToGet.Any()
+ ? NotFound()
+ : Ok(itemsToGet.Select(ToDoItemGetResponseDto.FromDomain));
}
[HttpGet("{toDoItemId:int}")]
- public ActionResult ReadById(int toDoItemId)
+ public async Task> ReadByIdAsync(int toDoItemId)
{
- //try to retrieve the item by id
ToDoItem? itemToGet;
+
try
{
- itemToGet = repository.ReadById(toDoItemId);
+ itemToGet = await repository.ReadByIdAsync(toDoItemId);
}
catch (Exception ex)
{
- return Problem(ex.Message, null, StatusCodes.Status500InternalServerError); //500
+ return Problem(ex.Message, null, StatusCodes.Status500InternalServerError);
}
- //respond to client
- return (itemToGet is null)
- ? NotFound() //404
- : Ok(ToDoItemGetResponseDto.FromDomain(itemToGet)); //200
+ return itemToGet is null
+ ? NotFound()
+ : Ok(ToDoItemGetResponseDto.FromDomain(itemToGet));
}
[HttpPut("{toDoItemId:int}")]
- public IActionResult UpdateById(int toDoItemId, [FromBody] ToDoItemUpdateRequestDto request)
+ public async Task UpdateByIdAsync(int toDoItemId, [FromBody] ToDoItemUpdateRequestDto request)
{
- //map to Domain object as soon as possible
var updatedItem = request.ToDomain();
updatedItem.ToDoItemId = toDoItemId;
- //try to update the item by retrieving it with given id
try
{
- //retrieve the item
- var itemToUpdate = repository.ReadById(toDoItemId);
+ var itemToUpdate = await repository.ReadByIdAsync(toDoItemId);
if (itemToUpdate is null)
{
- return NotFound(); //404
+ return NotFound();
}
- repository.Update(updatedItem);
+ await repository.UpdateAsync(updatedItem);
}
catch (Exception ex)
{
- return Problem(ex.Message, null, StatusCodes.Status500InternalServerError); //500
+ return Problem(ex.Message, null, StatusCodes.Status500InternalServerError);
}
- //respond to client
- return NoContent(); //204
+ return NoContent();
}
[HttpDelete("{toDoItemId:int}")]
- public IActionResult DeleteById(int toDoItemId)
+ public async Task DeleteByIdAsync(int toDoItemId)
{
- //try to delete the item
try
{
- var itemToDelete = repository.ReadById(toDoItemId);
+ var itemToDelete = await repository.ReadByIdAsync(toDoItemId);
if (itemToDelete is null)
{
- return NotFound(); //404
+ return NotFound();
}
- repository.Delete(itemToDelete);
+ await repository.DeleteAsync(itemToDelete);
}
catch (Exception ex)
{
return Problem(ex.Message, null, StatusCodes.Status500InternalServerError);
}
- //respond to client
- return NoContent(); //204
+ return NoContent();
}
}
diff --git a/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsRequests.http b/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsRequests.http
index 4ef60a7..a10a7eb 100644
--- a/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsRequests.http
+++ b/ToDoList/src/ToDoList.WebApi/Controllers/ToDoItemsRequests.http
@@ -9,7 +9,7 @@ GET {{host}}:{{port}}/api/ToDoItems
###
//Get specific ToDoItem by id
-@itemToGetId = 1
+@itemToGetId = 33
GET {{host}}:{{port}}/api/ToDoItems/{{itemToGetId}}
###
@@ -21,13 +21,14 @@ Content-Type: application/json
{
"name": "Example New Task",
"description": "Example New Description",
- "isCompleted": false
+ "isCompleted": false,
+ "category": null
}
###
//Update existing ToDoItem by id
-@itemToUpdateId = 1
+@itemToUpdateId = 16
PUT {{host}}:{{port}}/api/ToDoItems/{{itemToUpdateId}}
Content-Type: application/json
@@ -35,11 +36,12 @@ Content-Type: application/json
{
"name": "Updated Task",
"description": "Updated Description",
- "isCompleted": false
+ "isCompleted": false,
+ "category": "Updated"
}
###
//Delete exisiting ToDoItem by id
-@itemToDeleteId = 1
+@itemToDeleteId = 19
DELETE {{host}}:{{port}}/api/ToDoItems/{{itemToDeleteId}}
diff --git a/ToDoList/src/ToDoList.WebApi/Program.cs b/ToDoList/src/ToDoList.WebApi/Program.cs
index c90426b..7f0d542 100644
--- a/ToDoList/src/ToDoList.WebApi/Program.cs
+++ b/ToDoList/src/ToDoList.WebApi/Program.cs
@@ -10,7 +10,7 @@
//Persistence services
builder.Services.AddDbContext(); // pridalo ToDoItemsContext
- builder.Services.AddScoped, ToDoItemsRepository>(); // pridalo ToDoItemsRepository
+ builder.Services.AddScoped, ToDoItemsRepository>(); // pridalo ToDoItemsRepository
}
var app = builder.Build();
diff --git a/ToDoList/tests/ToDoList.Test/IntegrationTests/DeleteTests.cs b/ToDoList/tests/ToDoList.Test/IntegrationTests/DeleteTests.cs
index 6f10514..a58f64e 100644
--- a/ToDoList/tests/ToDoList.Test/IntegrationTests/DeleteTests.cs
+++ b/ToDoList/tests/ToDoList.Test/IntegrationTests/DeleteTests.cs
@@ -9,7 +9,7 @@ namespace ToDoList.Test.IntegrationTests;
public class DeleteTests
{
[Fact]
- public void Delete_ValidId_ReturnsNoContent()
+ public async void Delete_ValidId_ReturnsNoContent()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -25,14 +25,14 @@ public void Delete_ValidId_ReturnsNoContent()
context.SaveChanges();
// Act
- var result = controller.DeleteById(toDoItem.ToDoItemId);
+ var result = await controller.DeleteByIdAsync(toDoItem.ToDoItemId);
// Assert
Assert.IsType(result);
}
[Fact]
- public void Delete_InvalidId_ReturnsNotFound()
+ public async void Delete_InvalidId_ReturnsNotFound()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -49,7 +49,7 @@ public void Delete_InvalidId_ReturnsNotFound()
// Act
var invalidId = -1;
- var result = controller.DeleteById(invalidId);
+ var result =await controller.DeleteByIdAsync(invalidId);
// Assert
Assert.IsType(result);
diff --git a/ToDoList/tests/ToDoList.Test/IntegrationTests/GetByIdTests.cs b/ToDoList/tests/ToDoList.Test/IntegrationTests/GetByIdTests.cs
index a16bc7f..a2a96be 100644
--- a/ToDoList/tests/ToDoList.Test/IntegrationTests/GetByIdTests.cs
+++ b/ToDoList/tests/ToDoList.Test/IntegrationTests/GetByIdTests.cs
@@ -9,7 +9,7 @@ namespace ToDoList.Test.IntegrationTests;
public class GetByIdTests
{
[Fact]
- public void GetById_ValidId_ReturnsItem()
+ public async Task GetById_ValidId_ReturnsItem()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -25,7 +25,7 @@ public void GetById_ValidId_ReturnsItem()
context.SaveChanges();
// Act
- var result = controller.ReadById(toDoItem.ToDoItemId);
+ var result = await controller.ReadByIdAsync(toDoItem.ToDoItemId);
var resultResult = result.Result;
var value = result.GetValue();
@@ -40,7 +40,7 @@ public void GetById_ValidId_ReturnsItem()
}
[Fact]
- public void GetById_InvalidId_ReturnsNotFound()
+ public async Task GetById_InvalidId_ReturnsNotFound()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -58,7 +58,7 @@ public void GetById_InvalidId_ReturnsNotFound()
// Act
var invalidId = -1;
- var result = controller.ReadById(invalidId);
+ var result =await controller.ReadByIdAsync(invalidId);
var resultResult = result.Result;
// Assert
diff --git a/ToDoList/tests/ToDoList.Test/IntegrationTests/GetTests.cs b/ToDoList/tests/ToDoList.Test/IntegrationTests/GetTests.cs
index 118c62e..7666254 100644
--- a/ToDoList/tests/ToDoList.Test/IntegrationTests/GetTests.cs
+++ b/ToDoList/tests/ToDoList.Test/IntegrationTests/GetTests.cs
@@ -9,7 +9,7 @@ namespace ToDoList.Test.IntegrationTests;
public class GetTests
{
[Fact]
- public void Get_AllItems_ReturnsAllItems()
+ public async Task Get_AllItems_ReturnsAllItems()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -26,7 +26,7 @@ public void Get_AllItems_ReturnsAllItems()
context.SaveChanges();
// Act
- var result = controller.Read();
+ var result =await controller.ReadAsync();
var resultResult = result.Result;
var value = result.GetValue();
diff --git a/ToDoList/tests/ToDoList.Test/IntegrationTests/PostTests.cs b/ToDoList/tests/ToDoList.Test/IntegrationTests/PostTests.cs
index 0c02405..ccd7a87 100644
--- a/ToDoList/tests/ToDoList.Test/IntegrationTests/PostTests.cs
+++ b/ToDoList/tests/ToDoList.Test/IntegrationTests/PostTests.cs
@@ -9,7 +9,7 @@ namespace ToDoList.Test.IntegrationTests;
public class PostTests
{
[Fact]
- public void Post_ValidRequest_ReturnsNewItem()
+ public async void Post_ValidRequest_ReturnsNewItem()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -18,11 +18,12 @@ public void Post_ValidRequest_ReturnsNewItem()
var request = new ToDoItemCreateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
);
// Act
- var result = controller.Create(request);
+ var result = await controller.CreateAsync(request);
var resultResult = result.Result;
var value = result.GetValue();
diff --git a/ToDoList/tests/ToDoList.Test/IntegrationTests/PutTests.cs b/ToDoList/tests/ToDoList.Test/IntegrationTests/PutTests.cs
index bcda2b4..898ad37 100644
--- a/ToDoList/tests/ToDoList.Test/IntegrationTests/PutTests.cs
+++ b/ToDoList/tests/ToDoList.Test/IntegrationTests/PutTests.cs
@@ -10,7 +10,7 @@ namespace ToDoList.Test.IntegrationTests;
public class PutTests
{
[Fact]
- public void Put_ValidId_ReturnsNoContent()
+ public async Task Put_ValidId_ReturnsNoContent()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -28,18 +28,19 @@ public void Put_ValidId_ReturnsNoContent()
var request = new ToDoItemUpdateRequestDto(
Name: "Jine jmeno",
Description: "Jiny popis",
- IsCompleted: true
+ IsCompleted: true,
+ Category: null
);
// Act
- var result = controller.UpdateById(toDoItem.ToDoItemId, request);
+ var result = await controller.UpdateByIdAsync(toDoItem.ToDoItemId, request);
// Assert
Assert.IsType(result);
}
[Fact]
- public void Put_InvalidId_ReturnsNotFound()
+ public async Task Put_InvalidId_ReturnsNotFound()
{
// Arrange
var context = new ToDoItemsContext("Data Source=../../../../../data/localdb.db");
@@ -57,12 +58,13 @@ public void Put_InvalidId_ReturnsNotFound()
var request = new ToDoItemUpdateRequestDto(
Name: "Jine jmeno",
Description: "Jiny popis",
- IsCompleted: true
+ IsCompleted: true,
+ Category: null
);
// Act
var invalidId = -1;
- var result = controller.UpdateById(invalidId, request);
+ var result = await controller.UpdateByIdAsync(invalidId, request);
// Assert
Assert.IsType(result);
diff --git a/ToDoList/tests/ToDoList.Test/ToDoList.Test.csproj b/ToDoList/tests/ToDoList.Test/ToDoList.Test.csproj
index 13060b5..99fd0eb 100644
--- a/ToDoList/tests/ToDoList.Test/ToDoList.Test.csproj
+++ b/ToDoList/tests/ToDoList.Test/ToDoList.Test.csproj
@@ -22,6 +22,7 @@
+
diff --git a/ToDoList/tests/ToDoList.Test/UnitTests/DeleteTests.cs b/ToDoList/tests/ToDoList.Test/UnitTests/DeleteTests.cs
index 022b226..528de41 100644
--- a/ToDoList/tests/ToDoList.Test/UnitTests/DeleteTests.cs
+++ b/ToDoList/tests/ToDoList.Test/UnitTests/DeleteTests.cs
@@ -11,76 +11,76 @@ namespace ToDoList.Test.UnitTests;
public class DeleteUnitTests
{
[Fact]
- public void Delete_DeleteByIdValidItemId_ReturnsNoContent()
+ public async Task Delete_DeleteByIdValidItemId_ReturnsNoContent_Async()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadById(Arg.Any()).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
+ repositoryMock.ReadByIdAsync(Arg.Any()).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
var someId = 1;
// Act
- var result = controller.DeleteById(someId);
+ var result = await controller.DeleteByIdAsync(someId);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
- repositoryMock.Received(1).Delete(Arg.Any());
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
+ await repositoryMock.Received(1).DeleteAsync(Arg.Any());
}
[Fact]
- public void Delete_DeleteByIdInvalidItemId_ReturnsNotFound()
+ public async Task Delete_DeleteByIdInvalidItemId_ReturnsNotFound_Async()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadById(Arg.Any()).Returns(null as ToDoItem);
+ repositoryMock.ReadByIdAsync(Arg.Any()).Returns(null as ToDoItem);
var someId = 1;
// Act
- var result = controller.DeleteById(someId);
+ var result = await controller.DeleteByIdAsync(someId);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
- repositoryMock.Received(0).Delete(Arg.Any()); // make sure nothing was deleted
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
+ await repositoryMock.Received(0).DeleteAsync(Arg.Any());
}
[Fact]
- public void Delete_DeleteByIdExceptionOccurredDuringRepositoryReadById_ReturnsInternalServerError()
+ public async Task Delete_DeleteByIdExceptionOccurredDuringRepositoryReadById_ReturnsInternalServerError_Async()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadById(Arg.Any()).Throws(new Exception());
+ repositoryMock.When(r => r.ReadByIdAsync(Arg.Any())).Do(x => throw new Exception());
var someId = 1;
// Act
- var result = controller.DeleteById(someId);
+ var result = await controller.DeleteByIdAsync(someId);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
Assert.Equal(StatusCodes.Status500InternalServerError, ((ObjectResult)result).StatusCode);
}
[Fact]
- public void Delete_DeleteByIdExceptionOccurredDuringRepositoryDelete_ReturnsInternalServerError()
+ public async Task Delete_DeleteByIdExceptionOccurredDuringRepositoryDelete_ReturnsInternalServerError_Async()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadById(Arg.Any()).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
- repositoryMock.When(r => r.Delete(Arg.Any())).Do(r => throw new Exception());
+ repositoryMock.ReadByIdAsync(Arg.Any()).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
+ repositoryMock.When(r => r.DeleteAsync(Arg.Any())).Do(x => throw new Exception());
var someId = 1;
// Act
- var result = controller.DeleteById(someId);
+ var result = await controller.DeleteByIdAsync(someId);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
- repositoryMock.Received(1).Delete(Arg.Any());
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
+ await repositoryMock.Received(1).DeleteAsync(Arg.Any());
Assert.Equal(StatusCodes.Status500InternalServerError, ((ObjectResult)result).StatusCode);
}
}
diff --git a/ToDoList/tests/ToDoList.Test/UnitTests/GetByIdTests.cs b/ToDoList/tests/ToDoList.Test/UnitTests/GetByIdTests.cs
index d864cb0..a850c0e 100644
--- a/ToDoList/tests/ToDoList.Test/UnitTests/GetByIdTests.cs
+++ b/ToDoList/tests/ToDoList.Test/UnitTests/GetByIdTests.cs
@@ -12,57 +12,57 @@ namespace ToDoList.Test.UnitTests;
public class GetByIdUnitTests
{
[Fact]
- public void Get_ReadByIdWhenSomeItemAvailable_ReturnsOk()
+ public async Task Get_ReadByIdWhenSomeItemAvailable_ReturnsOk()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var someId = 1;
- repositoryMock.ReadById(someId).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
+ repositoryMock.ReadByIdAsync(someId).Returns(new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false });
// Act
- var result = controller.ReadById(someId);
+ var result = await controller.ReadByIdAsync(someId);
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadById(someId);
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
}
[Fact]
- public void Get_ReadByIdWhenItemIsNull_ReturnsNotFound()
+ public async Task Get_ReadByIdWhenItemIsNull_ReturnsNotFound()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var someId = 1;
- repositoryMock.ReadById(someId).ReturnsNull();
+ repositoryMock.ReadByIdAsync(someId).ReturnsNull();
// Act
- var result = controller.ReadById(someId);
+ var result = await controller.ReadByIdAsync(someId);
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadById(someId);
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
}
[Fact]
- public void Get_ReadByIdUnhandledException_ReturnsInternalServerError()
+ public async Task Get_ReadByIdUnhandledException_ReturnsInternalServerError()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var someId = 1;
- repositoryMock.ReadById(someId).Throws(new Exception());
+ repositoryMock.ReadByIdAsync(someId).Throws(new Exception());
// Act
- var result = controller.ReadById(someId);
+ var result =await controller.ReadByIdAsync(someId);
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadById(someId);
+ await repositoryMock.Received(1).ReadByIdAsync(someId);
Assert.Equivalent(new StatusCodeResult(StatusCodes.Status500InternalServerError), resultResult);
}
diff --git a/ToDoList/tests/ToDoList.Test/UnitTests/GetTests.cs b/ToDoList/tests/ToDoList.Test/UnitTests/GetTests.cs
index 97c92c1..a904d47 100644
--- a/ToDoList/tests/ToDoList.Test/UnitTests/GetTests.cs
+++ b/ToDoList/tests/ToDoList.Test/UnitTests/GetTests.cs
@@ -12,55 +12,55 @@ namespace ToDoList.Test.UnitTests;
public class GetUnitTests
{
[Fact]
- public void Get_ReadWhenSomeItemAvailable_ReturnsOk()
+ public async Task Get_ReadWhenSomeItemAvailable_ReturnsOk()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadAll().Returns([new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false }]);
+ repositoryMock.ReadAllAsync().Returns([new ToDoItem { Name = "testItem", Description = "testDescription", IsCompleted = false }]);
// Act
- var result = controller.Read();
+ var result = await controller.ReadAsync();
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadAll();
+ repositoryMock.Received(1).ReadAllAsync();
}
[Fact]
- public void Get_ReadWhenNoItemAvailable_ReturnsNotFound()
+ public async Task Get_ReadWhenNoItemAvailable_ReturnsNotFound()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
- repositoryMock.ReadAll().ReturnsNull();
+ repositoryMock.ReadAllAsync().ReturnsNull();
// Act
- var result = controller.Read();
+ var result = await controller.ReadAsync();
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadAll();
+ await repositoryMock.Received(1).ReadAllAsync();
}
[Fact]
- public void Get_ReadUnhandledException_ReturnsInternalServerError()
+ public async Task Get_ReadUnhandledException_ReturnsInternalServerError()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
//repositoryMock.When(r => r.ReadAll()).Do(r => throw new Exception());
- repositoryMock.ReadAll().Throws(new Exception());
+ repositoryMock.ReadAllAsync().Throws(new Exception());
// Act
- var result = controller.Read();
+ var result = await controller.ReadAsync();
var resultResult = result.Result;
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).ReadAll();
+ repositoryMock.Received(1).ReadAllAsync();
Assert.Equivalent(new StatusCodeResult(StatusCodes.Status500InternalServerError), resultResult);
}
diff --git a/ToDoList/tests/ToDoList.Test/UnitTests/PostTests.cs b/ToDoList/tests/ToDoList.Test/UnitTests/PostTests.cs
index 94d076c..edf1e8a 100644
--- a/ToDoList/tests/ToDoList.Test/UnitTests/PostTests.cs
+++ b/ToDoList/tests/ToDoList.Test/UnitTests/PostTests.cs
@@ -11,25 +11,26 @@ namespace ToDoList.Test.UnitTests;
public class PostUnitTests
{
[Fact]
- public void Post_CreateValidRequest_ReturnsCreatedAtAction()
+ public async Task Post_CreateValidRequest_ReturnsCreatedAtAction()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var request = new ToDoItemCreateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
);
// Act
- var result = controller.Create(request);
+ var result = await controller.CreateAsync(request);
var resultResult = result.Result;
var value = result.GetValue();
// Assert
Assert.IsType(resultResult);
- repositoryMock.Received(1).Create(Arg.Any());
+ await repositoryMock.Received(1).CreateAsync(Arg.Any());
// These asserts are optional
Assert.NotNull(value);
@@ -40,20 +41,22 @@ public void Post_CreateValidRequest_ReturnsCreatedAtAction()
}
[Fact]
- public void Post_CreateUnhandledException_ReturnsInternalServerError()
+ public async Task Post_CreateUnhandledException_ReturnsInternalServerError()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var request = new ToDoItemCreateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
+
);
- repositoryMock.When(r => r.Create(Arg.Any())).Do(r => throw new Exception());
+ repositoryMock.When(r => r.CreateAsync(Arg.Any())).Do(r => throw new Exception());
// Act
- var result = controller.Create(request);
+ var result = await controller.CreateAsync(request);
var resultResult = result.Result;
// Assert
diff --git a/ToDoList/tests/ToDoList.Test/UnitTests/PutTests.cs b/ToDoList/tests/ToDoList.Test/UnitTests/PutTests.cs
index 19bc185..7298b98 100644
--- a/ToDoList/tests/ToDoList.Test/UnitTests/PutTests.cs
+++ b/ToDoList/tests/ToDoList.Test/UnitTests/PutTests.cs
@@ -12,70 +12,73 @@ namespace ToDoList.Test.UnitTests;
public class PutUnitTests
{
[Fact]
- public void Put_UpdateByIdWhenItemUpdated_ReturnsNoContent()
+ public async Task Put_UpdateByIdWhenItemUpdated_ReturnsNoContent()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var request = new ToDoItemUpdateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
);
var someId = 1;
var readToDoItem = new ToDoItem { Name = "Jmeno", Description = "Popis", IsCompleted = false, ToDoItemId = someId };
- repositoryMock.ReadById(someId).Returns(readToDoItem);
+ repositoryMock.ReadByIdAsync(someId).Returns(readToDoItem);
// Act
- var result = controller.UpdateById(someId, request);
+ var result = await controller.UpdateByIdAsync(someId, request);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
- repositoryMock.Received(1).Update(Arg.Any());
+ repositoryMock.Received(1).ReadByIdAsync(someId);
+ repositoryMock.Received(1).UpdateAsync(Arg.Any());
}
[Fact]
- public void Put_UpdateByIdWhenIdNotFound_ReturnsNotFound()
+ public async Task Put_UpdateByIdWhenIdNotFound_ReturnsNotFound()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var request = new ToDoItemUpdateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
);
- repositoryMock.ReadById(Arg.Any()).ReturnsNull();
+ repositoryMock.ReadByIdAsync(Arg.Any()).ReturnsNull();
var someId = 1;
// Act
- var result = controller.UpdateById(someId, request);
+ var result = await controller.UpdateByIdAsync(someId, request);
// Assert
Assert.IsType(result);
- repositoryMock.Received(1).ReadById(someId);
+ repositoryMock.Received(1).ReadByIdAsync(someId);
}
[Fact]
- public void Put_UpdateByIdUnhandledException_ReturnsInternalServerError()
+ public async Task Put_UpdateByIdUnhandledException_ReturnsInternalServerError()
{
// Arrange
- var repositoryMock = Substitute.For>();
+ var repositoryMock = Substitute.For>();
var controller = new ToDoItemsController(repositoryMock);
var request = new ToDoItemUpdateRequestDto(
Name: "Jmeno",
Description: "Popis",
- IsCompleted: false
+ IsCompleted: false,
+ Category: null
);
var someId = 1;
var readToDoItem = new ToDoItem { Name = "Jmeno", Description = "Popis", IsCompleted = false, ToDoItemId = someId };
- repositoryMock.ReadById(Arg.Any()).Returns(readToDoItem);
- repositoryMock.When(r => r.Update(Arg.Any())).Do(r => throw new Exception());
+ repositoryMock.ReadByIdAsync(Arg.Any()).Returns(readToDoItem);
+ repositoryMock.When(r => r.UpdateAsync(Arg.Any())).Do(r => throw new Exception());
// Act
- var result = controller.UpdateById(someId, request);
+ var result = await controller.UpdateByIdAsync(someId, request);
// Assert
Assert.IsType(result);