Browse Source
* Adding Id to query so the correct order details are always pulled back * Removing unused usings - also removed the sync method as it is not used anywhere in the solution. The Async should be the preferred one. * Adding integration test for GetByIdWithItemAsync * Rename testmain
committed by
Steve Smith
3 changed files with 66 additions and 13 deletions
@ -0,0 +1,63 @@ |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate; |
|||
using Microsoft.eShopWeb.Infrastructure.Data; |
|||
using Microsoft.eShopWeb.UnitTests.Builders; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Xunit; |
|||
using Xunit.Abstractions; |
|||
|
|||
namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests |
|||
{ |
|||
public class GetByIdWithItemsAsync_Should |
|||
{ |
|||
private readonly CatalogContext _catalogContext; |
|||
private readonly OrderRepository _orderRepository; |
|||
private OrderBuilder OrderBuilder { get; } = new OrderBuilder(); |
|||
private readonly ITestOutputHelper _output; |
|||
public GetByIdWithItemsAsync_Should(ITestOutputHelper output) |
|||
{ |
|||
_output = output; |
|||
var dbOptions = new DbContextOptionsBuilder<CatalogContext>() |
|||
.UseInMemoryDatabase(databaseName: "TestCatalog") |
|||
.Options; |
|||
_catalogContext = new CatalogContext(dbOptions); |
|||
_orderRepository = new OrderRepository(_catalogContext); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task GetOrderAndItemsByOrderId_When_MultipleOrdersPresent() |
|||
{ |
|||
//Arrange
|
|||
var itemOneUnitPrice = 5.50m; |
|||
var itemOneUnits = 2; |
|||
var itemTwoUnitPrice = 7.50m; |
|||
var itemTwoUnits = 5; |
|||
|
|||
var firstOrder = OrderBuilder.WithDefaultValues(); |
|||
_catalogContext.Orders.Add(firstOrder); |
|||
int firstOrderId = firstOrder.Id; |
|||
|
|||
var secondOrderItems = new List<OrderItem>(); |
|||
secondOrderItems.Add(new OrderItem(OrderBuilder.TestCatalogItemOrdered, itemOneUnitPrice, itemOneUnits)); |
|||
secondOrderItems.Add(new OrderItem(OrderBuilder.TestCatalogItemOrdered, itemTwoUnitPrice, itemTwoUnits)); |
|||
var secondOrder = OrderBuilder.WithItems(secondOrderItems); |
|||
_catalogContext.Orders.Add(secondOrder); |
|||
int secondOrderId = secondOrder.Id; |
|||
|
|||
_catalogContext.SaveChanges(); |
|||
|
|||
//Act
|
|||
var orderFromRepo = await _orderRepository.GetByIdWithItemsAsync(secondOrderId); |
|||
|
|||
//Assert
|
|||
Assert.Equal(secondOrderId, orderFromRepo.Id); |
|||
Assert.Equal(secondOrder.OrderItems.Count, orderFromRepo.OrderItems.Count); |
|||
Assert.Equal(1, orderFromRepo.OrderItems.Count(x => x.UnitPrice == itemOneUnitPrice)); |
|||
Assert.Equal(1, orderFromRepo.OrderItems.Count(x => x.UnitPrice == itemTwoUnitPrice)); |
|||
Assert.Equal(itemOneUnits, orderFromRepo.OrderItems.SingleOrDefault(x => x.UnitPrice == itemOneUnitPrice).Units); |
|||
Assert.Equal(itemTwoUnits, orderFromRepo.OrderItems.SingleOrDefault(x => x.UnitPrice == itemTwoUnitPrice).Units); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue