using LibraryManagementSystem.Console.Database; using LibraryManagementSystem.Console.Models; using LibraryManagementSystem.Console.Repositories; using LibraryManagementSystem.Console.Utils; namespace LibraryManagementSystem.Tests; /// /// Тестирует CRUD операции пользователей. /// public class UserRepositoryTests { private readonly IUserRepository _repository; /// /// Инициализирует тестовый репозиторий. /// public UserRepositoryTests() { DatabaseManager databaseManager = new(); _repository = new UserRepository(databaseManager); TestHelper.CleanupUsers(); } /// /// Проверяет добавление пользователя. /// [Fact] public void Create_Should_Add_User() { // Arrange User user = new() { Username = "test_user", PasswordHash = PasswordHasher.HashPassword("12345"), Email = "test@test.com", }; // Act int id = _repository.Create(user); User? createdUser = _repository.GetById(id); // Assert Assert.NotNull(createdUser); Assert.Equal("test_user", createdUser!.Username); } /// /// Проверяет получение всех пользователей. /// [Fact] public void GetAll_Should_Return_Users() { // Arrange User user = new() { Username = "reader", PasswordHash = PasswordHasher.HashPassword("12345"), Email = "reader@test.com", }; _repository.Create(user); // Act var users = _repository.GetAll(); // Assert Assert.NotEmpty(users); } /// /// Проверяет обновление пользователя. /// [Fact] public void Update_Should_Modify_User() { // Arrange User user = new() { Username = "before_update", PasswordHash = PasswordHasher.HashPassword("12345"), Email = "before@test.com", }; int id = _repository.Create(user); User? existingUser = _repository.GetById(id); Assert.NotNull(existingUser); existingUser!.Username = "updated_user"; existingUser.Email = "updated@test.com"; // Act bool result = _repository.Update(existingUser); User? updatedUser = _repository.GetById(id); // Assert Assert.True(result); Assert.NotNull(updatedUser); Assert.Equal("updated_user", updatedUser!.Username); } /// /// Проверяет удаление пользователя. /// [Fact] public void Delete_Should_Remove_User() { // Arrange User user = new() { Username = "delete_me", PasswordHash = PasswordHasher.HashPassword("12345"), Email = "delete@test.com", }; int id = _repository.Create(user); // Act bool deleted = _repository.Delete(id); User? deletedUser = _repository.GetById(id); // Assert Assert.True(deleted); Assert.Null(deletedUser); } }