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<IMediator> _mediatorMock;
|
|
private readonly Mock<IIdentityService> _identityMock;
|
|
private readonly Mock<IOrderQueries> _queriesMock;
|
|
private readonly string _userIdentity;
|
|
|
|
public OrderControllerTest()
|
|
{
|
|
//Mocks;
|
|
_mediatorMock = new Mock<IMediator>();
|
|
_identityMock = new Mock<IIdentityService>();
|
|
_queriesMock = new Mock<IOrderQueries>();
|
|
_userIdentity = Guid.NewGuid().ToString();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task AddOrder_ReturnsBadRequestResult_WhenPersitenceOperationFails()
|
|
{
|
|
// Arrange
|
|
var orderRequest = new object() as IAsyncRequest<bool>;
|
|
|
|
_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>(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>(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>(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>(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>(OkObjectResult);
|
|
}
|
|
|
|
//Fakes
|
|
private NewOrderRequest OrderFakeNotExpired()
|
|
{
|
|
return new NewOrderRequest()
|
|
{
|
|
CardTypeId = 1,
|
|
CardExpiration = new DateTime(2020, 12, 12),
|
|
Buyer = _userIdentity
|
|
};
|
|
}
|
|
|
|
private NewOrderRequest OrderFakeExpired()
|
|
{
|
|
return new NewOrderRequest()
|
|
{
|
|
CardTypeId = 1,
|
|
CardExpiration = DateTime.Now.AddYears(-1)
|
|
};
|
|
}
|
|
}
|
|
}
|