using System; using System.Security.Claims; using LCU.API.Collections.RepoApi.Controllers; using LCU.API.Collections.RepoApi.HostedServices; using LCU.API.Collections.RepoApi.Models.Requests; using LCU.Shared.Collections.RepoApiLib.Models.Producer; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Moq; using Xunit; namespace LCU.API.Collections.RepoApiTests.Controllers { public class QueueControllerTest { private readonly Mock _mockService; private readonly Mock _mockHttpContextAccessor; public QueueControllerTest() { _mockService = new Mock(); _mockHttpContextAccessor = new Mock(); } [Fact] public void PutSingleAccountOnQueue_OK() { //setup _mockService.Setup(x => x.SendRequestToQueue(It.IsAny())); QueueController controller = new QueueController(_mockService.Object, _mockHttpContextAccessor.Object); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal(); _mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context); var request = new AccountQueueRequest() { AccountNo = "12345-123" }; //act var res = controller.PutSingleAccountOnQueue(request); Assert.IsType(res); _mockService.Verify(x => x.SendRequestToQueue(It.IsAny()), Times.Once); } [Fact] public void PutSingleAccountOnQueue_Exception() { //setup _mockService.Setup(x => x.SendRequestToQueue(It.IsAny())).Throws(new Exception("oops")); QueueController controller = new QueueController(_mockService.Object, _mockHttpContextAccessor.Object); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal(); _mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context); var request = new AccountQueueRequest() { AccountNo = "12345-123" }; //act var res = controller.PutSingleAccountOnQueue(request); var badres = res as ObjectResult; //asert Assert.Equal(500, badres.StatusCode); _mockService.Verify(x => x.SendRequestToQueue(It.IsAny()), Times.Once); } [Fact] public void PutSingleAccountOnQueue_BadFormat1() { //setup _mockService.Setup(x => x.SendRequestToQueue(It.IsAny())); QueueController controller = new QueueController(_mockService.Object, _mockHttpContextAccessor.Object); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal(); _mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context); controller.ModelState.AddModelError("Message", "Some field is required."); var request = new AccountQueueRequest() { AccountNo = "12345" }; //act var res = controller.PutSingleAccountOnQueue(request); var badres = res as ObjectResult; //asert Assert.Equal(400, badres.StatusCode); _mockService.Verify(x => x.SendRequestToQueue(It.IsAny()), Times.Never); } } }