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