Browse Source
Merge pull request #264 from dotnet-architecture/basket-item-and-aggregate-root-updates
Removing BasketItemRepository as it is not an aggregate root
main
Eric Fleming
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with
8 additions and
19 deletions
-
src/ApplicationCore/Entities/BasketAggregate/BasketItem.cs
-
src/ApplicationCore/Services/BasketService.cs
-
tests/UnitTests/ApplicationCore/Services/BasketServiceTests/DeleteBasket.cs
-
tests/UnitTests/ApplicationCore/Services/BasketServiceTests/SetQuantities.cs
-
tests/UnitTests/ApplicationCore/Services/BasketServiceTests/TransferBasket.cs
|
|
|
@ -5,5 +5,6 @@ |
|
|
|
public decimal UnitPrice { get; set; } |
|
|
|
public int Quantity { get; set; } |
|
|
|
public int CatalogItemId { get; set; } |
|
|
|
public int BasketId { get; private set; } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -11,16 +11,13 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services |
|
|
|
public class BasketService : IBasketService |
|
|
|
{ |
|
|
|
private readonly IAsyncRepository<Basket> _basketRepository; |
|
|
|
private readonly IAsyncRepository<BasketItem> _basketItemRepository; |
|
|
|
private readonly IAppLogger<BasketService> _logger; |
|
|
|
|
|
|
|
public BasketService(IAsyncRepository<Basket> basketRepository, |
|
|
|
IAppLogger<BasketService> logger, |
|
|
|
IAsyncRepository<BasketItem> basketItemRepository) |
|
|
|
IAppLogger<BasketService> logger) |
|
|
|
{ |
|
|
|
_basketRepository = basketRepository; |
|
|
|
_logger = logger; |
|
|
|
_basketItemRepository = basketItemRepository; |
|
|
|
} |
|
|
|
|
|
|
|
public async Task AddItemToBasket(int basketId, int catalogItemId, decimal price, int quantity) |
|
|
|
@ -35,12 +32,6 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services |
|
|
|
public async Task DeleteBasketAsync(int basketId) |
|
|
|
{ |
|
|
|
var basket = await _basketRepository.GetByIdAsync(basketId); |
|
|
|
|
|
|
|
foreach (var item in basket.Items.ToList()) |
|
|
|
{ |
|
|
|
await _basketItemRepository.DeleteAsync(item); |
|
|
|
} |
|
|
|
|
|
|
|
await _basketRepository.DeleteAsync(basket); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -10,28 +10,25 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes |
|
|
|
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() |
|
|
|
public async Task Should_InvokeBasketRepositoryDeleteAsync_Once() |
|
|
|
{ |
|
|
|
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, _mockBasketItemRepo.Object); |
|
|
|
var basketService = new BasketService(_mockBasketRepo.Object, null); |
|
|
|
|
|
|
|
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)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -21,7 +21,7 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes |
|
|
|
[Fact] |
|
|
|
public async void ThrowsGivenInvalidBasketId() |
|
|
|
{ |
|
|
|
var basketService = new BasketService(_mockBasketRepo.Object, null, null); |
|
|
|
var basketService = new BasketService(_mockBasketRepo.Object, null); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<BasketNotFoundException>(async () => |
|
|
|
await basketService.SetQuantities(_invalidId, new System.Collections.Generic.Dictionary<string, int>())); |
|
|
|
@ -30,7 +30,7 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes |
|
|
|
[Fact] |
|
|
|
public async void ThrowsGivenNullQuantities() |
|
|
|
{ |
|
|
|
var basketService = new BasketService(null, null, null); |
|
|
|
var basketService = new BasketService(null, null); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(async () => |
|
|
|
await basketService.SetQuantities(123, null)); |
|
|
|
|
|
|
|
@ -9,7 +9,7 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes |
|
|
|
[Fact] |
|
|
|
public async void ThrowsGivenNullAnonymousId() |
|
|
|
{ |
|
|
|
var basketService = new BasketService(null, null, null); |
|
|
|
var basketService = new BasketService(null, null); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(async () => await basketService.TransferBasketAsync(null, "steve")); |
|
|
|
} |
|
|
|
@ -17,7 +17,7 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes |
|
|
|
[Fact] |
|
|
|
public async void ThrowsGivenNullUserId() |
|
|
|
{ |
|
|
|
var basketService = new BasketService(null, null, null); |
|
|
|
var basketService = new BasketService(null, null); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(async () => await basketService.TransferBasketAsync("abcdefg", null)); |
|
|
|
} |
|
|
|
|