From fca6ef4fa6c96f3265c57a91d41ab73bf068ad50 Mon Sep 17 00:00:00 2001 From: Leon Hoppe Date: Sun, 24 Nov 2024 16:01:33 +0100 Subject: [PATCH] Implemented all tests for database module --- HopFrame.sln.DotSettings.user | 10 + .../HopFrame.Database.Tests.csproj | 1 - .../Repositories/UserRepositoryTests.cs | 184 ++++++++++++++++++ 3 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 tests/HopFrame.Database.Tests/Repositories/UserRepositoryTests.cs diff --git a/HopFrame.sln.DotSettings.user b/HopFrame.sln.DotSettings.user index 1798b6e..a0c3151 100644 --- a/HopFrame.sln.DotSettings.user +++ b/HopFrame.sln.DotSettings.user @@ -1,11 +1,21 @@  ForceIncluded + ForceIncluded ForceIncluded + ForceIncluded ForceIncluded <AssemblyExplorer> <Assembly Path="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.16\ref\net7.0\System.ComponentModel.Annotations.dll" /> <Assembly Path="C:\Users\Remote\.nuget\packages\blazorstrap\5.2.100.61524\lib\net7.0\BlazorStrap.dll" /> </AssemblyExplorer> + <SessionState ContinuousTestingMode="0" IsActive="True" Name="UserRepositoryTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>xUnit::1CAAC943-B8FE-48DD-9712-92699647DE18::net8.0::HopFrame.Database.Tests.Repositories.UserRepositoryTests</TestId> + </TestAncestor> +</SessionState> + + + diff --git a/tests/HopFrame.Database.Tests/HopFrame.Database.Tests.csproj b/tests/HopFrame.Database.Tests/HopFrame.Database.Tests.csproj index 05a23e3..4435c88 100644 --- a/tests/HopFrame.Database.Tests/HopFrame.Database.Tests.csproj +++ b/tests/HopFrame.Database.Tests/HopFrame.Database.Tests.csproj @@ -24,7 +24,6 @@ - diff --git a/tests/HopFrame.Database.Tests/Repositories/UserRepositoryTests.cs b/tests/HopFrame.Database.Tests/Repositories/UserRepositoryTests.cs new file mode 100644 index 0000000..7d8362b --- /dev/null +++ b/tests/HopFrame.Database.Tests/Repositories/UserRepositoryTests.cs @@ -0,0 +1,184 @@ +using HopFrame.Database.Models; +using HopFrame.Database.Repositories; +using HopFrame.Database.Repositories.Implementation; +using HopFrame.Database.Tests.Data; + +namespace HopFrame.Database.Tests.Repositories; + +public class UserRepositoryTests { + + private async Task<(DatabaseContext, IUserRepository)> SetupEnvironment(int count = 5) { + var context = new DatabaseContext(); + var repo = new UserRepository(context, new GroupRepository(context)); + + for (int i = 0; i < count; i++) { + await context.Users.AddAsync(CreateTestUser()); + } + await context.SaveChangesAsync(); + + return (context, repo); + } + + private User CreateTestUser() => new () { + Username = "", + Email = "", + Password = "" + }; + + [Fact] + public async Task GetUsers_Returns_AllUsers() { + // Arrange + var count = 5; + var (context, repo) = await SetupEnvironment(count); + + // Act + var users = await repo.GetUsers(); + + // Assert + Assert.NotNull(users); + Assert.Equal(count, users.Count); + } + + [Fact] + public async Task GetUser_Returns_SingleUser() { + // Arrange + var (context, repo) = await SetupEnvironment(); + var guid = context.Users.First().Id; + + // Act + var user = await repo.GetUser(guid); + + // Assert + Assert.NotNull(user); + Assert.Equal(guid, user.Id); + } + + [Fact] + public async Task GetUserByMail_Returns_SingleUser() { + // Arrange + var (context, repo) = await SetupEnvironment(); + var user = CreateTestUser(); + user.Email = "test@example.com"; + await context.Users.AddAsync(user); + await context.SaveChangesAsync(); + + // Act + var result = await repo.GetUserByEmail("test@example.com"); + + // Assert + Assert.NotNull(result); + Assert.Equal(user, result); + } + + [Fact] + public async Task GetUserByUsername_Returns_SingleUser() { + // Arrange + var (context, repo) = await SetupEnvironment(); + var user = CreateTestUser(); + user.Username = "test.user"; + await context.Users.AddAsync(user); + await context.SaveChangesAsync(); + + // Act + var result = await repo.GetUserByUsername("test.user"); + + // Assert + Assert.NotNull(result); + Assert.Equal(user, result); + } + + [Fact] + public async Task AddUser_Returns_NewUser() { + // Arrange + var count = 5; + var (context, repo) = await SetupEnvironment(count); + + // Act + var user = await repo.AddUser(new User { + Username = "test.user", + Email = "test@example.com", + Password = "changeme" + }); + + // Assert + Assert.NotNull(user); + Assert.Equal(count + 1, context.Users.Count()); + } + + [Fact] + public async Task UpdateUser_Should_UpdateAUser() { + // Arrange + var (context, repo) = await SetupEnvironment(); + var user = context.Users.First(); + + // Act + user.Username = "test.user"; + await repo.UpdateUser(user); + + // Assert + var result = context.Users.SingleOrDefault(u => u.Username == "test.user"); + Assert.NotNull(result); + } + + [Fact] + public async Task DeleteUser_Should_DeleteSingleUser() { + // Arrange + var count = 5; + var (context, repo) = await SetupEnvironment(count); + var user = context.Users.First(); + + // Act + await repo.DeleteUser(user); + + // Assert + Assert.Equal(count - 1, context.Users.Count()); + Assert.DoesNotContain(user, context.Users); + } + + [Fact] + public async Task CheckUserPassword_Returns_True() { + // Arrange + var (context, repo) = await SetupEnvironment(0); + var user = CreateTestUser(); + user.Password = "changeme"; + user = await repo.AddUser(user); + + // Act + var result = await repo.CheckUserPassword(user, "changeme"); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task CheckUserPassword_Returns_False() { + // Arrange + var (context, repo) = await SetupEnvironment(0); + var user = CreateTestUser(); + user.Password = "changeme"; + user = await repo.AddUser(user); + + // Act + var result = await repo.CheckUserPassword(user, "dontchangeme"); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task ChangePassword_Should_ChangeUserPassword() { + // Arrange + var (context, repo) = await SetupEnvironment(0); + var user = CreateTestUser(); + user.Password = "changeme"; + user = await repo.AddUser(user); + + // Act + await repo.ChangePassword(user, "changedme"); + + // Assert + var result = await repo.CheckUserPassword(user, "changedme"); + Assert.True(result); + } + +} \ No newline at end of file