예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        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();
            }
        }
예제 #5
0
        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();
            }
        }