using System.Collections.Generic; using LCU.API.Internal.Operations.IncentiveApi.Services; using LCU.Library.Internal.IncentiveApiModels.Entities; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using System; using System.Threading.Tasks; using LCU.API.Internal.Operations.IncentiveApi.Controllers; using LCU.API.Internal.Operations.IncentiveApi.Exceptions; namespace Application.UnitTests.Controllers { public class CommissionControllerTest { private CommissionController _controller; private Mock _mockCommissionService; [SetUp] public void Setup() { _mockCommissionService = new Mock(); _controller = new CommissionController(_mockCommissionService.Object); } [Test] public async Task Get_OK() { _mockCommissionService.Setup(mock => mock.GetCommissionsAsync()) .ReturnsAsync(new List { new Commission() }); var result = await _controller.Get(); Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task Get_ServiceException_Returns500() { _mockCommissionService.Setup(mock => mock.GetCommissionsAsync()) .ThrowsAsync(new Exception("error thrown")); var result = await _controller.Get(); Assert.NotNull(result); var errorResult = result as StatusCodeResult; Assert.NotNull(errorResult); Assert.AreEqual(500, errorResult.StatusCode); } [Test] public async Task SetCommissions_Created() { var commissions = new List(); _mockCommissionService.Setup(mock => mock.SaveCommissionsAsync(commissions)); var result = await _controller.SetCommissions(commissions); Assert.NotNull(result); var noContentResult = result as NoContentResult; Assert.NotNull(noContentResult); Assert.AreEqual(204, noContentResult.StatusCode); } [Test] public async Task SetCommissions_ServiceException_Returns500() { var commissions = new List(); _mockCommissionService.Setup(mock => mock.SaveCommissionsAsync(commissions)) .ThrowsAsync(new Exception("error thrown")); var result = await _controller.SetCommissions(commissions); Assert.NotNull(result); var errorResult = result as StatusCodeResult; Assert.NotNull(errorResult); Assert.AreEqual(500, errorResult.StatusCode); } [Test] public async Task SetCommissions_CommissionExistsException_Returns409() { var commissions = new List(); _mockCommissionService.Setup(mock => mock.SaveCommissionsAsync(commissions)) .ThrowsAsync(new CommissionExistsException("commission exists error thrown")); var result = await _controller.SetCommissions(commissions); Assert.NotNull(result); var conflictResult = result as ConflictObjectResult; Assert.NotNull(conflictResult); Assert.AreEqual(409, conflictResult.StatusCode); Assert.AreEqual("commission exists error thrown", conflictResult.Value); } } }