public async Task HandleAsync_WithActualId_ShouldAddItemToList() { // Arrange var local = new LocalFixture(); var handler = local.CreateCommandHandler(); var command = local.CreateCommandWithActualId(); ShoppingListMock listMock = local.ShoppingListMockFixture.Create(); local.ShoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, listMock.Object); // Act bool result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); local.ShoppingListRepositoryMock.VerifyStoreAsyncOnce(listMock.Object); local.AddItemToShoppingListServiceMock.VerifyAddItemToShoppingListOnce( listMock.Object, new ItemId(command.ItemId.ActualId.Value), command.SectionId, command.Quantity); } }
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_WithActualId_ShouldPutItemInBasket() { // Arrange var local = new LocalFixture(); var handler = local.CreateCommandHandler(); var command = local.CreateCommandWithActualId(); ShoppingListMock listMock = local.ShoppingListMockFixture.Create(); local.ShoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, listMock.Object); // Act bool result = await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { result.Should().BeTrue(); listMock.VerifyPutItemInBasketOnce(new ItemId(command.OfflineTolerantItemId.ActualId.Value)); local.ShoppingListRepositoryMock.VerifyStoreAsyncOnce(listMock.Object); } }
public async Task HandleAsync_WithInvalidActualItemId_ShouldThrowDomainException() { // Arrange var local = new LocalFixture(); var handler = local.CreateCommandHandler(); var command = local.CreateCommandWithActualId(); ShoppingListMock listMock = local.ShoppingListMockFixture.Create(); local.ShoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, listMock.Object); local.ItemRepositoryMock.SetupFindByAsync(new ItemId(command.OfflineTolerantItemId.ActualId.Value), null); // Act Func <Task> function = async() => await handler.HandleAsync(command, default); // Assert using (new AssertionScope()) { (await function.Should().ThrowAsync <DomainException>()) .Where(e => e.Reason.ErrorCode == ErrorReasonCode.ItemNotFound); } }