using System; using System.Collections.Generic; using System.Threading.Tasks; using LCU.API.Internal.Operations.IncentiveApi.Services; using LCU.Library.Internal.IncentiveApiModels.Entities; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using LCU.API.Internal.Operations.IncentiveApi.Controllers; using LCU.API.Internal.Operations.IncentiveApiLib.Services; using LCU.API.Internal.Operations.IncentiveApiLib.Persistence; using LCU.API.Internal.Operations.IncentiveApi.Exceptions; using LCU.API.Internal.Operations.IncentiveApi.Models; namespace Application.UnitTests.Controllers { public class DepartmentControllerTest { private DepartmentController _controller; private IDepartmentService _mockDepartmentService; private IUserService _userService; private ICurrentUserService _currentUser; [SetUp] public void Setup() { _mockDepartmentService = Mock.Of(); _userService = Mock.Of(); _currentUser = Mock.Of(); _controller = new DepartmentController(_mockDepartmentService, _userService, _currentUser); } [Test] public async Task GetAll_OK() { Mock.Get(_mockDepartmentService).Setup(service => service.GetAllDepartmentsAsync()).ReturnsAsync( new List() { new Department() { Id = 0 } }); var result = await _controller.GetDepartments(null,null); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task GetAll_Exception() { Mock.Get(_mockDepartmentService).Setup(service => service.GetAllDepartmentsAsync()) .ThrowsAsync(new Exception("Oops")); var result = await _controller.GetDepartments(null, null); Assert.NotNull(result); var statusRes = result as StatusCodeResult; Assert.NotNull(statusRes); Assert.AreEqual(500, statusRes.StatusCode); } [Test] public async Task GetById_OK() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentByIdAsync(It.IsAny())) .ReturnsAsync(new Department() { Id = 5 }); var result = await _controller.GetDepartmentById(0); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task GetById_NotFound() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentByIdAsync(It.IsAny())) .ThrowsAsync(new NotFoundException("Oops")); var result = await _controller.GetDepartmentById(5); ; Assert.NotNull(result); var statusRes = result as NotFoundObjectResult; Assert.NotNull(statusRes); Assert.AreEqual(404, statusRes.StatusCode); } [Test] public async Task GetById_Exception() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentByIdAsync(It.IsAny())) .ThrowsAsync(new Exception("Oops")); var result = await _controller.GetDepartmentById(5); Assert.NotNull(result); var statusRes = result as StatusCodeResult; Assert.NotNull(statusRes); Assert.AreEqual(500, statusRes.StatusCode); } [Test] public async Task CreateDepartment_OK() { Mock.Get(_mockDepartmentService).Setup(service => service.SaveDepartmentAsync(It.IsAny())) .ReturnsAsync(new Department() {Id = 5}); var result = await _controller.CreateDepartment(new Department() {DepartmentName = "Test"}); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task CreateDepartment_Exception() { Mock.Get(_mockDepartmentService).Setup(service => service.SaveDepartmentAsync(It.IsAny())) .ThrowsAsync(new Exception("Oops")); var result = await _controller.CreateDepartment(new Department() {DepartmentName = "Test"}); Assert.NotNull(result); var statusRes = result as StatusCodeResult; Assert.NotNull(statusRes); Assert.AreEqual(500, statusRes.StatusCode); } [Test] public async Task CreateDepartment_DuplicateName() { Mock.Get(_mockDepartmentService).Setup(service => service.SaveDepartmentAsync(It.IsAny())) .ThrowsAsync(new DuplicateDataException("Oops")); var result = await _controller.CreateDepartment(new Department() {DepartmentName = "Test"}); Assert.NotNull(result); var statusRes = result as BadRequestObjectResult; Assert.NotNull(statusRes); Assert.AreEqual(400, statusRes.StatusCode); } [Test] public async Task UpdateDepartment_OK() { Mock.Get(_mockDepartmentService).Setup(service => service.UpdateDepartmentAsync(It.IsAny(), It.IsAny())) .ReturnsAsync(new Department() {Id = 5}); var result = await _controller.UpdateDepartment(new Department() {DepartmentName = "Test"}, 3); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task UpdateDepartment_Exception() { Mock.Get(_mockDepartmentService).Setup(service => service.UpdateDepartmentAsync(It.IsAny(), It.IsAny())) .ThrowsAsync(new Exception("Oops")); var result = await _controller.UpdateDepartment(new Department() {DepartmentName = "Test"}, 3); Assert.NotNull(result); var statusRes = result as StatusCodeResult; Assert.NotNull(statusRes); Assert.AreEqual(500, statusRes.StatusCode); } [Test] public async Task UpdateDepartment_NotFound() { Mock.Get(_mockDepartmentService).Setup(service => service.UpdateDepartmentAsync(It.IsAny(), It.IsAny())) .ThrowsAsync(new NotFoundException("Oops")); var result = await _controller.UpdateDepartment(new Department() {DepartmentName = "Test"}, 3); Assert.NotNull(result); var statusRes = result as NotFoundObjectResult; Assert.NotNull(statusRes); Assert.AreEqual(404, statusRes.StatusCode); } [Test] public async Task UpdateDepartment_DuplicateName() { Mock.Get(_mockDepartmentService).Setup(service => service.UpdateDepartmentAsync(It.IsAny(), It.IsAny())) .ThrowsAsync(new DuplicateDataException("Oops")); var result = await _controller.UpdateDepartment(new Department() {DepartmentName = "Test"}, 3); Assert.NotNull(result); var statusRes = result as BadRequestObjectResult; Assert.NotNull(statusRes); Assert.AreEqual(400, statusRes.StatusCode); } [Test] public async Task GetDepartmentDetails_OK() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentDetailsAsync(It.IsAny())) .ReturnsAsync(new DepartmentDetails { Department = new Department { Id = 3 }, Assignments = new List { new UserDepartment(), new UserDepartment() }, RegionalManager = new AppUser { EmployeeId = "C0000" } }); var result = await _controller.GetDepartmentDetails(3); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task GetDepartmentDetails_Exception() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentDetailsAsync( It.IsAny())) .ThrowsAsync(new Exception("Oops")); var result = await _controller.GetDepartmentDetails(3); Assert.NotNull(result); var statusRes = result as StatusCodeResult; Assert.NotNull(statusRes); Assert.AreEqual(500, statusRes.StatusCode); } [Test] public async Task GetDepartmentDetails_NotFound() { Mock.Get(_mockDepartmentService).Setup(service => service.GetDepartmentDetailsAsync(It.IsAny())) .ThrowsAsync(new NotFoundException("Oops")); var result = await _controller.GetDepartmentDetails(3); Assert.NotNull(result); var statusRes = result as NotFoundObjectResult; Assert.NotNull(statusRes); Assert.AreEqual(404, statusRes.StatusCode); } } }