Files
2026-03-31 14:32:23 -05:00

298 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NUnit.Framework;
using LCU.Api.Internal.CoreApiWrapper.Controllers;
using LCU.Api.Internal.CoreApiWrapper.Services;
using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Organizations;
using LCU.Library.Internal.Exceptions;
using Microsoft.AspNetCore.Http;
namespace LCU.Api.Internal.CoreApiWrapperTest.Controllers
{
public class OrganizationControllerTest
{
private OrganizationController _organizationController;
private Mock<IOrganizationService> _mockOrganizationService;
[SetUp]
public void SetUp()
{
_mockOrganizationService = new Mock<IOrganizationService>();
_organizationController = new OrganizationController(_mockOrganizationService.Object);
}
[Test]
public async Task GetOrganizationByOrganizationNumber_OK()
{
const long organizationNumber = 123334234324;
var testOrganizationResult = new Organization
{
Name = "Test Organization"
};
var testOrganizationsResult = new List<Organization> { testOrganizationResult };
_mockOrganizationService.Setup(x => x.GetOrganizationByOrganizationNumber(organizationNumber)).ReturnsAsync(testOrganizationsResult).Verifiable();
var results = await _organizationController.GetOrganizationByOrganizationNumber(organizationNumber);
Assert.NotNull(results);
var okResult = results as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var result = okResult.Value as List<Organization>;
Assert.NotNull(result);
Assert.AreEqual(1, result.Count);
Assert.AreEqual(testOrganizationResult.Name, result.FirstOrDefault()?.Name);
_mockOrganizationService.Verify();
}
[Test]
public async Task GetOrganizationByOrganizationNumber_ExceptionThrown_ServerError()
{
const long organizationNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetOrganizationByOrganizationNumber(organizationNumber)).ThrowsAsync(new Exception("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByOrganizationNumber(organizationNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetOrganizationByOrganizationNumber_ServiceExceptionThrown_ServerError()
{
const long organizationNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetOrganizationByOrganizationNumber(organizationNumber)).ThrowsAsync(new ServiceException("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByOrganizationNumber(organizationNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetMemberByAccountNumber_ServiceException_ServerErrorReturned()
{
const long organizationNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetOrganizationByOrganizationNumber(organizationNumber)).ThrowsAsync(new ServiceException("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByOrganizationNumber(organizationNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetMemberByAccountNumber_Exception_ServerErrorReturned()
{
const long organizationNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetOrganizationByOrganizationNumber(organizationNumber)).ThrowsAsync(new Exception("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByOrganizationNumber(organizationNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetOrganizationByMemberAgreementNumber_OK()
{
const long memberNumber = 123334234324;
var testOrganizationResult = new Organization
{
Name = "Test Organization"
};
_mockOrganizationService.Setup(x => x.GetMemberByMemberAgreeNbr(memberNumber)).ReturnsAsync(testOrganizationResult).Verifiable();
var results = await _organizationController.GetOrganizationByMemberAgreementNumber(memberNumber);
Assert.NotNull(results);
var okResult = results as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var result = okResult.Value as Organization;
Assert.NotNull(result);
Assert.AreEqual(testOrganizationResult.Name, result?.Name);
_mockOrganizationService.Verify();
}
[Test]
public async Task GetOrganizationByMemberAgreementNumber_ServiceException_ServerErrorReturned()
{
const long memberNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetMemberByMemberAgreeNbr(memberNumber)).ThrowsAsync(new ServiceException("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByMemberAgreementNumber(memberNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetOrganizationByMemberAgreementNumber_Exception_ServerErrorReturned()
{
const long memberNumber = 123334234324;
_mockOrganizationService.Setup(x => x.GetMemberByMemberAgreeNbr(memberNumber)).ThrowsAsync(new Exception("Thrown from unit test")).Verifiable();
var results = await _organizationController.GetOrganizationByMemberAgreementNumber(memberNumber);
Assert.NotNull(results);
var badRes = results as StatusCodeResult;
Assert.NotNull(badRes);
Assert.AreEqual(500, badRes.StatusCode);
}
[Test]
public async Task GetOrganizationByOrganizationName_GetOrganizationByNameThrowsServiceException_Returns500()
{
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(os => os.GetOrganizationByName(organizationName))
.ThrowsAsync(new ServiceException(string.Empty));
var response = await _organizationController.GetOrganizationByOrganizationName(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
[Test]
public async Task GetOrganizationByOrganizationName_GetOrganizationByNameThrowsNonServiceException_500()
{
var exception = new Exception();
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(os => os.GetOrganizationByName(organizationName))
.ThrowsAsync(exception);
var response = await _organizationController.GetOrganizationByOrganizationName(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
[Test]
public async Task GetOrganizationByOrganizationName_GetOrganizationByNameSucceeds_ReturnsOkAndResult()
{
var organizationName = Guid.NewGuid().ToString();
var organizations = new[] { new Organization() };
_mockOrganizationService
.Setup(os => os.GetOrganizationByName(organizationName))
.ReturnsAsync(organizations);
var response = await _organizationController.GetOrganizationByOrganizationName(organizationName);
Assert.IsInstanceOf<OkObjectResult>(response);
Assert.AreSame(organizations, ((OkObjectResult)response).Value);
}
[Test]
public async Task GetOrganizationByOrganizationNameLike_ServiceCallReturns_ReturnsOkAndResults()
{
var organizationName = Guid.NewGuid().ToString();
var limit = DateTime.Now.Millisecond;
var organizations = new []{ new Organization{ Name = organizationName } };
_mockOrganizationService
.Setup(s => s.GetOrganizationByNameLike(organizationName, limit))
.ReturnsAsync(organizations);
var response = await _organizationController.GetOrganizationByOrganizationNameLike(organizationName, limit);
Assert.IsInstanceOf<OkObjectResult>(response);
Assert.AreEqual(StatusCodes.Status200OK, ((OkObjectResult)response).StatusCode);
Assert.AreSame(organizations, ((OkObjectResult)response).Value);
}
[Test]
public async Task GetOrganizationByOrganizationNameLike_ServiceThrowsServiceException_Returns500()
{
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(s => s.GetOrganizationByNameLike(organizationName, It.IsAny<int?>()))
.ThrowsAsync(new ServiceException(string.Empty));
var response = await _organizationController.GetOrganizationByOrganizationNameLike(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
[Test]
public async Task GetOrganizationByOrganizationNameLike_ServiceThrowsException_Returns500()
{
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(s => s.GetOrganizationByNameLike(organizationName, It.IsAny<int?>()))
.ThrowsAsync(new Exception());
var response = await _organizationController.GetOrganizationByOrganizationNameLike(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
[Test]
public async Task CountOrganizationNumbersByName_ServiceCallReturns_ReturnsOkAndResults()
{
var organizationName = Guid.NewGuid().ToString();
var count = DateTime.Now.Millisecond;
_mockOrganizationService
.Setup(s => s.CountOrganizationNumbersByName(organizationName))
.ReturnsAsync(count);
var response = await _organizationController.CountOrganizationNumbersByName(organizationName);
Assert.IsInstanceOf<OkObjectResult>(response);
Assert.AreEqual(StatusCodes.Status200OK, ((OkObjectResult)response).StatusCode);
Assert.AreEqual(count, ((OkObjectResult)response).Value);
}
[Test]
public async Task CountOrganizationNumbersByName_ServiceThrowsServiceException_Returns500()
{
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(s => s.CountOrganizationNumbersByName(organizationName))
.ThrowsAsync(new ServiceException(string.Empty));
var response = await _organizationController.CountOrganizationNumbersByName(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
[Test]
public async Task CountOrganizationNumbersByName_ServiceThrowsException_Returns500()
{
var organizationName = Guid.NewGuid().ToString();
_mockOrganizationService
.Setup(s => s.CountOrganizationNumbersByName(organizationName))
.ThrowsAsync(new Exception());
var response = await _organizationController.CountOrganizationNumbersByName(organizationName);
Assert.IsInstanceOf<StatusCodeResult>(response);
Assert.AreEqual(StatusCodes.Status500InternalServerError, ((StatusCodeResult)response).StatusCode);
}
}
}