diff options
Diffstat (limited to 'src/DevHive.Tests/DevHive.Web.Tests')
6 files changed, 1067 insertions, 5 deletions
diff --git a/src/DevHive.Tests/DevHive.Web.Tests/CommentController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/CommentController.Tests.cs new file mode 100644 index 0000000..3a03f1a --- /dev/null +++ b/src/DevHive.Tests/DevHive.Web.Tests/CommentController.Tests.cs @@ -0,0 +1,256 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Services.Interfaces; +using DevHive.Services.Models.Comment; +using DevHive.Web.Controllers; +using DevHive.Web.Models.Comment; +using Microsoft.AspNetCore.Mvc; +using Moq; +using NUnit.Framework; + +namespace DevHive.Web.Tests +{ + [TestFixture] + public class CommentControllerTests + { + const string MESSAGE = "Gosho Trapov"; + private Mock<ICommentService> CommentServiceMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private CommentController CommentController { get; set; } + + #region Setup + [SetUp] + public void SetUp() + { + this.CommentServiceMock = new Mock<ICommentService>(); + this.MapperMock = new Mock<IMapper>(); + this.CommentController = new CommentController(this.CommentServiceMock.Object, this.MapperMock.Object); + } + #endregion + + #region Add + [Test] + public void AddComment_ReturnsOkObjectResult_WhenCommentIsSuccessfullyCreated() + { + Guid id = Guid.NewGuid(); + CreateCommentWebModel createCommentWebModel = new CreateCommentWebModel + { + Message = MESSAGE + }; + CreateCommentServiceModel createCommentServiceModel = new CreateCommentServiceModel + { + Message = MESSAGE + }; + + this.MapperMock.Setup(p => p.Map<CreateCommentServiceModel>(It.IsAny<CreateCommentWebModel>())).Returns(createCommentServiceModel); + this.CommentServiceMock.Setup(p => p.AddComment(It.IsAny<CreateCommentServiceModel>())).Returns(Task.FromResult(id)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.CommentController.AddComment(Guid.NewGuid(), createCommentWebModel, null).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + var splitted = (result as OkObjectResult).Value + .ToString() + .Split('{', '}', '=', ' ') + .Where(x => !string.IsNullOrEmpty(x)) + .ToArray(); + + Guid resultId = Guid.Parse(splitted[1]); + + Assert.AreEqual(id, resultId); + } + + [Test] + public void AddComment_ReturnsBadRequestObjectResult_WhenCommentIsNotCreatedSuccessfully() + { + Guid id = Guid.NewGuid(); + CreateCommentWebModel createCommentWebModel = new CreateCommentWebModel + { + Message = MESSAGE + }; + CreateCommentServiceModel createCommentServiceModel = new CreateCommentServiceModel + { + Message = MESSAGE + }; + string errorMessage = $"Could not create comment!"; + + + this.MapperMock.Setup(p => p.Map<CreateCommentServiceModel>(It.IsAny<CreateCommentWebModel>())).Returns(createCommentServiceModel); + this.CommentServiceMock.Setup(p => p.AddComment(It.IsAny<CreateCommentServiceModel>())).Returns(Task.FromResult(Guid.Empty)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.CommentController.AddComment(Guid.NewGuid(), createCommentWebModel, null).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequsetObjectResult = result as BadRequestObjectResult; + string resultMessage = badRequsetObjectResult.Value.ToString(); + + Assert.AreEqual(errorMessage, resultMessage); + } + + [Test] + public void AddComment_ReturnsUnauthorizedResult_WhenUserIsNotAuthorized() + { + Guid id = Guid.NewGuid(); + CreateCommentWebModel createCommentWebModel = new CreateCommentWebModel + { + Message = MESSAGE + }; + + this.CommentServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.CommentController.AddComment(Guid.NewGuid(), createCommentWebModel, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + + #region Read + [Test] + public void GetById_ReturnsTheComment_WhenItExists() + { + Guid id = Guid.NewGuid(); + + ReadCommentServiceModel readCommentServiceModel = new ReadCommentServiceModel + { + Message = MESSAGE + }; + ReadCommentWebModel readCommentWebModel = new ReadCommentWebModel + { + Message = MESSAGE + }; + + this.CommentServiceMock.Setup(p => p.GetCommentById(It.IsAny<Guid>())).Returns(Task.FromResult(readCommentServiceModel)); + this.MapperMock.Setup(p => p.Map<ReadCommentWebModel>(It.IsAny<ReadCommentServiceModel>())).Returns(readCommentWebModel); + + IActionResult result = this.CommentController.GetCommentById(id).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + ReadCommentWebModel resultModel = okObjectResult.Value as Models.Comment.ReadCommentWebModel; + + Assert.AreEqual(MESSAGE, resultModel.Message); + } + #endregion + + #region Update + [Test] + public void Update_ShouldReturnOkResult_WhenCommentIsUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + UpdateCommentWebModel updateCommentWebModel = new UpdateCommentWebModel + { + NewMessage = MESSAGE + }; + UpdateCommentServiceModel updateCommentServiceModel = new UpdateCommentServiceModel + { + NewMessage = MESSAGE + }; + + this.CommentServiceMock.Setup(p => p.UpdateComment(It.IsAny<UpdateCommentServiceModel>())).Returns(Task.FromResult(id)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UpdateCommentServiceModel>(It.IsAny<UpdateCommentWebModel>())).Returns(updateCommentServiceModel); + + IActionResult result = this.CommentController.UpdateComment(Guid.Empty, updateCommentWebModel, null).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + object resultModel = okObjectResult.Value; + string[] resultAsString = resultModel.ToString().Split(' ').ToArray(); + + Assert.AreEqual(id.ToString(), resultAsString[3]); + } + + [Test] + public void Update_ShouldReturnBadObjectResult_WhenCommentIsNotUpdatedSuccessfully() + { + string message = "Unable to update comment!"; + UpdateCommentWebModel updateCommentWebModel = new UpdateCommentWebModel + { + NewMessage = MESSAGE + }; + UpdateCommentServiceModel updateCommentServiceModel = new UpdateCommentServiceModel + { + NewMessage = MESSAGE + }; + + this.CommentServiceMock.Setup(p => p.UpdateComment(It.IsAny<UpdateCommentServiceModel>())).Returns(Task.FromResult(Guid.Empty)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UpdateCommentServiceModel>(It.IsAny<UpdateCommentWebModel>())).Returns(updateCommentServiceModel); + + IActionResult result = this.CommentController.UpdateComment(Guid.Empty, updateCommentWebModel, null).Result; + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + + [Test] + public void Update_ShouldReturnUnauthorizedResult_WhenUserIsNotAuthorized() + { + UpdateCommentWebModel updateCommentWebModel = new UpdateCommentWebModel + { + NewMessage = MESSAGE + }; + + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.CommentController.UpdateComment(Guid.Empty, updateCommentWebModel, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + + #region Delete + [Test] + public void Delete_ReturnsOkResult_WhenCommentIsDeletedSuccessfully() + { + Guid id = Guid.NewGuid(); + + this.CommentServiceMock.Setup(p => p.DeleteComment(It.IsAny<Guid>())).Returns(Task.FromResult(true)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.CommentController.DeleteComment(id, null).Result; + + Assert.IsInstanceOf<OkResult>(result); + } + + [Test] + public void DeletComment_ReturnsBadRequestObjectResult_WhenCommentIsNotDeletedSuccessfully() + { + string message = "Could not delete Comment"; + Guid id = Guid.NewGuid(); + + this.CommentServiceMock.Setup(p => p.DeleteComment(It.IsAny<Guid>())).Returns(Task.FromResult(false)); + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.CommentController.DeleteComment(id, null).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + + [Test] + public void DeletComment_ReturnsUnauthorizedResult_WhenUserIsNotAuthorized() + { + this.CommentServiceMock.Setup(p => p.ValidateJwtForComment(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.CommentController.DeleteComment(Guid.Empty, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + } +} diff --git a/src/DevHive.Tests/DevHive.Web.Tests/FeedController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/FeedController.Tests.cs new file mode 100644 index 0000000..01f67e5 --- /dev/null +++ b/src/DevHive.Tests/DevHive.Web.Tests/FeedController.Tests.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Services.Interfaces; +using DevHive.Services.Models; +using DevHive.Web.Controllers; +using DevHive.Web.Models.Comment; +using DevHive.Web.Models.Feed; +using DevHive.Web.Models.Post; +using Microsoft.AspNetCore.Mvc; +using Moq; +using NUnit.Framework; + +namespace DevHive.Web.Tests +{ + [TestFixture] + public class FeedControllerTests + { + private Mock<IFeedService> FeedServiceMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private FeedController FeedController { get; set; } + + #region SetUp + [SetUp] + public void SetUp() + { + this.FeedServiceMock = new Mock<IFeedService>(); + this.MapperMock = new Mock<IMapper>(); + this.FeedController = new FeedController(this.FeedServiceMock.Object, this.MapperMock.Object); + } + #endregion + + #region GetPosts + [Test] + public async Task GetPosts_ReturnsOkObjectResultWithCorrectReadPageWebModel_WhenPostsExist() + { + GetPageWebModel getPageWebModel = new GetPageWebModel { }; + GetPageServiceModel getPageServiceModel = new GetPageServiceModel { }; + ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel { }; + ReadPageWebModel readPageWebModel = new ReadPageWebModel + { + Posts = new List<ReadPostWebModel> + { + new ReadPostWebModel(), + new ReadPostWebModel(), + new ReadPostWebModel() + } + }; + + this.FeedServiceMock.Setup(p => p.GetPage(It.IsAny<GetPageServiceModel>())).Returns(Task.FromResult(readPageServiceModel)); + this.MapperMock.Setup(p => p.Map<GetPageServiceModel>(It.IsAny<GetPageWebModel>())).Returns(getPageServiceModel); + this.MapperMock.Setup(p => p.Map<ReadPageWebModel>(It.IsAny<ReadPageServiceModel>())).Returns(readPageWebModel); + + IActionResult result = await this.FeedController.GetPosts(Guid.Empty, getPageWebModel); + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + ReadPageWebModel resultModel = okObjectResult.Value as Models.Comment.ReadPageWebModel; + + Assert.AreEqual(3, resultModel.Posts.Count); + } + #endregion + + #region GetUserPosts + [Test] + public async Task GetUserPosts_GetsPostsOfUser_WhenTheyExist() + { + GetPageWebModel getPageWebModel = new GetPageWebModel { }; + GetPageServiceModel getPageServiceModel = new GetPageServiceModel { }; + ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel { }; + ReadPageWebModel readPageWebModel = new ReadPageWebModel + { + Posts = new List<ReadPostWebModel> + { + new ReadPostWebModel(), + new ReadPostWebModel(), + new ReadPostWebModel() + } + }; + + this.FeedServiceMock.Setup(p => p.GetUserPage(It.IsAny<GetPageServiceModel>())).Returns(Task.FromResult(readPageServiceModel)); + this.MapperMock.Setup(p => p.Map<GetPageServiceModel>(It.IsAny<GetPageWebModel>())).Returns(getPageServiceModel); + this.MapperMock.Setup(p => p.Map<ReadPageWebModel>(It.IsAny<ReadPageServiceModel>())).Returns(readPageWebModel); + + IActionResult result = await this.FeedController.GetUserPosts(null, getPageWebModel); + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + ReadPageWebModel resultModel = okObjectResult.Value as Models.Comment.ReadPageWebModel; + + Assert.AreEqual(3, resultModel.Posts.Count); + } + #endregion + } +} diff --git a/src/DevHive.Tests/DevHive.Web.Tests/PostController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/PostController.Tests.cs new file mode 100644 index 0000000..3a4e45e --- /dev/null +++ b/src/DevHive.Tests/DevHive.Web.Tests/PostController.Tests.cs @@ -0,0 +1,248 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Services.Interfaces; +using DevHive.Services.Models.Post; +using DevHive.Web.Controllers; +using DevHive.Web.Models.Post; +using Microsoft.AspNetCore.Mvc; +using Moq; +using NUnit.Framework; + +namespace DevHive.Web.Tests +{ + [TestFixture] + public class PostControllerTests + { + const string MESSAGE = "Gosho Trapov"; + private Mock<IPostService> PostServiceMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private PostController PostController { get; set; } + + [SetUp] + public void SetUp() + { + this.PostServiceMock = new Mock<IPostService>(); + this.MapperMock = new Mock<IMapper>(); + this.PostController = new PostController(this.PostServiceMock.Object, this.MapperMock.Object); + } + + #region Create + [Test] + public void CreatePost_ReturnsOkObjectResult_WhenPostIsSuccessfullyCreated() + { + CreatePostWebModel createPostWebModel = new CreatePostWebModel + { + Message = MESSAGE + }; + CreatePostServiceModel createPostServiceModel = new CreatePostServiceModel + { + Message = MESSAGE + }; + Guid id = Guid.NewGuid(); + + this.MapperMock.Setup(p => p.Map<CreatePostServiceModel>(It.IsAny<CreatePostWebModel>())).Returns(createPostServiceModel); + this.PostServiceMock.Setup(p => p.CreatePost(It.IsAny<CreatePostServiceModel>())).Returns(Task.FromResult(id)); + this.PostServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Create(Guid.Empty, createPostWebModel, null).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + var splitted = (result as OkObjectResult).Value + .ToString() + .Split('{', '}', '=', ' ') + .Where(x => !string.IsNullOrEmpty(x)) + .ToArray(); + + Guid resultId = Guid.Parse(splitted[1]); + + Assert.AreEqual(id, resultId); + } + + [Test] + public void CreatePost_ReturnsBadRequestObjectResult_WhenPostIsNotCreatedSuccessfully() + { + CreatePostWebModel createTechnologyWebModel = new CreatePostWebModel + { + Message = MESSAGE + }; + CreatePostServiceModel createTechnologyServiceModel = new CreatePostServiceModel + { + Message = MESSAGE + }; + Guid id = Guid.Empty; + string errorMessage = $"Could not create post!"; + + this.MapperMock.Setup(p => p.Map<CreatePostServiceModel>(It.IsAny<CreatePostWebModel>())).Returns(createTechnologyServiceModel); + this.PostServiceMock.Setup(p => p.CreatePost(It.IsAny<CreatePostServiceModel>())).Returns(Task.FromResult(id)); + this.PostServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Create(Guid.Empty, createTechnologyWebModel, null).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequsetObjectResult = result as BadRequestObjectResult; + string resultMessage = badRequsetObjectResult.Value.ToString(); + + Assert.AreEqual(errorMessage, resultMessage); + } + + [Test] + public void CreatePost_ReturnsUnauthorizedResult_WhenUserIsNotAuthorized() + { + Guid id = Guid.NewGuid(); + CreatePostWebModel createPostWebModel = new CreatePostWebModel + { + Message = MESSAGE + }; + + this.PostServiceMock.Setup(p => p.ValidateJwtForCreating(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.PostController.Create(Guid.NewGuid(), createPostWebModel, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + + #region Read + [Test] + public void GetById_ReturnsThePost_WhenItExists() + { + Guid id = Guid.NewGuid(); + + ReadPostServiceModel readPostServiceModel = new ReadPostServiceModel + { + Message = MESSAGE + }; + ReadPostWebModel readPostWebModel = new ReadPostWebModel + { + Message = MESSAGE + }; + + this.PostServiceMock.Setup(p => p.GetPostById(It.IsAny<Guid>())).Returns(Task.FromResult(readPostServiceModel)); + this.MapperMock.Setup(p => p.Map<ReadPostWebModel>(It.IsAny<ReadPostServiceModel>())).Returns(readPostWebModel); + + IActionResult result = this.PostController.GetById(id).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + ReadPostWebModel resultModel = okObjectResult.Value as Models.Post.ReadPostWebModel; + + Assert.AreEqual(MESSAGE, resultModel.Message); + } + #endregion + + #region Update + [Test] + public void Update_ShouldReturnOkResult_WhenPostIsUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + UpdatePostWebModel updatePostWebModel = new UpdatePostWebModel + { + NewMessage = MESSAGE + }; + UpdatePostServiceModel updatePostServiceModel = new UpdatePostServiceModel + { + NewMessage = MESSAGE + }; + + this.PostServiceMock.Setup(p => p.UpdatePost(It.IsAny<UpdatePostServiceModel>())).Returns(Task.FromResult(id)); + this.MapperMock.Setup(p => p.Map<UpdatePostServiceModel>(It.IsAny<UpdatePostWebModel>())).Returns(updatePostServiceModel); + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Update(id, updatePostWebModel, null).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + } + + [Test] + public void Update_ShouldReturnBadObjectResult_WhenPostIsNotUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + string message = "Could not update post!"; + UpdatePostWebModel updatePostWebModel = new UpdatePostWebModel + { + NewMessage = MESSAGE + }; + UpdatePostServiceModel updatePostServiceModel = new UpdatePostServiceModel + { + NewMessage = MESSAGE + }; + + this.PostServiceMock.Setup(p => p.UpdatePost(It.IsAny<UpdatePostServiceModel>())).Returns(Task.FromResult(Guid.Empty)); + this.MapperMock.Setup(p => p.Map<UpdatePostServiceModel>(It.IsAny<UpdatePostWebModel>())).Returns(updatePostServiceModel); + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Update(id, updatePostWebModel, null).Result; + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + + [Test] + public void Update_ShouldReturnUnauthorizedResult_WhenUserIsNotAuthorized() + { + UpdatePostWebModel updatePostWebModel = new UpdatePostWebModel + { + NewMessage = MESSAGE + }; + + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.PostController.Update(Guid.Empty, updatePostWebModel, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + + #region Delete + [Test] + public void Delete_ReturnsOkResult_WhenPostIsDeletedSuccessfully() + { + Guid id = Guid.NewGuid(); + + this.PostServiceMock.Setup(p => p.DeletePost(It.IsAny<Guid>())).Returns(Task.FromResult(true)); + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Delete(id, null).Result; + + Assert.IsInstanceOf<OkResult>(result); + } + + [Test] + public void Delete_ReturnsBadRequestObjectResult_WhenPostIsNotDeletedSuccessfully() + { + string message = "Could not delete Post"; + Guid id = Guid.NewGuid(); + + this.PostServiceMock.Setup(p => p.DeletePost(It.IsAny<Guid>())).Returns(Task.FromResult(false)); + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + + IActionResult result = this.PostController.Delete(id, null).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + + [Test] + public void DeletePost_ReturnsUnauthorizedResult_WhenUserIsNotAuthorized() + { + this.PostServiceMock.Setup(p => p.ValidateJwtForPost(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.PostController.Delete(Guid.Empty, null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(result); + } + #endregion + } +} diff --git a/src/DevHive.Tests/DevHive.Web.Tests/RoleController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/RoleController.Tests.cs new file mode 100644 index 0000000..067b4e4 --- /dev/null +++ b/src/DevHive.Tests/DevHive.Web.Tests/RoleController.Tests.cs @@ -0,0 +1,201 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Services.Interfaces; +using DevHive.Services.Models.Identity.Role; +using DevHive.Web.Controllers; +using DevHive.Web.Models.Identity.Role; +using Microsoft.AspNetCore.Mvc; +using Moq; +using NUnit.Framework; + +namespace DevHive.Web.Tests +{ + [TestFixture] + public class RoleControllerTests + { + const string NAME = "Gosho Trapov"; + private Mock<IRoleService> RoleServiceMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private RoleController RoleController { get; set; } + + [SetUp] + public void SetUp() + { + this.RoleServiceMock = new Mock<IRoleService>(); + this.MapperMock = new Mock<IMapper>(); + this.RoleController = new RoleController(this.RoleServiceMock.Object, this.MapperMock.Object); + } + + #region Create + [Test] + public void CreateRole_ReturnsOkObjectResult_WhenRoleIsSuccessfullyCreated() + { + CreateRoleWebModel createRoleWebModel = new CreateRoleWebModel + { + Name = NAME + }; + CreateRoleServiceModel createRoleServiceModel = new CreateRoleServiceModel + { + Name = NAME + }; + Guid id = Guid.NewGuid(); + + this.MapperMock.Setup(p => p.Map<CreateRoleServiceModel>(It.IsAny<CreateRoleWebModel>())).Returns(createRoleServiceModel); + this.RoleServiceMock.Setup(p => p.CreateRole(It.IsAny<CreateRoleServiceModel>())).Returns(Task.FromResult(id)); + + IActionResult result = this.RoleController.Create(createRoleWebModel).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + var splitted = (result as OkObjectResult).Value + .ToString() + .Split('{', '}', '=', ' ') + .Where(x => !string.IsNullOrEmpty(x)) + .ToArray(); + + Guid resultId = Guid.Parse(splitted[1]); + + Assert.AreEqual(id, resultId); + } + + [Test] + public void CreateRole_ReturnsBadRequestObjectResult_WhenRoleIsNotCreatedSuccessfully() + { + CreateRoleWebModel createTechnologyWebModel = new CreateRoleWebModel + { + Name = NAME + }; + CreateRoleServiceModel createTechnologyServiceModel = new CreateRoleServiceModel + { + Name = NAME + }; + Guid id = Guid.Empty; + string errorMessage = $"Could not create role {NAME}"; + + this.MapperMock.Setup(p => p.Map<CreateRoleServiceModel>(It.IsAny<CreateRoleWebModel>())).Returns(createTechnologyServiceModel); + this.RoleServiceMock.Setup(p => p.CreateRole(It.IsAny<CreateRoleServiceModel>())).Returns(Task.FromResult(id)); + + IActionResult result = this.RoleController.Create(createTechnologyWebModel).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequsetObjectResult = result as BadRequestObjectResult; + string resultMessage = badRequsetObjectResult.Value.ToString(); + + Assert.AreEqual(errorMessage, resultMessage); + } + #endregion + + #region Read + [Test] + public void GetById_ReturnsTheRole_WhenItExists() + { + Guid id = Guid.NewGuid(); + + RoleServiceModel roleServiceModel = new RoleServiceModel + { + Name = NAME + }; + RoleWebModel roleWebModel = new RoleWebModel + { + Name = NAME + }; + + this.RoleServiceMock.Setup(p => p.GetRoleById(It.IsAny<Guid>())).Returns(Task.FromResult(roleServiceModel)); + this.MapperMock.Setup(p => p.Map<RoleWebModel>(It.IsAny<RoleServiceModel>())).Returns(roleWebModel); + + IActionResult result = this.RoleController.GetById(id).Result; + + Assert.IsInstanceOf<OkObjectResult>(result); + + OkObjectResult okObjectResult = result as OkObjectResult; + RoleWebModel resultModel = okObjectResult.Value as Models.Identity.Role.RoleWebModel; + + Assert.AreEqual(NAME, resultModel.Name); + } + #endregion + + #region Update + [Test] + public void Update_ShouldReturnOkResult_WhenRoleIsUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + UpdateRoleWebModel updateRoleWebModel = new UpdateRoleWebModel + { + Name = NAME + }; + UpdateRoleServiceModel updateRoleServiceModel = new UpdateRoleServiceModel + { + Name = NAME + }; + + this.RoleServiceMock.Setup(p => p.UpdateRole(It.IsAny<UpdateRoleServiceModel>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UpdateRoleServiceModel>(It.IsAny<UpdateRoleWebModel>())).Returns(updateRoleServiceModel); + + IActionResult result = this.RoleController.Update(id, updateRoleWebModel).Result; + + Assert.IsInstanceOf<OkResult>(result); + } + + [Test] + public void Update_ShouldReturnBadObjectResult_WhenRoleIsNotUpdatedSuccessfully() + { + Guid id = Guid.NewGuid(); + string message = "Could not update role!"; + UpdateRoleWebModel updateRoleWebModel = new UpdateRoleWebModel + { + Name = NAME + }; + UpdateRoleServiceModel updateRoleServiceModel = new UpdateRoleServiceModel + { + Name = NAME + }; + + this.RoleServiceMock.Setup(p => p.UpdateRole(It.IsAny<UpdateRoleServiceModel>())).Returns(Task.FromResult(false)); + this.MapperMock.Setup(p => p.Map<UpdateRoleServiceModel>(It.IsAny<UpdateRoleWebModel>())).Returns(updateRoleServiceModel); + + IActionResult result = this.RoleController.Update(id, updateRoleWebModel).Result; + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + #endregion + + #region Delete + [Test] + public void Delete_ReturnsOkResult_WhenRoleIsDeletedSuccessfully() + { + Guid id = Guid.NewGuid(); + + this.RoleServiceMock.Setup(p => p.DeleteRole(It.IsAny<Guid>())).Returns(Task.FromResult(true)); + + IActionResult result = this.RoleController.Delete(id).Result; + + Assert.IsInstanceOf<OkResult>(result); + } + + [Test] + public void Delet_ReturnsBadRequestObjectResult_WhenRoleIsNotDeletedSuccessfully() + { + string message = "Could not delete role!"; + Guid id = Guid.NewGuid(); + + this.RoleServiceMock.Setup(p => p.DeleteRole(It.IsAny<Guid>())).Returns(Task.FromResult(false)); + + IActionResult result = this.RoleController.Delete(id).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + #endregion + } +} diff --git a/src/DevHive.Tests/DevHive.Web.Tests/TechnologyController.Tests.cs b/src/DevHive.Tests/DevHive.Web.Tests/TechnologyController.Tests.cs index b7d38da..164bcbf 100644 --- a/src/DevHive.Tests/DevHive.Web.Tests/TechnologyController.Tests.cs +++ b/src/DevHive.Tests/DevHive.Web.Tests/TechnologyController.Tests.cs @@ -21,6 +21,7 @@ namespace DevHive.Web.Tests private Mock<IMapper> MapperMock { get; set; } private TechnologyController TechnologyController { get; set; } + #region SetUp [SetUp] public void SetUp() { @@ -28,6 +29,7 @@ namespace DevHive.Web.Tests this.MapperMock = new Mock<IMapper>(); this.TechnologyController = new TechnologyController(this.TechnologyServiceMock.Object, this.MapperMock.Object); } + #endregion #region Create [Test] @@ -95,24 +97,24 @@ namespace DevHive.Web.Tests { Guid id = Guid.NewGuid(); - CreateTechnologyServiceModel createTechnologyServiceModel = new CreateTechnologyServiceModel + ReadTechnologyWebModel readTechnologyWebModel = new ReadTechnologyWebModel { Name = NAME }; - CreateTechnologyWebModel createTechnologyWebModel = new CreateTechnologyWebModel + ReadTechnologyServiceModel readTechnologyServiceModel = new ReadTechnologyServiceModel { Name = NAME }; - this.TechnologyServiceMock.Setup(p => p.GetTechnologyById(It.IsAny<Guid>())).Returns(Task.FromResult(createTechnologyServiceModel)); - this.MapperMock.Setup(p => p.Map<CreateTechnologyWebModel>(It.IsAny<CreateTechnologyServiceModel>())).Returns(createTechnologyWebModel); + this.TechnologyServiceMock.Setup(p => p.GetTechnologyById(It.IsAny<Guid>())).Returns(Task.FromResult(readTechnologyServiceModel)); + this.MapperMock.Setup(p => p.Map<ReadTechnologyWebModel>(It.IsAny<ReadTechnologyServiceModel>())).Returns(readTechnologyWebModel); IActionResult result = this.TechnologyController.GetById(id).Result; Assert.IsInstanceOf<OkObjectResult>(result); OkObjectResult okObjectResult = result as OkObjectResult; - CreateTechnologyWebModel resultModel = okObjectResult.Value as Models.Technology.CreateTechnologyWebModel; + ReadTechnologyWebModel resultModel = okObjectResult.Value as Models.Technology.ReadTechnologyWebModel; Assert.AreEqual(NAME, resultModel.Name); } 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<IUserService> UserServiceMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private UserController UserController { get; set; } + + [SetUp] + public void SetUp() + { + this.UserServiceMock = new Mock<IUserService>(); + this.MapperMock = new Mock<IMapper>(); + 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<LoginServiceModel>(It.IsAny<LoginWebModel>())).Returns(loginServiceModel); + this.MapperMock.Setup(p => p.Map<TokenWebModel>(It.IsAny<TokenModel>())).Returns(tokenWebModel); + this.UserServiceMock.Setup(p => p.LoginUser(It.IsAny<LoginServiceModel>())).Returns(Task.FromResult(tokenModel)); + + IActionResult result = this.UserController.Login(loginWebModel).Result; + + Assert.IsInstanceOf<OkObjectResult>(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<RegisterServiceModel>(It.IsAny<RegisterWebModel>())).Returns(registerServiceModel); + this.MapperMock.Setup(p => p.Map<TokenWebModel>(It.IsAny<TokenModel>())).Returns(tokenWebModel); + this.UserServiceMock.Setup(p => p.RegisterUser(It.IsAny<RegisterServiceModel>())).Returns(Task.FromResult(tokenModel)); + + IActionResult result = this.UserController.Register(registerWebModel).Result; + + Assert.IsInstanceOf<CreatedResult>(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<Guid>())).Returns(Task.FromResult(userServiceModel)); + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UserWebModel>(It.IsAny<UserServiceModel>())).Returns(userWebModel); + + IActionResult result = this.UserController.GetById(id, null).Result; + + Assert.IsInstanceOf<OkObjectResult>(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<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(false)); + + IActionResult result = this.UserController.GetById(Guid.NewGuid(), null).Result; + + Assert.IsInstanceOf<UnauthorizedResult>(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<string>())).Returns(Task.FromResult(userServiceModel)); + this.MapperMock.Setup(p => p.Map<UserWebModel>(It.IsAny<UserServiceModel>())).Returns(userWebModel); + + IActionResult result = this.UserController.GetUser(null).Result; + + Assert.IsInstanceOf<OkObjectResult>(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<UpdateUserServiceModel>())).Returns(Task.FromResult(userServiceModel)); + this.UserServiceMock.Setup(p => p.ValidJWT(It.IsAny<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UpdateUserServiceModel>(It.IsAny<UpdateUserWebModel>())).Returns(updateUserServiceModel); + + IActionResult result = this.UserController.Update(id, updateUserWebModel, null).Result; + + Assert.IsInstanceOf<AcceptedResult>(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<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.MapperMock.Setup(p => p.Map<UpdateProfilePictureServiceModel>(It.IsAny<UpdateProfilePictureWebModel>())).Returns(updateProfilePictureServiceModel); + this.UserServiceMock.Setup(p => p.UpdateProfilePicture(It.IsAny<UpdateProfilePictureServiceModel>())).Returns(Task.FromResult(profilePictureServiceModel)); + this.MapperMock.Setup(p => p.Map<ProfilePictureWebModel>(It.IsAny<ProfilePictureServiceModel>())).Returns(profilePictureWebModel); + + + IActionResult result = this.UserController.UpdateProfilePicture(Guid.Empty, updateProfilePictureWebModel, null).Result; + + Assert.IsInstanceOf<AcceptedResult>(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<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.UserServiceMock.Setup(p => p.DeleteUser(It.IsAny<Guid>())).Returns(Task.FromResult(true)); + + IActionResult result = this.UserController.Delete(id, null).Result; + + Assert.IsInstanceOf<OkResult>(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<Guid>(), It.IsAny<string>())).Returns(Task.FromResult(true)); + this.UserServiceMock.Setup(p => p.DeleteUser(It.IsAny<Guid>())).Returns(Task.FromResult(false)); + + IActionResult result = this.UserController.Delete(id, null).Result; + + Assert.IsInstanceOf<BadRequestObjectResult>(result); + + BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; + string resultModel = badRequestObjectResult.Value.ToString(); + + Assert.AreEqual(message, resultModel); + } + #endregion + } +} |
