using System; using Xunit; using System.Threading.Tasks; using Moq; using MediatR; using Microsoft.eShopOnContainers.Services.Ordering.API.Controllers; using Microsoft.eShopOnContainers.Services.Ordering.Api.Application.Commands; using Microsoft.AspNetCore.Mvc; using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; using Microsoft.eShopOnContainers.Services.Ordering.Api.Application.Queries; using System.Collections.Generic; namespace UnitTest.Ordering.Controllers { public class OrderControllerTest { private readonly Mock _mediatorMock; private readonly Mock _identityMock; private readonly Mock _queriesMock; public OrderControllerTest() { //Mocks; _mediatorMock = new Mock(); _identityMock = new Mock(); _queriesMock = new Mock(); } [Fact] public async Task AddOrder_ReturnsBadRequestResult_WhenPersitenceOperationFails() { // Arrange var orderRequest = new object() as IAsyncRequest; _mediatorMock.Setup(mediator => mediator.SendAsync(OrderFakeNotExpired())) .Returns(Task.FromResult(false)); _identityMock.Setup(identity => identity.GetUserIdentity()) .Returns(Guid.NewGuid().ToString()); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var badRequestResult = await controller.AddOrder(OrderFakeNotExpired()); // Assert Assert.IsType(badRequestResult); } [Fact] public async Task AddOrder_ReturnsOK_WhenPersistenceOperationSucceed() { // Arrange _mediatorMock.Setup(mediator => mediator.SendAsync(OrderFakeNotExpired())) .Returns(Task.FromResult(true)); _identityMock.Setup(identity => identity.GetUserIdentity()) .Returns(Guid.NewGuid().ToString()); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var badRequestResult = await controller.AddOrder(OrderFakeNotExpired()); // Assert Assert.IsType(badRequestResult); } [Fact] public async Task GetOrder_ReturnsNotFound_WhenItemNotFound() { // Arrange _queriesMock.Setup(queries => queries.GetOrder(1)) .Throws(new KeyNotFoundException()); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var notFoundResult = await controller.GetOrder(1); // Assert Assert.IsType(notFoundResult); } [Fact] public async Task GetOrder_ReturnsOkObjecResult_WheItemFound() { // Arrange _queriesMock.Setup(queries => queries.GetOrder(1)) .Returns(Task.FromResult(new object())); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var OkObjectResult = await controller.GetOrder(1); // Assert Assert.IsType(OkObjectResult); } [Fact] public async Task GetOrders_ReturnsOkObjectResult() { // Arrange _queriesMock.Setup(queries => queries.GetOrders()) .Returns(Task.FromResult(new object())); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var OkObjectResult = await controller.GetOrders(); // Assert Assert.IsType(OkObjectResult); } [Fact] public async Task GetCardTypes() { // Arrange _queriesMock.Setup(queries => queries.GetCardTypes()) .Returns(Task.FromResult(new object())); var controller = new OrdersController(_mediatorMock.Object, _queriesMock.Object, _identityMock.Object); // Act var OkObjectResult = await controller.GetCardTypes(); // Assert Assert.IsType(OkObjectResult); } //Fakes private NewOrderRequest OrderFakeNotExpired() { return new NewOrderRequest() { CardTypeId = 1, CardExpiration = DateTime.Now.AddYears(1) }; } private NewOrderRequest OrderFakeExpired() { return new NewOrderRequest() { CardTypeId = 1, CardExpiration = DateTime.Now.AddYears(-1) }; } } }