Implemented all tests for database module

This commit is contained in:
2024-11-24 16:01:33 +01:00
parent da45a84f61
commit fca6ef4fa6
3 changed files with 194 additions and 1 deletions

View File

@@ -1,11 +1,21 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEditContextDataAnnotationsExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbc307cd57fb42fc4c7fb9795381958122734d3750f41b6c1735c7d132ecda70_003FEditContextDataAnnotationsExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEditContextDataAnnotationsExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbc307cd57fb42fc4c7fb9795381958122734d3750f41b6c1735c7d132ecda70_003FEditContextDataAnnotationsExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbd1d5c50194fea68ff3559c160230b0ab50f5acf4ce3061bffd6d62958e2182_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fb7208b3f72528d22781d25fde9a55271bdf2b5aade4f03b1324579a25493cd8_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fb7208b3f72528d22781d25fde9a55271bdf2b5aade4f03b1324579a25493cd8_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2c8e7ca976f350cba9836d5565dac56b11e0b56656fa786460eb1395857a6fa_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AValidationMessageStore_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ffc81648e473bb3cc818f71427c286ecddc3604d2f4c69c565205bb89e8b4ef4_003FValidationMessageStore_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AValidationMessageStore_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ffc81648e473bb3cc818f71427c286ecddc3604d2f4c69c565205bb89e8b4ef4_003FValidationMessageStore_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD; <s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.16\ref\net7.0\System.ComponentModel.Annotations.dll" /&gt;&#xD; &lt;Assembly Path="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.16\ref\net7.0\System.ComponentModel.Annotations.dll" /&gt;&#xD;
&lt;Assembly Path="C:\Users\Remote\.nuget\packages\blazorstrap\5.2.100.61524\lib\net7.0\BlazorStrap.dll" /&gt;&#xD; &lt;Assembly Path="C:\Users\Remote\.nuget\packages\blazorstrap\5.2.100.61524\lib\net7.0\BlazorStrap.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String> &lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=420e6947_002Dcf5f_002D4e55_002D94cb_002D22d1ee8dd4ee/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="UserRepositoryTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;xUnit::1CAAC943-B8FE-48DD-9712-92699647DE18::net8.0::HopFrame.Database.Tests.Repositories.UserRepositoryTests&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String>

View File

@@ -24,7 +24,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\HopFrame.Database\HopFrame.Database.csproj" /> <ProjectReference Include="..\..\src\HopFrame.Database\HopFrame.Database.csproj" />
<ProjectReference Include="..\src\HopFrame.Database\HopFrame.Database.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -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<DatabaseContext>(context, new GroupRepository<DatabaseContext>(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);
}
}