public async Task HandleAsync_WithSomeItemsOfItemCategoryOnActiveShoppingLists_ShouldStoreItemsAndShoppingListsAndDeleteItemCategory() { // Arrange var fixture = commonFixture.GetNewFixture(); ItemCategoryRepositoryMock itemCategoryRepositoryMock = new ItemCategoryRepositoryMock(fixture); ItemRepositoryMock itemRepositoryMock = new ItemRepositoryMock(fixture); ShoppingListRepositoryMock shoppingListRepositoryMock = new ShoppingListRepositoryMock(fixture); TransactionGeneratorMock transactionGeneratorMock = new TransactionGeneratorMock(fixture); ItemCategoryMock itemCategoryMock = itemCategoryMockFixtur.Create(); var storeItemMocks = storeItemMockFixture.CreateMany(2).ToList(); var shoppingLists = new Dictionary <StoreItemMock, List <ShoppingListMock> >(); foreach (var storeItemMock in storeItemMocks) { int amount = commonFixture.NextInt(1, 5); var listMocks = shoppingListMockFixture.CreateMany(amount).ToList(); shoppingLists.Add(storeItemMock, listMocks); shoppingListRepositoryMock.SetupFindActiveByAsync(storeItemMock.Object.Id, listMocks.Select(m => m.Object)); } TransactionMock transactionMock = new TransactionMock(); var command = fixture.Create <DeleteItemCategoryCommand>(); var handler = fixture.Create <DeleteItemCategoryCommandHandler>(); itemCategoryRepositoryMock.SetupFindByAsync(command.ItemCategoryId, itemCategoryMock.Object); itemRepositoryMock.SetupFindActiveByAsync(command.ItemCategoryId, storeItemMocks.Select(m => m.Object)); transactionGeneratorMock.SetupGenerateAsync(transactionMock.Object); // Act var result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); itemCategoryMock.VerifyDeleteOnce(); foreach (var storeItemMock in storeItemMocks) { storeItemMock.VerifyDeleteOnce(); itemRepositoryMock.VerifyStoreAsyncOnce(storeItemMock.Object); IEnumerable <ShoppingListMock> affiliatedShoppingListMocks = shoppingLists[storeItemMock]; foreach (var listMock in affiliatedShoppingListMocks) { listMock.VerifyRemoveItemOnce(storeItemMock.Object.Id); shoppingListRepositoryMock.VerifyStoreAsyncOnce(listMock.Object); } } itemCategoryRepositoryMock.VerifyStoreAsyncOnce(itemCategoryMock.Object); transactionMock.VerifyCommitAsyncOnce(); } }
public async Task HandleAsync_WithValidActualId_ShouldRemoveItemFromBasket(bool isActualItemId, bool isTemporaryItem) { // Arrange var local = new LocalFixture(); var handler = local.CreateCommandHandler(); var command = isActualItemId ? local.CreateCommandWithActualId() : local.CreateCommandWithOfflineId(); ShoppingListMock listMock = local.ShoppingListMockFixture.Create(); var storeItem = local.StoreItemFixture.Create(StoreItemDefinition.FromTemporary(isTemporaryItem)); StoreItemMock itemMock = new StoreItemMock(storeItem); local.ShoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, listMock.Object); if (isActualItemId) { local.ItemRepositoryMock.SetupFindByAsync(new ItemId(command.OfflineTolerantItemId.ActualId.Value), itemMock.Object); } else { local.ItemRepositoryMock.SetupFindByAsync(new TemporaryItemId(command.OfflineTolerantItemId.OfflineId.Value), itemMock.Object); } TransactionMock transactionMock = new TransactionMock(); local.TransactionGeneratorMock.SetupGenerateAsync(transactionMock.Object); // Act bool result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); listMock.VerifyRemoveItemOnce(itemMock.Object.Id); local.TransactionGeneratorMock.VerifyGenerateAsyncOnce(); if (isTemporaryItem) { itemMock.VerifyDeleteOnce(); local.ItemRepositoryMock.VerifyStoreAsyncOnce(itemMock.Object); } else { itemMock.VerifyDeleteNever(); local.ItemRepositoryMock.VerifyStoreAsyncNever(); } local.ShoppingListRepositoryMock.VerifyStoreAsyncOnce(listMock.Object); transactionMock.VerifyCommitAsyncOnce(); } }
public async Task HandleAsync_WithSomeItemsOfItemCategoryOnNoActiveShoppingLists_ShouldStoreItemsButNoShoppingListsAndDeleteItemCategory() { // Arrange var fixture = commonFixture.GetNewFixture(); ItemCategoryRepositoryMock itemCategoryRepositoryMock = new ItemCategoryRepositoryMock(fixture); ItemRepositoryMock itemRepositoryMock = new ItemRepositoryMock(fixture); ShoppingListRepositoryMock shoppingListRepositoryMock = new ShoppingListRepositoryMock(fixture); TransactionGeneratorMock transactionGeneratorMock = new TransactionGeneratorMock(fixture); ItemCategoryMock itemCategoryMock = itemCategoryMockFixtur.Create(); List <StoreItemMock> storeItemMocks = storeItemMockFixture.CreateMany(3).ToList(); TransactionMock transactionMock = new TransactionMock(); var command = fixture.Create <DeleteItemCategoryCommand>(); var handler = fixture.Create <DeleteItemCategoryCommandHandler>(); itemCategoryRepositoryMock.SetupFindByAsync(command.ItemCategoryId, itemCategoryMock.Object); itemRepositoryMock.SetupFindActiveByAsync(command.ItemCategoryId, storeItemMocks.Select(m => m.Object)); shoppingListRepositoryMock.SetupFindActiveByAsync(Enumerable.Empty <IShoppingList>()); transactionGeneratorMock.SetupGenerateAsync(transactionMock.Object); // Act var result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); itemCategoryMock.VerifyDeleteOnce(); shoppingListRepositoryMock.VerifyStoreAsyncNever(); foreach (var storeItemMock in storeItemMocks) { storeItemMock.VerifyDeleteOnce(); itemRepositoryMock.VerifyStoreAsyncOnce(storeItemMock.Object); } itemCategoryRepositoryMock.VerifyStoreAsyncOnce(itemCategoryMock.Object); transactionMock.VerifyCommitAsyncOnce(); } }
public async Task HandleAsync_WithItemOnShoppingLists_ShouldDeleteItemAndRemoveItFromActiveShoppingLists( List <ShoppingListMock> shoppingListMocks) { // Arrange var local = new LocalFixture(); var handler = local.CreateCommandHandler(); var command = local.CreateCommand(); TransactionMock transactionMock = new TransactionMock(); StoreItemMock storeItemMock = local.StoreItemMockFixture.Create(); local.ItemRepositoryMock.SetupFindByAsync(command.ItemId, storeItemMock.Object); local.ShoppingListRepositoryMock.SetupFindActiveByAsync(storeItemMock.Object.Id, shoppingListMocks.Select(m => m.Object)); local.TransactionGeneratorMock.SetupGenerateAsync(transactionMock.Object); // Act var result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); storeItemMock.VerifyDeleteOnce(); local.ItemRepositoryMock.VerifyStoreAsyncOnce(storeItemMock.Object); if (!shoppingListMocks.Any()) { local.ShoppingListRepositoryMock.VerifyStoreAsyncNever(); } else { foreach (var shoppingListMock in shoppingListMocks) { shoppingListMock.VerifyRemoveItemOnce(storeItemMock.Object.Id); local.ShoppingListRepositoryMock.VerifyStoreAsyncOnce(shoppingListMock.Object); } } transactionMock.VerifyCommitAsyncOnce(); } }
public async Task HandleAsync_WithNoItemsOfItemCategory_ShouldNotStoreAnyItemsAndDeleteItemCategory() { // Arrange var fixture = commonFixture.GetNewFixture(); ItemCategoryRepositoryMock itemCategoryRepositoryMock = new ItemCategoryRepositoryMock(fixture); ItemRepositoryMock itemRepositoryMock = new ItemRepositoryMock(fixture); ShoppingListRepositoryMock shoppingListRepositoryMock = new ShoppingListRepositoryMock(fixture); TransactionGeneratorMock transactionGeneratorMock = new TransactionGeneratorMock(fixture); ItemCategoryMock itemCategoryMock = itemCategoryMockFixtur.Create(); TransactionMock transactionMock = new TransactionMock(); var command = fixture.Create <DeleteItemCategoryCommand>(); var handler = fixture.Create <DeleteItemCategoryCommandHandler>(); itemCategoryRepositoryMock.SetupFindByAsync(command.ItemCategoryId, itemCategoryMock.Object); itemRepositoryMock.SetupFindActiveByAsync(command.ItemCategoryId, Enumerable.Empty <IStoreItem>()); transactionGeneratorMock.SetupGenerateAsync(transactionMock.Object); // Act var result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); itemCategoryMock.VerifyDeleteOnce(); shoppingListRepositoryMock.VerifyStoreAsyncNever(); itemRepositoryMock.VerifyStoreAsyncNever(); itemCategoryRepositoryMock.VerifyStoreAsyncOnce(itemCategoryMock.Object); transactionMock.VerifyCommitAsyncOnce(); } }