using AutoMapper; using DevHive.Services.Interfaces; using DevHive.Services.Models.Technology; using DevHive.Web.Controllers; using DevHive.Web.Models.Technology; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using System; using System.Threading.Tasks; namespace DevHive.Web.Tests { [TestFixture] public class TechnologyControllerTests { const string NAME = "Gosho Trapov"; private Mock TechnologyServiceMock { get; set; } private Mock MapperMock { get; set; } private TechnologyController TechnologyController { get; set; } [SetUp] public void SetUp() { this.TechnologyServiceMock = new Mock(); this.MapperMock = new Mock(); this.TechnologyController = new TechnologyController(this.TechnologyServiceMock.Object, this.MapperMock.Object); } #region Create [Test] public void Create_ReturnsOkObjectResult_WhenTechnologyIsSuccessfullyCreated() { CreateTechnologyWebModel createTechnologyWebModel = new CreateTechnologyWebModel { Name = NAME }; CreateTechnologyServiceModel createTechnologyServiceModel = new CreateTechnologyServiceModel { Name = NAME }; this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(createTechnologyServiceModel); this.TechnologyServiceMock.Setup(p => p.Create(It.IsAny())).Returns(Task.FromResult(true)); IActionResult result = this.TechnologyController.Create(createTechnologyWebModel).Result; Assert.IsInstanceOf(result); } [Test] public void Create_ReturnsBadRequestObjectResult_WhenTechnologyIsNotCreatedSuccessfully() { CreateTechnologyWebModel createTechnologyWebModel = new CreateTechnologyWebModel { Name = NAME }; CreateTechnologyServiceModel createTechnologyServiceModel = new CreateTechnologyServiceModel { Name = NAME }; this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(createTechnologyServiceModel); this.TechnologyServiceMock.Setup(p => p.Create(It.IsAny())).Returns(Task.FromResult(false)); IActionResult result = this.TechnologyController.Create(createTechnologyWebModel).Result; Assert.IsInstanceOf(result); } #endregion #region Read [Test] public void GetById_ReturnsTheThecnology_WhenItExists() { Guid id = new Guid(); CreateTechnologyServiceModel createTechnologyServiceModel = new CreateTechnologyServiceModel { Name = NAME }; CreateTechnologyWebModel createTechnologyWebModel = new CreateTechnologyWebModel { Name = NAME }; this.TechnologyServiceMock.Setup(p => p.GetTechnologyById(It.IsAny())).Returns(Task.FromResult(createTechnologyServiceModel)); this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(createTechnologyWebModel); IActionResult result = this.TechnologyController.GetById(id).Result; Assert.IsInstanceOf(result); OkObjectResult okObjectResult = result as OkObjectResult; CreateTechnologyWebModel resultModel = okObjectResult.Value as Models.Technology.CreateTechnologyWebModel; Assert.AreEqual(NAME, resultModel.Name); } #endregion #region Update [Test] public void Update_ShouldReturnOkResult_WhenTechnologyIsUpdatedSuccessfully() { Guid id = new Guid(); UpdateTechnologyWebModel updateTechnologyWebModel = new UpdateTechnologyWebModel { Name = NAME }; UpdateTechnologyServiceModel updateTechnologyServiceModel = new UpdateTechnologyServiceModel { Name = NAME }; this.TechnologyServiceMock.Setup(p => p.UpdateTechnology(It.IsAny(), It.IsAny())).Returns(Task.FromResult(true)); this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(updateTechnologyServiceModel); IActionResult result = this.TechnologyController.Update(id, updateTechnologyWebModel).Result; Assert.IsInstanceOf(result); } [Test] public void Update_ShouldReturnOkResult_WhenTechnologyIsNotUpdatedSuccessfully () { Guid id = new Guid(); string message = "Could not update Technology"; UpdateTechnologyWebModel updateTechnologyWebModel = new UpdateTechnologyWebModel { Name = NAME }; UpdateTechnologyServiceModel updateTechnologyServiceModel = new UpdateTechnologyServiceModel { Name = NAME }; this.TechnologyServiceMock.Setup(p => p.UpdateTechnology(It.IsAny(), It.IsAny())).Returns(Task.FromResult(false)); this.MapperMock.Setup(p => p.Map(It.IsAny())).Returns(updateTechnologyServiceModel); IActionResult result = this.TechnologyController.Update(id, updateTechnologyWebModel).Result; Assert.IsInstanceOf(result); BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; string resultModel = badRequestObjectResult.Value.ToString(); Assert.AreEqual(message, resultModel); } #endregion #region Delete [Test] public void Delete_ReturnsOkResult_When_TechnologyIsDeletedSuccessfully() { Guid id = new Guid(); this.TechnologyServiceMock.Setup(p => p.DeleteTechnology(It.IsAny())).Returns(Task.FromResult(true)); IActionResult result = this.TechnologyController.Delete(id).Result; Assert.IsInstanceOf(result); } [Test] public void Delet_ReturnsBadRequestObjectResult_WhenTechnologyIsNotDeletedSuccessfully() { string message = "Could not delete Technology"; Guid id = new Guid(); this.TechnologyServiceMock.Setup(p => p.DeleteTechnology(It.IsAny())).Returns(Task.FromResult(false)); IActionResult result = this.TechnologyController.Delete(id).Result; Assert.IsInstanceOf(result); BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; string resultModel = badRequestObjectResult.Value.ToString(); Assert.AreEqual(message, resultModel); } #endregion } }