@ -0,0 +1,54 @@ | |||||
using Microsoft.AspNetCore.Http; | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.WebMVC.Controllers; | |||||
using Microsoft.eShopOnContainers.WebMVC.Services; | |||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels; | |||||
using Moq; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Security.Claims; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
namespace UnitTest.Account | |||||
{ | |||||
public class AccountControllerTest | |||||
{ | |||||
private readonly Mock<IIdentityParser<ApplicationUser>> _identityParserMock; | |||||
private readonly Mock<HttpContext> _httpContextMock; | |||||
public AccountControllerTest() | |||||
{ | |||||
_identityParserMock = new Mock<IIdentityParser<ApplicationUser>>(); | |||||
_httpContextMock = new Mock<HttpContext>(); | |||||
} | |||||
[Fact] | |||||
public void Signin_with_token_success() | |||||
{ | |||||
//Arrange | |||||
var fakeCP = GenerateFakeClaimsIdentity(); | |||||
_httpContextMock.Setup(x => x.User) | |||||
.Returns(new ClaimsPrincipal(fakeCP)); | |||||
//Act | |||||
var accountController = new AccountController(_identityParserMock.Object); | |||||
accountController.ControllerContext.HttpContext = _httpContextMock.Object; | |||||
var actionResult = accountController.SignIn(""); | |||||
//Assert | |||||
var redirectResult = Assert.IsType<RedirectResult>(actionResult); | |||||
Assert.Equal(redirectResult.Url, "/"); | |||||
Assert.Equal(accountController.ViewData["access_token"], "fakeToken"); | |||||
} | |||||
private ClaimsIdentity GenerateFakeClaimsIdentity() | |||||
{ | |||||
var ci = new ClaimsIdentity(); | |||||
ci.AddClaim(new Claim("access_token", "fakeToken")); | |||||
return ci; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,69 @@ | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.Services.Basket.API.Controllers; | |||||
using Microsoft.eShopOnContainers.Services.Basket.API.Model; | |||||
using Moq; | |||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
namespace UnitTest.Basket.Application | |||||
{ | |||||
public class BasketWebApiTest | |||||
{ | |||||
private readonly Mock<IBasketRepository> _basketRepositoryMock; | |||||
public BasketWebApiTest() | |||||
{ | |||||
_basketRepositoryMock = new Mock<IBasketRepository>(); | |||||
} | |||||
[Fact] | |||||
public async Task Get_customer_basket_success() | |||||
{ | |||||
//Arrange | |||||
var fakeCustomerId = "1"; | |||||
var fakeCustomerBasket = GetCustomerBasketFake(fakeCustomerId); | |||||
_basketRepositoryMock.Setup(x => x.GetBasket(It.IsAny<string>())) | |||||
.Returns(Task.FromResult(fakeCustomerBasket)); | |||||
//Act | |||||
var basketController = new BasketController(_basketRepositoryMock.Object); | |||||
var actionResult = await basketController.Get(fakeCustomerId) as OkObjectResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId); | |||||
} | |||||
[Fact] | |||||
public async Task Post_customer_basket_success() | |||||
{ | |||||
//Arrange | |||||
var fakeCustomerId = "1"; | |||||
var fakeCustomerBasket = GetCustomerBasketFake(fakeCustomerId); | |||||
_basketRepositoryMock.Setup(x => x.UpdateBasket(It.IsAny<CustomerBasket>())) | |||||
.Returns(Task.FromResult(fakeCustomerBasket)); | |||||
//Act | |||||
var basketController = new BasketController(_basketRepositoryMock.Object); | |||||
var actionResult = await basketController.Post(fakeCustomerBasket) as OkObjectResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId); | |||||
} | |||||
private CustomerBasket GetCustomerBasketFake(string fakeCustomerId) | |||||
{ | |||||
return new CustomerBasket(fakeCustomerId) | |||||
{ | |||||
Items = new List<BasketItem>() | |||||
{ | |||||
new BasketItem() | |||||
} | |||||
}; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,132 @@ | |||||
using Microsoft.AspNetCore.Http; | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.WebMVC.Controllers; | |||||
using Microsoft.eShopOnContainers.WebMVC.Services; | |||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels; | |||||
using Moq; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
using BasketModel = Microsoft.eShopOnContainers.WebMVC.ViewModels.Basket; | |||||
namespace UnitTest.Basket.Application | |||||
{ | |||||
public class CartControllerTest | |||||
{ | |||||
private readonly Mock<ICatalogService> _catalogServiceMock; | |||||
private readonly Mock<IBasketService> _basketServiceMock; | |||||
private readonly Mock<IIdentityParser<ApplicationUser>> _identityParserMock; | |||||
private readonly Mock<HttpContext> _contextMock; | |||||
public CartControllerTest() | |||||
{ | |||||
_catalogServiceMock = new Mock<ICatalogService>(); | |||||
_basketServiceMock = new Mock<IBasketService>(); | |||||
_identityParserMock = new Mock<IIdentityParser<ApplicationUser>>(); | |||||
_contextMock = new Mock<HttpContext>(); | |||||
} | |||||
[Fact] | |||||
public async Task Post_cart_success() | |||||
{ | |||||
//Arrange | |||||
var fakeBuyerId = "1"; | |||||
var action = string.Empty; | |||||
var fakeBasket = GetFakeBasket(fakeBuyerId); | |||||
var fakeQuantities = new Dictionary<string, int>() | |||||
{ | |||||
["fakeProdA"] = 1, | |||||
["fakeProdB"] = 2 | |||||
}; | |||||
_basketServiceMock.Setup(x => x.SetQuantities(It.IsAny<ApplicationUser>(), It.IsAny<Dictionary<string, int>>())) | |||||
.Returns(Task.FromResult(fakeBasket)); | |||||
_basketServiceMock.Setup(x => x.UpdateBasket(It.IsAny<BasketModel>())) | |||||
.Returns(Task.FromResult(fakeBasket)); | |||||
//Act | |||||
var orderController = new CartController(_basketServiceMock.Object, _catalogServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Index(fakeQuantities, action); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
var model = Assert.IsAssignableFrom<BasketModel>(viewResult.ViewData.Model); | |||||
} | |||||
[Fact] | |||||
public async Task Post_cart_checkout_success() | |||||
{ | |||||
//Arrange | |||||
var fakeBuyerId = "1"; | |||||
var action = "[ Checkout ]"; | |||||
var fakeBasket = GetFakeBasket(fakeBuyerId); | |||||
var fakeQuantities = new Dictionary<string, int>() | |||||
{ | |||||
["fakeProdA"] = 1, | |||||
["fakeProdB"] = 2 | |||||
}; | |||||
_basketServiceMock.Setup(x => x.SetQuantities(It.IsAny<ApplicationUser>(), It.IsAny<Dictionary<string, int>>())) | |||||
.Returns(Task.FromResult(fakeBasket)); | |||||
_basketServiceMock.Setup(x => x.UpdateBasket(It.IsAny<BasketModel>())) | |||||
.Returns(Task.FromResult(fakeBasket)); | |||||
//Act | |||||
var orderController = new CartController(_basketServiceMock.Object, _catalogServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Index(fakeQuantities, action); | |||||
//Assert | |||||
var redirectToActionResult = Assert.IsType<RedirectToActionResult>(actionResult); | |||||
Assert.Equal("Order", redirectToActionResult.ControllerName); | |||||
Assert.Equal("Create", redirectToActionResult.ActionName); | |||||
} | |||||
[Fact] | |||||
public async Task Add_to_cart_success() | |||||
{ | |||||
//Arrange | |||||
var fakeCatalogItem = GetFakeCatalogItem(); | |||||
_basketServiceMock.Setup(x => x.AddItemToBasket(It.IsAny<ApplicationUser>(), It.IsAny<BasketItem>())) | |||||
.Returns(Task.FromResult(1)); | |||||
//Act | |||||
var orderController = new CartController(_basketServiceMock.Object, _catalogServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.AddToCart(fakeCatalogItem); | |||||
//Assert | |||||
var redirectToActionResult = Assert.IsType<RedirectToActionResult>(actionResult); | |||||
Assert.Equal("Catalog", redirectToActionResult.ControllerName); | |||||
Assert.Equal("Index", redirectToActionResult.ActionName); | |||||
} | |||||
private BasketModel GetFakeBasket(string buyerId) | |||||
{ | |||||
return new BasketModel() | |||||
{ | |||||
BuyerId = buyerId | |||||
}; | |||||
} | |||||
private CatalogItem GetFakeCatalogItem() | |||||
{ | |||||
return new CatalogItem() | |||||
{ | |||||
Id = "1", | |||||
Name = "fakeName", | |||||
CatalogBrand = "fakeBrand", | |||||
CatalogType = "fakeType", | |||||
CatalogBrandId = 2, | |||||
CatalogTypeId = 5, | |||||
Price = 20 | |||||
}; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,90 @@ | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.WebMVC.Controllers; | |||||
using Microsoft.eShopOnContainers.WebMVC.Services; | |||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels; | |||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels.CatalogViewModels; | |||||
using Moq; | |||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
using CatalogModel = Microsoft.eShopOnContainers.WebMVC.ViewModels.Catalog; | |||||
namespace UnitTest.Catalog.Application | |||||
{ | |||||
public class CatalogControllerTest | |||||
{ | |||||
private readonly Mock<ICatalogService> _catalogServiceMock; | |||||
public CatalogControllerTest() | |||||
{ | |||||
_catalogServiceMock = new Mock<ICatalogService>(); | |||||
} | |||||
[Fact] | |||||
public async Task Get_catalog_items_success() | |||||
{ | |||||
//Arrange | |||||
var fakeBrandFilterApplied = 1; | |||||
var fakeTypesFilterApplied = 2; | |||||
var fakePage = 2; | |||||
var fakeCatalog = GetFakeCatalog(); | |||||
var expectedNumberOfPages = 5; | |||||
var expectedTotalPages = 50; | |||||
var expectedCurrentPage = 2; | |||||
_catalogServiceMock.Setup(x => x.GetCatalogItems | |||||
( | |||||
It.Is<int>(y => y == fakePage), | |||||
It.IsAny<int>(), | |||||
It.Is<int?>(y => y == fakeBrandFilterApplied), | |||||
It.Is<int?>(y => y == fakeTypesFilterApplied) | |||||
)) | |||||
.Returns(Task.FromResult(fakeCatalog)); | |||||
//Act | |||||
var orderController = new CatalogController(_catalogServiceMock.Object); | |||||
var actionResult = await orderController.Index(fakeBrandFilterApplied, fakeTypesFilterApplied, fakePage); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
var model = Assert.IsAssignableFrom<IndexViewModel>(viewResult.ViewData.Model); | |||||
Assert.Equal(model.PaginationInfo.TotalPages, expectedNumberOfPages); | |||||
Assert.Equal(model.PaginationInfo.TotalItems, expectedTotalPages); | |||||
Assert.Equal(model.PaginationInfo.ActualPage, expectedCurrentPage); | |||||
Assert.Empty(model.PaginationInfo.Next); | |||||
Assert.Empty(model.PaginationInfo.Previous); | |||||
} | |||||
private CatalogModel GetFakeCatalog() | |||||
{ | |||||
return new CatalogModel() | |||||
{ | |||||
PageSize = 10, | |||||
Count = 50, | |||||
PageIndex = 2, | |||||
Data = new List<CatalogItem>() | |||||
{ | |||||
new CatalogItem() | |||||
{ | |||||
Id = "1", | |||||
Name = "fakeItemA", | |||||
CatalogTypeId = 1 | |||||
}, | |||||
new CatalogItem() | |||||
{ | |||||
Id = "2", | |||||
Name = "fakeItemB", | |||||
CatalogTypeId = 1 | |||||
}, | |||||
new CatalogItem() | |||||
{ | |||||
Id = "3", | |||||
Name = "fakeItemC", | |||||
CatalogTypeId = 1 | |||||
} | |||||
} | |||||
}; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,85 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace UnitTest.Ordering.Application | |||||
{ | |||||
using MediatR; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure.Repositories; | |||||
using Moq; | |||||
using System.Collections; | |||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
public class IdentifierCommandHandlerTest | |||||
{ | |||||
private readonly Mock<IRequestManager> _requestManager; | |||||
private readonly Mock<IMediator> _mediator; | |||||
public IdentifierCommandHandlerTest() | |||||
{ | |||||
_requestManager = new Mock<IRequestManager>(); | |||||
_mediator = new Mock<IMediator>(); | |||||
} | |||||
[Fact] | |||||
public async Task Handler_sends_command_when_order_no_exists() | |||||
{ | |||||
// Arrange | |||||
var fakeGuid = Guid.NewGuid(); | |||||
var fakeOrderCmd = new IdentifiedCommand<CreateOrderCommand, bool>(FakeOrderRequest(), fakeGuid); | |||||
_requestManager.Setup(x => x.ExistAsync(It.IsAny<Guid>())) | |||||
.Returns(Task.FromResult(false)); | |||||
_mediator.Setup(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>())) | |||||
.Returns(Task.FromResult(true)); | |||||
//Act | |||||
var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object); | |||||
var result = await handler.Handle(fakeOrderCmd); | |||||
//Assert | |||||
Assert.True(result); | |||||
_mediator.Verify(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()), Times.Once()); | |||||
} | |||||
[Fact] | |||||
public async Task Handler_sends_no_command_when_order_already_exists() | |||||
{ | |||||
// Arrange | |||||
var fakeGuid = Guid.NewGuid(); | |||||
var fakeOrderCmd = new IdentifiedCommand<CreateOrderCommand, bool>(FakeOrderRequest(), fakeGuid); | |||||
_requestManager.Setup(x => x.ExistAsync(It.IsAny<Guid>())) | |||||
.Returns(Task.FromResult(true)); | |||||
_mediator.Setup(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>())) | |||||
.Returns(Task.FromResult(true)); | |||||
//Act | |||||
var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object); | |||||
var result = await handler.Handle(fakeOrderCmd); | |||||
//Assert | |||||
Assert.False(result); | |||||
_mediator.Verify(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()), Times.Never()); | |||||
} | |||||
private CreateOrderCommand FakeOrderRequest(Dictionary<string, object> args = null) | |||||
{ | |||||
return new CreateOrderCommand( | |||||
city: args != null && args.ContainsKey("city") ? (string)args["city"] : null, | |||||
street: args != null && args.ContainsKey("street") ? (string)args["street"] : null, | |||||
state: args != null && args.ContainsKey("state") ? (string)args["state"] : null, | |||||
country: args != null && args.ContainsKey("country") ? (string)args["country"] : null, | |||||
zipcode: args != null && args.ContainsKey("zipcode") ? (string)args["zipcode"] : null, | |||||
cardNumber: args != null && args.ContainsKey("cardNumber") ? (string)args["cardNumber"] : "1234", | |||||
cardExpiration: args != null && args.ContainsKey("cardExpiration") ? (DateTime)args["cardExpiration"] : DateTime.MinValue, | |||||
cardSecurityNumber: args != null && args.ContainsKey("cardSecurityNumber") ? (string)args["cardSecurityNumber"] : "123", | |||||
cardHolderName: args != null && args.ContainsKey("cardHolderName") ? (string)args["cardHolderName"] : "XXX", | |||||
cardTypeId: args != null && args.ContainsKey("cardTypeId") ? (int)args["cardTypeId"] : 0); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,165 @@ | |||||
using Microsoft.AspNetCore.Http; | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.WebMVC.Controllers; | |||||
using Microsoft.eShopOnContainers.WebMVC.Services; | |||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels; | |||||
using Moq; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
using BasketModel = Microsoft.eShopOnContainers.WebMVC.ViewModels.Basket; | |||||
namespace UnitTest.Ordering.Application | |||||
{ | |||||
public class OrderControllerTest | |||||
{ | |||||
private readonly Mock<IOrderingService> _orderServiceMock; | |||||
private readonly Mock<IBasketService> _basketServiceMock; | |||||
private readonly Mock<IIdentityParser<ApplicationUser>> _identityParserMock; | |||||
private readonly Mock<HttpContext> _contextMock; | |||||
public OrderControllerTest() | |||||
{ | |||||
_orderServiceMock = new Mock<IOrderingService>(); | |||||
_basketServiceMock = new Mock<IBasketService>(); | |||||
_identityParserMock = new Mock<IIdentityParser<ApplicationUser>>(); | |||||
_contextMock = new Mock<HttpContext>(); | |||||
} | |||||
[Fact] | |||||
public async Task Get_order_list_success() | |||||
{ | |||||
//Arrange | |||||
var expectedTotalResults = 1; | |||||
var fakeOrder = GetFakeOrder(); | |||||
_orderServiceMock.Setup(x => x.GetMyOrders(It.IsAny<ApplicationUser>())) | |||||
.Returns(Task.FromResult(new List<Order>() { fakeOrder })); | |||||
//Act | |||||
var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Index(fakeOrder); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
var model = Assert.IsAssignableFrom<List<Order>>(viewResult.ViewData.Model); | |||||
Assert.Equal(model.Count, expectedTotalResults); | |||||
} | |||||
[Fact] | |||||
public async Task Get_order_detail_success() | |||||
{ | |||||
//Arrange | |||||
var fakeOrderId = "12"; | |||||
var fakeOrder = GetFakeOrder(); | |||||
_orderServiceMock.Setup(x => x.GetOrder(It.IsAny<ApplicationUser>(), It.IsAny<string>())) | |||||
.Returns(Task.FromResult(fakeOrder)); | |||||
//Act | |||||
var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Detail(fakeOrderId); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model); | |||||
} | |||||
[Fact] | |||||
public async Task Get_create_order_success() | |||||
{ | |||||
//Arrange | |||||
var fakeBuyerId = "1"; | |||||
var fakeBasket = GetFakeBasket(fakeBuyerId); | |||||
var fakeOrder = GetFakeOrder(); | |||||
_basketServiceMock.Setup(x => x.GetBasket(It.IsAny<ApplicationUser>())) | |||||
.Returns(Task.FromResult(fakeBasket)); | |||||
_basketServiceMock.Setup(x => x.MapBasketToOrder(It.IsAny<BasketModel>())) | |||||
.Returns(fakeOrder); | |||||
_orderServiceMock.Setup(x => x.MapUserInfoIntoOrder(It.IsAny<ApplicationUser>(), It.IsAny<Order>())) | |||||
.Returns(fakeOrder); | |||||
//Act | |||||
var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Create(); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model); | |||||
} | |||||
[Fact] | |||||
public async Task Post_create_order_success() | |||||
{ | |||||
//Arrange | |||||
var fakeOrder = GetFakeOrder(); | |||||
_basketServiceMock.Setup(x => x.CleanBasket(It.IsAny<ApplicationUser>())) | |||||
.Returns(Task.FromResult(1)); | |||||
_orderServiceMock.Setup(x => x.CreateOrder(It.IsAny<Order>())) | |||||
.Returns(Task.FromResult(1)); | |||||
//Act | |||||
var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
var actionResult = await orderController.Create(fakeOrder, "fakeAction"); | |||||
//Assert | |||||
var redirectToActionResult = Assert.IsType<RedirectToActionResult>(actionResult); | |||||
Assert.Null(redirectToActionResult.ControllerName); | |||||
Assert.Equal("Index", redirectToActionResult.ActionName); | |||||
} | |||||
[Fact] | |||||
public async Task Post_create_order_fail() | |||||
{ | |||||
//Arrange | |||||
var fakeOrder = GetFakeOrder(); | |||||
_basketServiceMock.Setup(x => x.CleanBasket(It.IsAny<ApplicationUser>())) | |||||
.Returns(Task.FromResult(1)); | |||||
_orderServiceMock.Setup(x => x.CreateOrder(It.IsAny<Order>())) | |||||
.Returns(Task.FromResult(1)); | |||||
//Act | |||||
var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object); | |||||
orderController.ControllerContext.HttpContext = _contextMock.Object; | |||||
orderController.ModelState.AddModelError("fakeError", "fakeError"); | |||||
var actionResult = await orderController.Create(fakeOrder, "action"); | |||||
//Assert | |||||
var viewResult = Assert.IsType<ViewResult>(actionResult); | |||||
Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model); | |||||
} | |||||
private BasketModel GetFakeBasket(string buyerId) | |||||
{ | |||||
return new BasketModel() | |||||
{ | |||||
BuyerId = buyerId | |||||
}; | |||||
} | |||||
private Order GetFakeOrder() | |||||
{ | |||||
return new Order() | |||||
{ | |||||
OrderNumber = "1", | |||||
CardNumber = "12", | |||||
CardSecurityNumber = "1212", | |||||
Status = "Pending", | |||||
RequestId = Guid.NewGuid(), | |||||
CardExpiration = DateTime.Now.AddYears(1), | |||||
}; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,107 @@ | |||||
using MediatR; | |||||
using Microsoft.AspNetCore.Mvc; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Queries; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.API.Controllers; | |||||
using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; | |||||
using Moq; | |||||
using System; | |||||
using System.Threading.Tasks; | |||||
using Xunit; | |||||
namespace UnitTest.Ordering.Application | |||||
{ | |||||
public class OrdersWebApiTest | |||||
{ | |||||
private readonly Mock<IMediator> _mediatorMock; | |||||
private readonly Mock<IOrderQueries> _orderQueriesMock; | |||||
private readonly Mock<IIdentityService> _identityServiceMock; | |||||
public OrdersWebApiTest() | |||||
{ | |||||
_mediatorMock = new Mock<IMediator>(); | |||||
_orderQueriesMock = new Mock<IOrderQueries>(); | |||||
_identityServiceMock = new Mock<IIdentityService>(); | |||||
} | |||||
[Fact] | |||||
public async Task Create_order_with_requestId_success() | |||||
{ | |||||
//Arrange | |||||
_mediatorMock.Setup(x => x.SendAsync(It.IsAny<IdentifiedCommand<CreateOrderCommand, bool>>())) | |||||
.Returns(Task.FromResult(true)); | |||||
//Act | |||||
var orderController = new OrdersController(_mediatorMock.Object, _orderQueriesMock.Object, _identityServiceMock.Object); | |||||
var actionResult = await orderController.CreateOrder(new CreateOrderCommand(), Guid.NewGuid().ToString()) as OkResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
} | |||||
[Fact] | |||||
public async Task Create_order_bad_request() | |||||
{ | |||||
//Arrange | |||||
_mediatorMock.Setup(x => x.SendAsync(It.IsAny<IdentifiedCommand<CreateOrderCommand, bool>>())) | |||||
.Returns(Task.FromResult(true)); | |||||
//Act | |||||
var orderController = new OrdersController(_mediatorMock.Object, _orderQueriesMock.Object, _identityServiceMock.Object); | |||||
var actionResult = await orderController.CreateOrder(new CreateOrderCommand(), String.Empty) as BadRequestResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.BadRequest); | |||||
} | |||||
[Fact] | |||||
public async Task Get_orders_success() | |||||
{ | |||||
//Arrange | |||||
var fakeDynamicResult = new Object(); | |||||
_orderQueriesMock.Setup(x => x.GetOrders()) | |||||
.Returns(Task.FromResult(fakeDynamicResult)); | |||||
//Act | |||||
var orderController = new OrdersController(_mediatorMock.Object, _orderQueriesMock.Object, _identityServiceMock.Object); | |||||
var actionResult = await orderController.GetOrders() as OkObjectResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
} | |||||
[Fact] | |||||
public async Task Get_order_success() | |||||
{ | |||||
//Arrange | |||||
var fakeOrderId = 123; | |||||
var fakeDynamicResult = new Object(); | |||||
_orderQueriesMock.Setup(x => x.GetOrder(It.IsAny<int>())) | |||||
.Returns(Task.FromResult(fakeDynamicResult)); | |||||
//Act | |||||
var orderController = new OrdersController(_mediatorMock.Object, _orderQueriesMock.Object, _identityServiceMock.Object); | |||||
var actionResult = await orderController.GetOrder(fakeOrderId) as OkObjectResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
} | |||||
[Fact] | |||||
public async Task Get_cardTypes_success() | |||||
{ | |||||
//Arrange | |||||
var fakeDynamicResult = new Object(); | |||||
_orderQueriesMock.Setup(x => x.GetCardTypes()) | |||||
.Returns(Task.FromResult(fakeDynamicResult)); | |||||
//Act | |||||
var orderController = new OrdersController(_mediatorMock.Object, _orderQueriesMock.Object, _identityServiceMock.Object); | |||||
var actionResult = await orderController.GetCardTypes() as OkObjectResult; | |||||
//Assert | |||||
Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK); | |||||
} | |||||
} | |||||
} |