From e725d029bcd05f9c945312a3c931064a14d2bd5e Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 13 Mar 2021 16:10:36 +0200 Subject: Updated user service tests to use jwt service, added some missing mocks to user login and register tests --- .../DevHive.Services.Tests/UserService.Tests.cs | 66 ++++++++-------------- 1 file changed, 22 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/Services/DevHive.Services.Tests/UserService.Tests.cs b/src/Services/DevHive.Services.Tests/UserService.Tests.cs index 8642733..2554706 100644 --- a/src/Services/DevHive.Services.Tests/UserService.Tests.cs +++ b/src/Services/DevHive.Services.Tests/UserService.Tests.cs @@ -1,26 +1,20 @@ using System; using System.Collections.Generic; -using System.IdentityModel.Tokens.Jwt; -using System.Security.Claims; -using System.Text; using System.Threading.Tasks; using AutoMapper; +using DevHive.Common.Jwt.Interfaces; using DevHive.Common.Models.Identity; -using DevHive.Common.Models.Misc; using DevHive.Data.Interfaces; using DevHive.Data.Models; using DevHive.Services.Interfaces; using DevHive.Services.Models.User; -using DevHive.Services.Options; using DevHive.Services.Services; -using Microsoft.AspNetCore.Identity; -using Microsoft.IdentityModel.Tokens; using Moq; using NUnit.Framework; namespace DevHive.Services.Tests { - [TestFixture] + [TestFixture] public class UserServiceTests { private Mock _cloudServiceMock; @@ -29,7 +23,7 @@ namespace DevHive.Services.Tests private Mock _languageRepositoryMock; private Mock _technologyRepositoryMock; private Mock _mapperMock; - private JwtOptions _jwtOptions; + private Mock _jwtServiceMock; private UserService _userService; #region SetUps @@ -41,7 +35,7 @@ namespace DevHive.Services.Tests this._cloudServiceMock = new Mock(); this._languageRepositoryMock = new Mock(); this._technologyRepositoryMock = new Mock(); - this._jwtOptions = new JwtOptions("gXfQlU6qpDleFWyimscjYcT3tgFsQg3yoFjcvSLxG56n1Vu2yptdIUq254wlJWjm"); + this._jwtServiceMock = new Mock(); this._mapperMock = new Mock(); this._userService = new UserService( this._userRepositoryMock.Object, @@ -49,8 +43,8 @@ namespace DevHive.Services.Tests this._roleRepositoryMock.Object, this._technologyRepositoryMock.Object, this._mapperMock.Object, - this._jwtOptions, - this._cloudServiceMock.Object); + this._cloudServiceMock.Object, + this._jwtServiceMock.Object); } #endregion @@ -74,11 +68,15 @@ namespace DevHive.Services.Tests this._userRepositoryMock.Setup(p => p.DoesUsernameExistAsync(It.IsAny())) .Returns(Task.FromResult(true)); + this._userRepositoryMock.Setup(p => + p.VerifyPassword(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(true)); this._userRepositoryMock.Setup(p => p.GetByUsernameAsync(It.IsAny())) .Returns(Task.FromResult(user)); - string jwtSecurityToken = this.WriteJWTSecurityToken(user.Id, user.UserName, user.Roles); + string jwtSecurityToken = "akjdhfakndvlahdfkljahdlfkjhasldf"; + this._jwtServiceMock.Setup(p => p.GenerateJwtToken(It.IsAny(), It.IsAny(), It.IsAny>())).Returns(jwtSecurityToken); TokenModel tokenModel = await this._userService.LoginUser(loginServiceModel); Assert.AreEqual(jwtSecurityToken, tokenModel.Token, "LoginUser does not return the correct token"); @@ -146,12 +144,21 @@ namespace DevHive.Services.Tests this._userRepositoryMock.Setup(p => p.DoesUsernameExistAsync(It.IsAny())) .Returns(Task.FromResult(false)); + this._userRepositoryMock.Setup(p => + p.VerifyPassword(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(true)); this._userRepositoryMock.Setup(p => p.DoesEmailExistAsync(It.IsAny())) .Returns(Task.FromResult(false)); this._userRepositoryMock.Setup(p => p.AddAsync(It.IsAny())) .ReturnsAsync(true); + this._userRepositoryMock.Setup(p => + p.AddRoleToUser(It.IsAny(), It.IsAny())) + .ReturnsAsync(true); + this._userRepositoryMock.Setup(p => + p.GetByUsernameAsync(It.IsAny())) + .ReturnsAsync(user); this._roleRepositoryMock.Setup(p => p.DoesNameExist(It.IsAny())) @@ -164,7 +171,8 @@ namespace DevHive.Services.Tests p.Map(It.IsAny())) .Returns(user); - string jwtSecurityToken = this.WriteJWTSecurityToken(user.Id, user.UserName, roles); + string jwtSecurityToken = "akjdhfakndvlahdfkljahdlfkjhasldf"; + this._jwtServiceMock.Setup(p => p.GenerateJwtToken(It.IsAny(), It.IsAny(), It.IsAny>())).Returns(jwtSecurityToken); TokenModel tokenModel = await this._userService.RegisterUser(registerServiceModel); Assert.AreEqual(jwtSecurityToken, tokenModel.Token, "RegisterUser does not return the correct token"); @@ -413,35 +421,5 @@ namespace DevHive.Services.Tests Assert.AreEqual(exceptionMessage, ex.Message, "Incorrect exception message"); } #endregion - - #region HelperMethods - private string WriteJWTSecurityToken(Guid userId, string username, HashSet roles) - { - byte[] signingKey = Encoding.ASCII.GetBytes(this._jwtOptions.Secret); - HashSet claims = new() - { - new Claim("ID", $"{userId}"), - new Claim("Username", username), - }; - - foreach (Role role in roles) - { - claims.Add(new Claim(ClaimTypes.Role, role.Name)); - } - - SecurityTokenDescriptor tokenDescriptor = new() - { - Subject = new ClaimsIdentity(claims), - Expires = DateTime.Today.AddDays(7), - SigningCredentials = new SigningCredentials( - new SymmetricSecurityKey(signingKey), - SecurityAlgorithms.HmacSha512Signature) - }; - - JwtSecurityTokenHandler tokenHandler = new(); - SecurityToken token = tokenHandler.CreateToken(tokenDescriptor); - return tokenHandler.WriteToken(token); - } - #endregion } } -- cgit v1.2.3