using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using DevHive.Data.Models; using DevHive.Data.Repositories; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Moq; using NUnit.Framework; namespace DevHive.Data.Tests { [TestFixture] public class UserRepositoryTests { // private DevHiveContext _context; // private UserRepository _userRepository; // // #region Setups // [SetUp] // public void Setup() // { // DbContextOptionsBuilder options = new DbContextOptionsBuilder() // .UseInMemoryDatabase("DevHive_UserRepository_Database"); // this._context = new DevHiveContext(options.Options); // // Guid userId = Guid.NewGuid(); // Mock> userStore = new(); // userStore.Setup(x => x.FindByIdAsync(userId.ToString(), CancellationToken.None)) // .ReturnsAsync(new User() // { // Id = userId, // UserName = "test", // }); // Mock> userManagerMock = new(userStore.Object, null, null, null, null, null, null, null, null); // // Guid roleId = Guid.NewGuid(); // Mock> roleStore = new(); // roleStore.Setup(x => x.FindByIdAsync(roleId.ToString(), CancellationToken.None)) // .ReturnsAsync(new Role() // { // Id = roleId, // Name = "test", // }); // Mock> roleManagerMock = new(roleStore.Object, null, null, null, null); // this._userRepository = new(this._context, userManagerMock.Object, roleManagerMock.Object); // } // // [TearDown] // public async Task Teardown() // { // _ = await this._context.Database.EnsureDeletedAsync(); // } // #endregion // // #region EditAsync // [Test] // public async Task EditAsync_ReturnsTrue_WhenUserIsUpdatedSuccessfully() // { // User oldUser = CreateDummyUser(); // _ = this._context.Users.Add(oldUser); // _ = await this._context.SaveChangesAsync(); // // oldUser.UserName = "SuperSecretUserName"; // bool result = await this._userRepository.EditAsync(oldUser.Id, oldUser); // // Assert.IsTrue(result, "EditAsync does not return true when User is updated successfully"); // } // #endregion // // #region GetByIdAsync // [Test] // public async Task GetByIdAsync_ReturnsTheUse_WhenItExists() // { // User dummyUserOne = CreateDummyUser(); // _ = await this._userRepository.AddAsync(dummyUserOne); // // User resultUser = await this._userRepository.GetByIdAsync(dummyUserOne.Id); // // Assert.AreEqual(dummyUserOne.UserName, resultUser.UserName); // } // // [Test] // public async Task GetByIdAsync_ReturnsNull_WhenUserDoesNotExist() // { // Guid id = Guid.NewGuid(); // // User resultUser = await this._userRepository.GetByIdAsync(id); // // Assert.IsNull(resultUser); // } // #endregion // // #region GetByUsernameAsync // [Test] // public async Task GetByUsernameAsync_ReturnsUserFromDatabase_WhenItExists() // { // //Arrange // User dummyUser = CreateDummyUser(); // _ = await this._userRepository.AddAsync(dummyUser); // string username = dummyUser.UserName; // // //Act // User user = await this._userRepository.GetByUsernameAsync(username); // // //Assert // Assert.AreEqual(dummyUser.Id, user.Id, "Method doesn't get the proper user from database"); // } // // [Test] // public async Task GetByUsernameAsync_ReturnsNull_WhenUserDoesNotExist() // { // //Act // User user = await this._userRepository.GetByUsernameAsync(null); // // //Assert // Assert.IsNull(user, "Method returns user when it does not exist"); // } // #endregion // // #region DoesUserExistAsync // [Test] // public async Task DoesUserExistAsync_ReturnsTrue_WhenUserExists() // { // User dummyUser = CreateDummyUser(); // _ = this._context.Users.Add(dummyUser); // _ = await this._context.SaveChangesAsync(); // // bool result = await this._userRepository.DoesUserExistAsync(dummyUser.Id); // // Assert.IsTrue(result, "DoesUserExistAsync does not return true when user exists"); // } // // [Test] // public async Task DoesUserExistAsync_ReturnsFalse_WhenUserDoesNotExist() // { // Guid id = Guid.NewGuid(); // // bool result = await this._userRepository.DoesUserExistAsync(id); // // Assert.IsFalse(result, "DoesUserExistAsync does not return false when user does not exist"); // } // #endregion // // #region DoesUserNameExistAsync // [Test] // public async Task DoesUsernameExistAsync_ReturnsTrue_WhenUserWithTheNameExists() // { // User dummyUser = CreateDummyUser(); // _ = this._context.Users.Add(dummyUser); // _ = await this._context.SaveChangesAsync(); // // bool result = await this._userRepository.DoesUsernameExistAsync(dummyUser.UserName); // // Assert.IsTrue(result, "DoesUserNameExistAsync does not return true when username exists"); // } // // [Test] // public async Task DoesUsernameExistAsync_ReturnsFalse_WhenUserWithTheNameDoesNotExist() // { // string userName = "Fake name"; // // bool result = await this._userRepository.DoesUsernameExistAsync(userName); // // Assert.IsFalse(result, "DoesUserNameExistAsync does not return false when username does not exist"); // } // #endregion // // #region DoesEmailExistAsync // [Test] // public async Task DoesEmailExistAsync_ReturnsTrue_WhenUserWithTheEmailExists() // { // User dummyUser = CreateDummyUser(); // _ = this._context.Users.Add(dummyUser); // _ = await this._context.SaveChangesAsync(); // // bool result = await this._userRepository.DoesEmailExistAsync(dummyUser.Email); // // Assert.IsTrue(result, "DoesUserNameExistAsync does not return true when email exists"); // } // // [Test] // public async Task DoesEmailExistAsync_ReturnsFalse_WhenUserWithTheEmailDoesNotExist() // { // string email = "Fake email"; // // bool result = await this._userRepository.DoesEmailExistAsync(email); // // Assert.IsFalse(result, "DoesUserNameExistAsync does not return false when email does not exist"); // } // #endregion // // #region DoesUserHaveThisUsernameAsync // [Test] // public async Task DoesUserHaveThisUsername_ReturnsTrue_WhenUserHasTheGivenUsername() // { // User dummyUser = CreateDummyUser(); // _ = this._context.Users.Add(dummyUser); // _ = await this._context.SaveChangesAsync(); // // bool result = await this._userRepository.DoesUserHaveThisUsernameAsync(dummyUser.Id, dummyUser.UserName); // // Assert.IsTrue(result, "DoesUserHaveThisUsernameAsync does not return true when the user has the given name"); // } // // [Test] // public async Task DoesUserHaveThisUsername_ReturnsFalse_WhenUserDoesntHaveTheGivenUsername() // { // string username = "Fake username"; // User dummyUser = CreateDummyUser(); // _ = this._context.Users.Add(dummyUser); // _ = await this._context.SaveChangesAsync(); // // bool result = await this._userRepository.DoesUserHaveThisUsernameAsync(dummyUser.Id, username); // // Assert.IsFalse(result, "DoesUserNameExistAsync does not return false when user doesnt have the given name"); // } // #endregion // // #region HelperMethods // private static User CreateDummyUser() // { // HashSet languages = new() // { // new Language() // { // Id = Guid.NewGuid(), // Name = "csharp" // }, // }; // // HashSet technologies = new() // { // new Technology() // { // Id = Guid.NewGuid(), // Name = "ASP.NET Core" // }, // }; // // HashSet roles = new() // { // new Role() // { // Id = Guid.NewGuid(), // Name = Role.DefaultRole // }, // }; // // return new() // { // Id = Guid.NewGuid(), // UserName = "dummyUser", // FirstName = "Spas", // LastName = "Spasov", // Email = "abv@abv.bg", // Languages = languages, // Technologies = technologies, // Roles = roles // }; // } // #endregion } }