From 22de0e9630b2eef92967beba932b90a5d2a0250d Mon Sep 17 00:00:00 2001
From: Artemy <109195690+stalcker2288969@users.noreply.github.com>
Date: Tue, 17 Jun 2025 21:24:54 +0700
Subject: [PATCH] UserValidatorTests
---
Govor.API.Tests/Govor.API.Tests.csproj | 1 -
.../EF/Repositories/UsersRepositoryTests.cs | 22 +--
.../Validators/UserValidatorTests.cs | 169 ++++++++++++++++++
.../Validators/UserValidator.cs | 13 +-
Govor.Core/Models/User.cs | 4 +-
Govor.Data/Repositories/UsersRepository.cs | 14 +-
6 files changed, 196 insertions(+), 27 deletions(-)
create mode 100644 Govor.API.Tests/UnitTests/Infrastructure/Validators/UserValidatorTests.cs
diff --git a/Govor.API.Tests/Govor.API.Tests.csproj b/Govor.API.Tests/Govor.API.Tests.csproj
index 1f1527b..50de971 100644
--- a/Govor.API.Tests/Govor.API.Tests.csproj
+++ b/Govor.API.Tests/Govor.API.Tests.csproj
@@ -26,7 +26,6 @@
-
diff --git a/Govor.API.Tests/IntegrationTests/EF/Repositories/UsersRepositoryTests.cs b/Govor.API.Tests/IntegrationTests/EF/Repositories/UsersRepositoryTests.cs
index 4b59d62..fe3f284 100644
--- a/Govor.API.Tests/IntegrationTests/EF/Repositories/UsersRepositoryTests.cs
+++ b/Govor.API.Tests/IntegrationTests/EF/Repositories/UsersRepositoryTests.cs
@@ -53,7 +53,7 @@ public class UsersRepositoryTests
Assert.That(result, Is.Not.Null);
Assert.That(result.Count, Is.EqualTo(users.Count));
Assert.That(result.Select(u => u.Id), Is.EquivalentTo(users.Select(u => u.Id)));
- Assert.That(result.Select(u => u.Username), Is.EquivalentTo(users.Select(u => u.Username)));
+ Assert.That(result.Select(u => u.Name), Is.EquivalentTo(users.Select(u => u.Name)));
}
[Test]
@@ -72,7 +72,7 @@ public class UsersRepositoryTests
// Assert
Assert.That(result, Is.Not.Null);
- Assert.That(result.Username, Is.EqualTo(user.Username));
+ Assert.That(result.Name, Is.EqualTo(user.Name));
Assert.That(result.Id, Is.EqualTo(user.Id));
}
@@ -109,7 +109,7 @@ public class UsersRepositoryTests
Assert.That(result, Is.Not.Null);
Assert.That(result.Count, Is.EqualTo(users.Count));
Assert.That(result.Select(r => r.Id), Is.EquivalentTo(users.Select(u => u.Id)));
- Assert.That(result.Select(u => u.Username), Is.EquivalentTo(users.Select(u => u.Username)));
+ Assert.That(result.Select(u => u.Name), Is.EquivalentTo(users.Select(u => u.Name)));
}
[Test]
@@ -140,10 +140,10 @@ public class UsersRepositoryTests
await context.SaveChangesAsync();
// Act
- var result = await userRepository.FindByUsername(user.Username);
+ var result = await userRepository.FindByUsername(user.Name);
// Assert
Assert.That(result, Is.Not.Null);
- Assert.That(result.Username, Is.EqualTo(user.Username));
+ Assert.That(result.Name, Is.EqualTo(user.Name));
Assert.That(result.Id, Is.EqualTo(user.Id));
}
@@ -174,11 +174,11 @@ public class UsersRepositoryTests
await context.SaveChangesAsync();
// Act
- var result = await userRepository.FindByRangeUsernames(users.Select(u => u.Username));
+ var result = await userRepository.FindByRangeUsernames(users.Select(u => u.Name));
// Assert
Assert.That(result, Is.Not.Null);
- Assert.That(result.Select(u => u.Username), Is.EquivalentTo(users.Select(u => u.Username)));
+ Assert.That(result.Select(u => u.Name), Is.EquivalentTo(users.Select(u => u.Name)));
Assert.That(result.Select(u => u.Id), Is.EquivalentTo(users.Select(u => u.Id)));
}
@@ -254,7 +254,7 @@ public class UsersRepositoryTests
// Assert
Assert.That(res, Is.Not.Null);
- Assert.That(res.Username, Is.EqualTo(user.Username));
+ Assert.That(res.Name, Is.EqualTo(user.Name));
Assert.That(res.Id, Is.EqualTo(user.Id));
}
@@ -262,7 +262,7 @@ public class UsersRepositoryTests
public async Task Given_InvalidUser_When_AddUser_Should_Throw_AdditionUserException()
{
var user = _fixture.Create();
- user.Username = string.Empty;
+ user.Name = string.Empty;
await using var context = new GovorDbContext(_options);
var userRepository = new UsersRepository(context, _userValidator);
@@ -361,7 +361,7 @@ public class UsersRepositoryTests
await context.SaveChangesAsync();
// Act
- var res = await userRepository.ExistsUsername(user.Username);
+ var res = await userRepository.ExistsUsername(user.Name);
// Assert
Assert.That(res, Is.True);
@@ -378,7 +378,7 @@ public class UsersRepositoryTests
// Act
- var res = await userRepository.ExistsUsername(user.Username);
+ var res = await userRepository.ExistsUsername(user.Name);
// Assert
Assert.That(res, Is.False);
diff --git a/Govor.API.Tests/UnitTests/Infrastructure/Validators/UserValidatorTests.cs b/Govor.API.Tests/UnitTests/Infrastructure/Validators/UserValidatorTests.cs
new file mode 100644
index 0000000..8a5eee5
--- /dev/null
+++ b/Govor.API.Tests/UnitTests/Infrastructure/Validators/UserValidatorTests.cs
@@ -0,0 +1,169 @@
+using AutoFixture;
+using Govor.Core.Infrastructure.Validators;
+using Govor.Core.Models;
+
+namespace Govor.API.Tests.UnitTests.Infrastructure.Validators;
+
+[TestFixture]
+public class UserValidatorTests
+{
+ private IObjectValidator _userValidator;
+ private Fixture _fixture;
+
+ [SetUp]
+ public void SetUp()
+ {
+ _userValidator = new UserValidator();
+
+ _fixture = new Fixture();
+
+ _fixture.Behaviors
+ .OfType()
+ .ToList()
+ .ForEach(b => _fixture.Behaviors.Remove(b));
+
+ _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
+ }
+
+ [Test]
+ public void Given_NullUser_ShouldThrow_InvalidObjectException()
+ {
+ // Act & Assert
+ Assert.ThrowsAsync>(async () => _userValidator.Validate(default));
+ }
+
+ [Test]
+ public void Given_NullUser_Then_Returns_False()
+ {
+ // Act & Assert
+ Assert.That(_userValidator.TryValidate(default), Is.False);
+ }
+
+ [Test]
+ public void Given_EmptyId_ShouldThrow_InvalidObjectException()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = _fixture.Create(),
+ Id = Guid.Empty,
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.ThrowsAsync>(async () => _userValidator.Validate(user));
+ }
+
+ [Test]
+ public void Given_EmptyId_Then_Returns_False()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = _fixture.Create(),
+ Id = Guid.Empty,
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.That(_userValidator.TryValidate(user), Is.False);
+ }
+
+ [Test]
+ public void Given_EmptyPassword_ShouldThrow_InvalidObjectException()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = string.Empty,
+ Name = _fixture.Create(),
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.ThrowsAsync>(async () => _userValidator.Validate(user));
+ }
+
+ [Test]
+ public void Given_EmptyPassword_Then_Returns_False()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = string.Empty,
+ Name = _fixture.Create(),
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.That(_userValidator.TryValidate(user), Is.False);
+ }
+
+ [Test]
+ public void Given_EmptyName_ShouldThrow_InvalidObjectException()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = String.Empty,
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.ThrowsAsync>(async () => _userValidator.Validate(user));
+ }
+
+ [Test]
+ public void Given_EmptyName_Then_Returns_False()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = String.Empty,
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.That(_userValidator.TryValidate(user), Is.False);
+ }
+
+ [Test]
+ public void Given_ValidUser_ShouldNotThrow_InvalidObjectException()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = _fixture.Create(),
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.DoesNotThrowAsync(async () => _userValidator.Validate(user));
+ }
+
+ [Test]
+ public void Given_ValidUser_Then_Returns_True()
+ {
+ // Arrange
+ User user = new User()
+ {
+ PasswordHash = _fixture.Create(),
+ Name = _fixture.Create(),
+ Id = Guid.NewGuid(),
+ CreatedOn = DateOnly.FromDateTime(DateTime.Now),
+ };
+
+ // Act & Assert
+ Assert.That(_userValidator.TryValidate(user), Is.True);
+ }
+}
\ No newline at end of file
diff --git a/Govor.Core/Infrastructure/Validators/UserValidator.cs b/Govor.Core/Infrastructure/Validators/UserValidator.cs
index d6c661b..9772176 100644
--- a/Govor.Core/Infrastructure/Validators/UserValidator.cs
+++ b/Govor.Core/Infrastructure/Validators/UserValidator.cs
@@ -7,6 +7,7 @@ public class UserValidator : IObjectValidator
{
public const int MIN_LENGHT_OF_NAME = 4;
public const int MAX_LENGHT_OF_NAME = 100;
+
public void Validate(User user)
{
try
@@ -15,12 +16,12 @@ public class UserValidator : IObjectValidator
throw new ArgumentNullException(nameof(user));
if(user.Id == Guid.Empty)
throw new ArgumentException("User ID cannot be empty", nameof(user.Id));
- if(user.Username is null
- || user.Username.Length < MIN_LENGHT_OF_NAME
- || user.Username.Length > MAX_LENGHT_OF_NAME)
- throw new ArgumentException($"Username cannot be empty or less then {MIN_LENGHT_OF_NAME} chars or more then {MAX_LENGHT_OF_NAME}", nameof(user.Username));
- if(user.HashPassword is null || user.HashPassword == string.Empty)
- throw new ArgumentException("Password cannot be empty", nameof(user.HashPassword));
+ if(user.Name is null
+ || user.Name.Length < MIN_LENGHT_OF_NAME
+ || user.Name.Length > MAX_LENGHT_OF_NAME)
+ throw new ArgumentException($"Username cannot be empty or less then {MIN_LENGHT_OF_NAME} chars or more then {MAX_LENGHT_OF_NAME}", nameof(user.Name));
+ if(user.PasswordHash is null || user.PasswordHash == string.Empty)
+ throw new ArgumentException("Password cannot be empty", nameof(user.PasswordHash));
if(user.CreatedOn == DateOnly.MinValue)
throw new ArgumentException("Time of creation account cannot be empty", nameof(user.CreatedOn));
}
diff --git a/Govor.Core/Models/User.cs b/Govor.Core/Models/User.cs
index 43b109f..3f00a4d 100644
--- a/Govor.Core/Models/User.cs
+++ b/Govor.Core/Models/User.cs
@@ -5,9 +5,9 @@ namespace Govor.Core.Models;
public class User
{
public Guid Id {get; set;}
- public string Username {get; set;}
+ public string Name {get; set;}
public string Description {get; set;}
- public string HashPassword {get; set;}
+ public string PasswordHash {get; set;}
public Guid IconId {get; set;}
public DateOnly CreatedOn {get; set;}
public DateTime WasOnline {get; set;}
diff --git a/Govor.Data/Repositories/UsersRepository.cs b/Govor.Data/Repositories/UsersRepository.cs
index 67a6b56..83db39f 100644
--- a/Govor.Data/Repositories/UsersRepository.cs
+++ b/Govor.Data/Repositories/UsersRepository.cs
@@ -54,7 +54,7 @@ public class UsersRepository : IUsersRepository
return await _context.Users
.AsNoTracking()
- .FirstOrDefaultAsync(x => x.Username == username)
+ .FirstOrDefaultAsync(x => x.Name == username)
?? throw new NotFoundByKeyException(username, "User with given username does not exist");
}
@@ -65,7 +65,7 @@ public class UsersRepository : IUsersRepository
return await _context.Users
.AsNoTracking()
- .Where(x => usernames.Contains(x.Username))
+ .Where(x => usernames.Contains(x.Name))
.ToListOrThrowIfEmpty(new NotFoundByKeyException>(usernames, "Users with given usernames not found"));
}
@@ -109,11 +109,11 @@ public class UsersRepository : IUsersRepository
var rowsAffected = await _context.Users
.Where(u => u.Id == user.Id)
.ExecuteUpdateAsync(u => u
- .SetProperty(a => a.Username, user.Username)
+ .SetProperty(a => a.Name, user.Name)
.SetProperty(u => u.IconId, user.IconId)
.SetProperty(u => u.Description, user.Description)
.SetProperty(u => u.CreatedOn, user.CreatedOn)
- .SetProperty(u => u.HashPassword, user.HashPassword)
+ .SetProperty(u => u.PasswordHash, user.PasswordHash)
.SetProperty(u => u.WasOnline, user.WasOnline)
);
@@ -168,8 +168,8 @@ public class UsersRepository : IUsersRepository
return _context.Users.AnyAsync(u =>
u.Id == user.Id &&
- u.Username == user.Username &&
- u.HashPassword == user.HashPassword
+ u.Name == user.Name &&
+ u.PasswordHash == user.PasswordHash
);
}
@@ -180,7 +180,7 @@ public class UsersRepository : IUsersRepository
public Task ExistsUsername(string username)
{
- return _context.Users.AnyAsync(u => u.Username == username);
+ return _context.Users.AnyAsync(u => u.Name == username);
}
}