diff --git a/MainProject.Tests/Core/Attributes/JwtAuthorizationAttribute_Tests.cs b/MainProject.Tests/Core/Attributes/JwtAuthorizationAttribute_Tests.cs index d6fa510..1523008 100644 --- a/MainProject.Tests/Core/Attributes/JwtAuthorizationAttribute_Tests.cs +++ b/MainProject.Tests/Core/Attributes/JwtAuthorizationAttribute_Tests.cs @@ -54,13 +54,6 @@ public class JwtAuthorizationAttribute_Tests return new AuthorizationFilterContext(actionContext, []); } - private static AuthorizationFilterContext CreateAuthorizationContext() - { - var httpContext = new DefaultHttpContext(); - var actionContext = new ActionContext(httpContext, new RouteData(), new ControllerActionDescriptor()); - return new AuthorizationFilterContext(actionContext, new List()); - } - [TestMethod] public void OnAuthorization_AllowAnonymous_SkipsAuthorization() { @@ -81,7 +74,7 @@ public class JwtAuthorizationAttribute_Tests [TestMethod] public void OnAuthorization_NoAuthenticatedUser_ReturnsUnauthorized() { - var context = CreateAuthorizationContext(); + var context = TestUtils.CreateAuthorizationContext(); IConfiguration configuration = TestUtils.CreateConfiguration(); context.HttpContext.RequestServices = new ServiceCollection() @@ -96,7 +89,7 @@ public class JwtAuthorizationAttribute_Tests [TestMethod] public void OnAuthorization_EmptyAuthorizationHeader_ReturnsUnauthorized() { - var context = CreateAuthorizationContext(); + var context = TestUtils.CreateAuthorizationContext(); IConfiguration configuration = TestUtils.CreateConfiguration(); context.HttpContext.RequestServices = new ServiceCollection() @@ -115,7 +108,7 @@ public class JwtAuthorizationAttribute_Tests [TestMethod] public void OnAuthorization_InvalidToken_ReturnsUnauthorized() { - var context = CreateAuthorizationContext(); + var context = TestUtils.CreateAuthorizationContext(); IConfiguration configuration = TestUtils.CreateConfiguration(); context.HttpContext.RequestServices = new ServiceCollection() @@ -135,7 +128,7 @@ public class JwtAuthorizationAttribute_Tests [TestMethod] public void OnAuthorization_ValidToken() { - var context = CreateAuthorizationContext(); + var context = TestUtils.CreateAuthorizationContext(); IConfiguration configuration = TestUtils.CreateConfiguration(); context.HttpContext.RequestServices = new ServiceCollection() diff --git a/MainProject.Tests/Services/RoleService_Tests.cs b/MainProject.Tests/Services/RoleService_Tests.cs index 4a84867..dfd172e 100644 --- a/MainProject.Tests/Services/RoleService_Tests.cs +++ b/MainProject.Tests/Services/RoleService_Tests.cs @@ -186,6 +186,81 @@ public class RoleService_Tests } } + [TestMethod] + public async Task GetRoleByGuidAsync_CurrentRole() + { + try + { + if (_roleService != null) + { + var role = await _roleService.GetRoleForUser(_role?.Guid); + Assert.IsNotNull(role); + Assert.IsTrue(role.Guid == _role?.Guid); + } + else + { + Assert.Fail($"RoleService is null"); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.InnerException); + Assert.Fail($"An exception was thrown: {ex}"); + } + } + + [TestMethod] + public async Task GetRoleByGuidAsync_Default() + { + try + { + if (_roleService != null) + { + CreateRoleRequestData data = new() + { + Name = "Default", + IsNotEditable = true + }; + var roleCreated = await _roleService.CreateRoleAsync(data); + var role = await _roleService.GetRoleForUser(String.Empty); + Assert.IsNotNull(role); + Assert.IsTrue(roleCreated?.Guid == role?.Guid); + Assert.IsTrue(role?.Name == "Default"); + } + else + { + Assert.Fail($"RoleService is null"); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.InnerException); + Assert.Fail($"An exception was thrown: {ex}"); + } + } + + [TestMethod] + public async Task GetRoleByGuidAsync_Null() + { + try + { + if (_roleService != null) + { + var role = await _roleService.GetRoleForUser(Guid.NewGuid().ToString()); + Assert.IsNull(role); + } + else + { + Assert.Fail($"RoleService is null"); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.InnerException); + Assert.Fail($"An exception was thrown: {ex}"); + } + } + [TestMethod] public async Task DeleteRoleAsync() { diff --git a/MainProject.Tests/TestsUtils/TestUtils.cs b/MainProject.Tests/TestsUtils/TestUtils.cs index 68769b0..099777c 100644 --- a/MainProject.Tests/TestsUtils/TestUtils.cs +++ b/MainProject.Tests/TestsUtils/TestUtils.cs @@ -19,12 +19,24 @@ using BasicDotnetTemplate.MainProject.Core.Database; using BasicDotnetTemplate.MainProject.Services; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Routing; +using Microsoft.AspNetCore.Mvc.Controllers; namespace BasicDotnetTemplate.MainProject.Tests; public static class TestUtils { + + public static AuthorizationFilterContext CreateAuthorizationContext() + { + var httpContext = new DefaultHttpContext(); + var actionContext = new ActionContext(httpContext, new RouteData(), new ControllerActionDescriptor()); + return new AuthorizationFilterContext(actionContext, new List()); + } + public static IConfiguration CreateConfiguration() { WebApplicationBuilder builder = WebApplication.CreateBuilder(Array.Empty()); @@ -64,6 +76,16 @@ public static class TestUtils return context; } + public static BaseService CreateBaseService() + { + IConfiguration configuration = CreateConfiguration(); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseSqlServer(GetSqlConnectionString(configuration)); + SqlServerContext sqlServerContext = CreateInMemorySqlContext(); + var httpContextAccessor = new Mock(); + return new BaseService(httpContextAccessor.Object, configuration, sqlServerContext); + } + public static AuthService CreateAuthService() { IConfiguration configuration = CreateConfiguration(); diff --git a/MainProject/Services/RoleService.cs b/MainProject/Services/RoleService.cs index d729d60..96f127b 100644 --- a/MainProject/Services/RoleService.cs +++ b/MainProject/Services/RoleService.cs @@ -19,6 +19,7 @@ public interface IRoleService public class RoleService : BaseService, IRoleService { + private readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); public RoleService( IHttpContextAccessor httpContextAccessor, IConfiguration configuration, @@ -92,14 +93,22 @@ public class RoleService : BaseService, IRoleService { Role? role = null; - using (var transaction = _sqlServerContext.Database.BeginTransactionAsync()) + using var transaction = await _sqlServerContext.Database.BeginTransactionAsync(); + + try { var tempRole = this.CreateRoleData(data); await _sqlServerContext.Roles.AddAsync(tempRole); await _sqlServerContext.SaveChangesAsync(); - await (await transaction).CommitAsync(); + await transaction.CommitAsync(); role = tempRole; } + catch (Exception exception) + { + await transaction.RollbackAsync(); + Logger.Error(exception, $"[RoleService][CreateRoleAsync]"); + throw; + } return role; } diff --git a/MainProject/Services/UserService.cs b/MainProject/Services/UserService.cs index 0674915..ba471ab 100644 --- a/MainProject/Services/UserService.cs +++ b/MainProject/Services/UserService.cs @@ -11,7 +11,6 @@ public interface IUserService { Task GetUserByIdAsync(int id); Task GetUserByGuidAsync(string guid); - Task GetUserByEmailAsync(string email); Task GetUserByUsernameAndPassword(string email, string password); Task CheckIfEmailIsValid(string email, string? guid = ""); Task CreateUserAsync(CreateUserRequestData data, Role role); @@ -29,19 +28,19 @@ public class UserService : BaseService, IUserService { } private IQueryable GetUsersQueryable() - { //NOSONAR + { return this._sqlServerContext.Users.Where(x => !x.IsDeleted); - } //NOSONAR + } private IQueryable GetUserByEmailQueryable(string email) - { //NOSONAR + { return this.GetUsersQueryable().Where(x => x.Email.ToString() == email.ToString() ); - } //NOSONAR + } private User CreateUserData(CreateUserRequestData data, Role role) - { //NOSONAR + { User user = new() { CreationTime = DateTime.UtcNow, @@ -59,35 +58,30 @@ public class UserService : BaseService, IUserService }; return user; - } //NOSONAR + } public async Task GetUserByIdAsync(int id) - { //NOSONAR + { return await this.GetUsersQueryable().Where(x => x.Id == id).FirstOrDefaultAsync(); - } //NOSONAR + } public async Task GetUserByGuidAsync(string guid) - { //NOSONAR + { return await this.GetUsersQueryable().Where(x => x.Guid == guid).FirstOrDefaultAsync(); - } //NOSONAR - - public async Task GetUserByEmailAsync(string email) - { //NOSONAR - return await this.GetUserByEmailQueryable(email).FirstOrDefaultAsync(); - } //NOSONAR + } public async Task GetUserByUsernameAndPassword(string email, string password) - { //NOSONAR + { User? user = await this.GetUserByEmailQueryable(email).FirstOrDefaultAsync(); if (user != null) - { //NOSONAR + { var encryptedPassword = user.PasswordHash; Console.WriteLine(encryptedPassword); - } //NOSONAR + } return user; - } //NOSONAR + } public async Task CheckIfEmailIsValid(string email, string? guid = "") { @@ -109,28 +103,28 @@ public class UserService : BaseService, IUserService } public async Task CreateUserAsync(CreateUserRequestData data, Role role) - { //NOSONAR + { using var transaction = await _sqlServerContext.Database.BeginTransactionAsync(); User? user; var tempUser = CreateUserData(data, role); try - { //NOSONAR + { await _sqlServerContext.Users.AddAsync(tempUser); await _sqlServerContext.SaveChangesAsync(); await transaction.CommitAsync(); user = tempUser; - } //NOSONAR + } catch (Exception exception) - { //NOSONAR + { await transaction.RollbackAsync(); Logger.Error(exception, $"[UserService][CreateUserAsync]"); throw; - } //NOSONAR + } return user; - } //NOSONAR + } public async Task DeleteUserAsync(User user) {