Browse Source
* Proving out removing the basket items at the same time the basket is deleted * Fixing existing unit tests * Adding a unit test for the Deletebasket method * Rename test and deleting basket items before basket * Added integration test for DeleteAsync method for BasketItems - Also added a BasketBuilder to create a Basket with no items, or one item.main
committed by
Steve Smith
6 changed files with 130 additions and 5 deletions
@ -0,0 +1,46 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate; |
||||
|
using Microsoft.eShopWeb.Infrastructure.Data; |
||||
|
using Microsoft.eShopWeb.UnitTests.Builders; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Xunit; |
||||
|
using Xunit.Abstractions; |
||||
|
|
||||
|
namespace Microsoft.eShopWeb.IntegrationTests.Repositories.BasketItemRepositoryTests |
||||
|
{ |
||||
|
public class DeleteAsync_Should |
||||
|
{ |
||||
|
private readonly CatalogContext _catalogContext; |
||||
|
private readonly EfRepository<Basket> _basketRepository; |
||||
|
private readonly EfRepository<BasketItem> _basketItemRepository; |
||||
|
private BasketBuilder BasketBuilder { get; } = new BasketBuilder(); |
||||
|
private readonly ITestOutputHelper _output; |
||||
|
|
||||
|
public DeleteAsync_Should(ITestOutputHelper output) |
||||
|
{ |
||||
|
_output = output; |
||||
|
var dbOptions = new DbContextOptionsBuilder<CatalogContext>() |
||||
|
.UseInMemoryDatabase(databaseName: "TestCatalog") |
||||
|
.Options; |
||||
|
_catalogContext = new CatalogContext(dbOptions); |
||||
|
_basketRepository = new EfRepository<Basket>(_catalogContext); |
||||
|
_basketItemRepository = new EfRepository<BasketItem>(_catalogContext); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task DeleteItemFromBasket() |
||||
|
{ |
||||
|
var existingBasket = BasketBuilder.WithOneBasketItem(); |
||||
|
_catalogContext.Add(existingBasket); |
||||
|
_catalogContext.SaveChanges(); |
||||
|
|
||||
|
await _basketItemRepository.DeleteAsync(existingBasket.Items.FirstOrDefault()); |
||||
|
_catalogContext.SaveChanges(); |
||||
|
|
||||
|
var basketFromDB = _basketRepository.GetById(BasketBuilder.BasketId); |
||||
|
|
||||
|
Assert.Equal(0, basketFromDB.Items.Count); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate; |
||||
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces; |
||||
|
using Microsoft.eShopWeb.ApplicationCore.Services; |
||||
|
using Moq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests |
||||
|
{ |
||||
|
public class DeleteBasket |
||||
|
{ |
||||
|
private Mock<IAsyncRepository<Basket>> _mockBasketRepo; |
||||
|
private Mock<IAsyncRepository<BasketItem>> _mockBasketItemRepo; |
||||
|
|
||||
|
public DeleteBasket() |
||||
|
{ |
||||
|
_mockBasketRepo = new Mock<IAsyncRepository<Basket>>(); |
||||
|
_mockBasketItemRepo = new Mock<IAsyncRepository<BasketItem>>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_InvokeBasketRepoOnceAndBasketItemRepoTwice_Given_TwoItemsInBasket() |
||||
|
{ |
||||
|
var basket = new Basket(); |
||||
|
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>()); |
||||
|
basket.AddItem(2, It.IsAny<decimal>(), It.IsAny<int>()); |
||||
|
_mockBasketRepo.Setup(x => x.GetByIdAsync(It.IsAny<int>())) |
||||
|
.ReturnsAsync(basket); |
||||
|
var basketService = new BasketService(_mockBasketRepo.Object, null, null, null, _mockBasketItemRepo.Object); |
||||
|
|
||||
|
await basketService.DeleteBasketAsync(It.IsAny<int>()); |
||||
|
|
||||
|
_mockBasketRepo.Verify(x => x.DeleteAsync(It.IsAny<Basket>()), Times.Once); |
||||
|
_mockBasketItemRepo.Verify(x => x.DeleteAsync(It.IsAny<BasketItem>()), Times.Exactly(2)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate; |
||||
|
|
||||
|
namespace Microsoft.eShopWeb.UnitTests.Builders |
||||
|
{ |
||||
|
public class BasketBuilder |
||||
|
{ |
||||
|
private Basket _basket; |
||||
|
public string BasketBuyerId => "testbuyerId@test.com"; |
||||
|
public int BasketId => 1; |
||||
|
|
||||
|
public BasketBuilder() |
||||
|
{ |
||||
|
_basket = WithNoItems(); |
||||
|
} |
||||
|
|
||||
|
public Basket Build() |
||||
|
{ |
||||
|
return _basket; |
||||
|
} |
||||
|
|
||||
|
public Basket WithNoItems() |
||||
|
{ |
||||
|
_basket = new Basket { BuyerId = BasketBuyerId, Id = BasketId }; |
||||
|
return _basket; |
||||
|
} |
||||
|
|
||||
|
public Basket WithOneBasketItem() |
||||
|
{ |
||||
|
_basket = new Basket { BuyerId = BasketBuyerId, Id = BasketId }; |
||||
|
_basket.AddItem(2, 3.40m, 4); |
||||
|
return _basket; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue