From bba686199ec97d83f9073934f6877e7bae6bd2cc Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 4 Feb 2021 21:44:39 +0200 Subject: Added UserController tests --- .../DevHive.Web.Tests/UserController.Tests.cs | 257 +++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 src/DevHive.Tests/DevHive.Web.Tests/UserController.Tests.cs (limited to 'src/DevHive.Tests/DevHive.Web.Tests/UserController.Tests.cs') diff --git a/src/DevHive.Tests/DevHive.Web.Tests/UserController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/UserController.Tests.cs new file mode 100644 index 0000000..c1431c8 --- /dev/null +++ b/src/DevHive.Tests/DevHive.Web.Tests/UserController.Tests.cs @@ -0,0 +1,257 @@ +using System; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Common.Models.Identity; +using DevHive.Services.Interfaces; +using DevHive.Services.Models.Identity.User; +using DevHive.Web.Controllers; +using DevHive.Web.Models.Identity.User; +using Microsoft.AspNetCore.Mvc; +using Moq; +using NUnit.Framework; + +namespace DevHive.Web.Tests +{ + [TestFixture] + public class UserControllerTests + { + const string USERNAME = "Gosho Trapov"; + private Mock UserServiceMock { get; set; } + private Mock MapperMock { get; set; } + private UserController UserController { get; set; } + + [SetUp] + public void SetUp() + { + this.UserServiceMock = new Mock(); + this.MapperMock = new Mock(); + this.UserController = new UserController(this.UserServiceMock.Object, this.MapperMock.Object); + } + + #region Create + [Test] + public void LoginUser_ReturnsOkObjectResult_WhenUserIsSuccessfullyLoggedIn() + { + Guid id = Guid.NewGuid(); + LoginWebModel loginWebModel = new LoginWebModel + { + UserName = USERNAME + }; + LoginServiceModel loginServiceModel = new LoginServiceModel + { + UserName = USERNAME + }; + string token = "goshotrapov"; + TokenModel tokenModel = new TokenModel(token); + TokenWebModel tokenWebModel = new TokenWebModel(token); + + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(loginServiceModel); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(tokenWebModel); + this.UserServiceMock.Setup(p => p.LoginUser(It.IsAny())).Returns(Task.FromResult(tokenModel)); + + IActionResult result = this.UserController.Login(loginWebModel).Result; + + Assert.IsInstanceOf(result); + + var resultToken = ((result as OkObjectResult).Value as TokenWebModel).Token; + + Assert.AreEqual(token, resultToken); + } + + [Test] + public void RegisterUser_ReturnsOkObjectResult_WhenUserIsSuccessfullyRegistered() + { + Guid id = Guid.NewGuid(); + RegisterWebModel registerWebModel = new RegisterWebModel + { + UserName = USERNAME + }; + RegisterServiceModel registerServiceModel = new RegisterServiceModel + { + UserName = USERNAME + }; + string token = "goshotrapov"; + TokenModel tokenModel = new TokenModel(token); + TokenWebModel tokenWebModel = new TokenWebModel(token); + + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(registerServiceModel); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(tokenWebModel); + this.UserServiceMock.Setup(p => p.RegisterUser(It.IsAny())).Returns(Task.FromResult(tokenModel)); + + IActionResult result = this.UserController.Register(registerWebModel).Result; + + Assert.IsInstanceOf(result); + + CreatedResult createdResult = result as CreatedResult; + TokenWebModel resultModel = (createdResult.Value as TokenWebModel); + + Assert.AreEqual(token, resultModel.Token); + } + #endregion + + #region Read + [Test] + public void GetById_ReturnsTheUser_WhenItExists() + { + Guid id = Guid.NewGuid(); + + UserServiceModel userServiceModel = new UserServiceModel + { + UserName = USERNAME + }; + UserWebModel userWebModel = new UserWebModel + { + UserName = USERNAME + }; + + this.UserServiceMock.Setup(p => p.GetUserById(It.IsAny())).Returns(Task.FromResult(userServiceModel)); + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(userWebModel); + + IActionResult result = this.UserController.GetById(id, null).Result; + + Assert.IsInstanceOf(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + UserWebModel resultModel = okObjectResult.Value as Models.Identity.User.UserWebModel; + + Assert.AreEqual(USERNAME, resultModel.UserName); + } + + [Test] + public void GetById_ReturnsUnauthorizedResult_WhenUserIsNotAuthorized() + { + Guid id = Guid.NewGuid(); + UserWebModel userWebModel = new UserWebModel + { + UserName = USERNAME + }; + + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(false)); + + IActionResult result = this.UserController.GetById(Guid.NewGuid(), null).Result; + + Assert.IsInstanceOf(result); + } + + [Test] + public void GetUser_ReturnsTheUser_WhenItExists() + { + Guid id = Guid.NewGuid(); + UserWebModel userWebModel = new UserWebModel + { + UserName = USERNAME + }; + UserServiceModel userServiceModel = new UserServiceModel + { + UserName = USERNAME + }; + + this.UserServiceMock.Setup(p => p.GetUserByUsername(It.IsAny())).Returns(Task.FromResult(userServiceModel)); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(userWebModel); + + IActionResult result = this.UserController.GetUser(null).Result; + + Assert.IsInstanceOf(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + UserWebModel resultModel = okObjectResult.Value as Models.Identity.User.UserWebModel; + + Assert.AreEqual(USERNAME, resultModel.UserName); + } + #endregion + + #region Update + [Test] + public void Update_ShouldReturnOkResult_WhenUserIsUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + UpdateUserWebModel updateUserWebModel = new UpdateUserWebModel + { + UserName = USERNAME + }; + UpdateUserServiceModel updateUserServiceModel = new UpdateUserServiceModel + { + UserName = USERNAME + }; + UserServiceModel userServiceModel = new UserServiceModel + { + UserName = USERNAME + }; + + this.UserServiceMock.Setup(p => p.UpdateUser(It.IsAny())).Returns(Task.FromResult(userServiceModel)); + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(updateUserServiceModel); + + IActionResult result = this.UserController.Update(id, updateUserWebModel, null).Result; + + Assert.IsInstanceOf(result); + } + + [Test] + public void UpdateProfilePicture_ShouldReturnOkObjectResult_WhenProfilePictureIsUpdatedSuccessfully() + { + string profilePictureURL = "goshotrapov"; + UpdateProfilePictureWebModel updateProfilePictureWebModel = new UpdateProfilePictureWebModel(); + UpdateProfilePictureServiceModel updateProfilePictureServiceModel = new UpdateProfilePictureServiceModel(); + ProfilePictureServiceModel profilePictureServiceModel = new ProfilePictureServiceModel + { + ProfilePictureURL = profilePictureURL + }; + ProfilePictureWebModel profilePictureWebModel = new ProfilePictureWebModel + { + ProfilePictureURL = profilePictureURL + }; + + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(updateProfilePictureServiceModel); + this.UserServiceMock.Setup(p => p.UpdateProfilePicture(It.IsAny())).Returns(Task.FromResult(profilePictureServiceModel)); + this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(profilePictureWebModel); + + + IActionResult result = this.UserController.UpdateProfilePicture(Guid.Empty, updateProfilePictureWebModel, null).Result; + + Assert.IsInstanceOf(result); + + AcceptedResult acceptedResult = result as AcceptedResult; + ProfilePictureWebModel resultModel = acceptedResult.Value as Models.Identity.User.ProfilePictureWebModel; + + Assert.AreEqual(profilePictureURL, resultModel.ProfilePictureURL); + } + #endregion + + #region Delete + [Test] + public void Delete_ReturnsOkResult_WhenUserIsDeletedSuccessfully() + { + Guid id = Guid.NewGuid(); + + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); + this.UserServiceMock.Setup(p => p.DeleteUser(It.IsAny())).Returns(Task.FromResult(true)); + + IActionResult result = this.UserController.Delete(id, null).Result; + + Assert.IsInstanceOf(result); + } + + [Test] + public void Delete_ReturnsBadRequestObjectResult_WhenUserIsNotDeletedSuccessfully() + { + string message = "Could not delete User"; + Guid id = Guid.NewGuid(); + + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); + this.UserServiceMock.Setup(p => p.DeleteUser(It.IsAny())).Returns(Task.FromResult(false)); + + IActionResult result = this.UserController.Delete(id, null).Result; + + Assert.IsInstanceOf(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + #endregion + } +} -- cgit v1.2.3