using System; using System.Linq; 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 RoleRepositoryTests { private const string ROLE_NAME = "Role test name"; private DevHiveContext _context; private RoleRepository _roleRepository; #region Setups [SetUp] public void Setup() { DbContextOptionsBuilder optionsBuilder = new DbContextOptionsBuilder() .UseInMemoryDatabase(databaseName: "DevHive_Test_Database"); this._context = new DevHiveContext(optionsBuilder.Options); Mock> roleManagerMock = new(); this._roleRepository = new(this._context, roleManagerMock.Object); } [TearDown] public void TearDown() { _ = this._context.Database.EnsureDeleted(); } #endregion #region GetByNameAsync [Test] public async Task GetByNameAsync_ReturnsTheRole_WhenItExists() { Role role = await this.AddEntity(); Role resultRole = await this._roleRepository.GetByNameAsync(role.Name); Assert.AreEqual(role.Id, resultRole.Id, "GetByNameAsync does not return the correct role"); } [Test] public async Task GetByNameAsync_ReturnsNull_WhenTheRoleDoesNotExist() { Role resultRole = await this._roleRepository.GetByNameAsync(ROLE_NAME); Assert.IsNull(resultRole, "GetByNameAsync does not return when the role does not exist"); } #endregion #region DoesNameExist [Test] public async Task DoesNameExist_ReturnsTrue_WhenTheNameExists() { Role role = await this.AddEntity(); bool result = await this._roleRepository.DoesNameExist(role.Name); Assert.IsTrue(result, "DoesNameExist returns false when the role name exist"); } [Test] public async Task DoesNameExist_ReturnsFalse_WhenTheNameDoesNotExist() { bool result = await this._roleRepository.DoesNameExist(ROLE_NAME); Assert.IsFalse(result, "DoesNameExist returns false when the role name exist"); } #endregion #region DoesRoleExist [Test] public async Task DoesRoleExist_ReturnsTrue_IfIdExists() { _ = await this.AddEntity(); Role role = this._context.Roles.Where(x => x.Name == ROLE_NAME).AsEnumerable().FirstOrDefault(); Guid id = role.Id; bool result = await this._roleRepository.DoesRoleExist(id); Assert.IsTrue(result, "DoesRoleExistAsync returns flase when role exists"); } [Test] public async Task DoesRoleExist_ReturnsFalse_IfIdDoesNotExists() { Guid id = Guid.NewGuid(); bool result = await this._roleRepository.DoesRoleExist(id); Assert.IsFalse(result, "DoesRoleExist returns true when role does not exist"); } #endregion #region HelperMethods private async Task AddEntity(string name = ROLE_NAME) { Role role = new() { Id = Guid.NewGuid(), Name = name }; _ = this._context.Roles.Add(role); _ = await this._context.SaveChangesAsync(); return role; } #endregion } }