Ejemplo n.º 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();
            }
        }
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

                ShoppingListMockFixture = new ShoppingListMockFixture(CommonFixture, new ShoppingListFixture(CommonFixture));

                ShoppingListRepositoryMock       = new ShoppingListRepositoryMock(Fixture);
                AddItemToShoppingListServiceMock = new AddItemToShoppingListServiceMock(Fixture);
            }
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

                StoreItemFixture        = new StoreItemFixture(new StoreItemAvailabilityFixture(CommonFixture), CommonFixture);
                ShoppingListMockFixture = new ShoppingListMockFixture(CommonFixture, new ShoppingListFixture(CommonFixture));

                ShoppingListRepositoryMock = new ShoppingListRepositoryMock(Fixture);
                ItemRepositoryMock         = new ItemRepositoryMock(Fixture);
            }
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

                StoreItemFixture     = new StoreItemFixture(new StoreItemAvailabilityFixture(CommonFixture), CommonFixture);
                StoreItemMockFixture = new StoreItemMockFixture(CommonFixture, StoreItemFixture);

                ShoppingListRepositoryMock = new ShoppingListRepositoryMock(Fixture);
                ItemRepositoryMock         = new ItemRepositoryMock(Fixture);
                TransactionGeneratorMock   = new TransactionGeneratorMock(Fixture);
            }
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

                ShoppingListItemFixture      = new ShoppingListItemFixture(CommonFixture);
                ShoppingListFixture          = new ShoppingListFixture(CommonFixture);
                ShoppingListMockFixture      = new ShoppingListMockFixture(CommonFixture, ShoppingListFixture);
                StoreItemAvailabilityFixture = new StoreItemAvailabilityFixture(CommonFixture);
                StoreItemFixture             = new StoreItemFixture(StoreItemAvailabilityFixture, CommonFixture);

                ShoppingListRepositoryMock       = new ShoppingListRepositoryMock(Fixture);
                AddItemToShoppingListServiceMock = new AddItemToShoppingListServiceMock(Fixture);
            }
Ejemplo n.º 6
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_WithInvalidShoppingListId_ShouldThrowDomainException()
        {
            // Arrange
            var fixture = commonFixture.GetNewFixture();

            ShoppingListRepositoryMock shoppingListRepositoryMock = new ShoppingListRepositoryMock(fixture);

            var command = fixture.Create <FinishShoppingListCommand>();
            var handler = fixture.Create <FinishShoppingListCommandHandler>();

            shoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, 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.ShoppingListNotFound);
            }
        }
        public async Task HandleAsync_WithValidData_ShouldFinishShoppingList()
        {
            // Arrange
            var fixture = commonFixture.GetNewFixture();

            TransactionGeneratorMock   transactionGeneratorMock   = new TransactionGeneratorMock(fixture);
            ShoppingListRepositoryMock shoppingListRepositoryMock = new ShoppingListRepositoryMock(fixture);
            Mock <ITransaction>        transactionMock            = new Mock <ITransaction>();

            ShoppingListMock listMock          = shoppingListMockFixture.Create();
            ShoppingListMock remainingListMock = shoppingListMockFixture.Create();

            var command = fixture.Create <FinishShoppingListCommand>();
            var handler = fixture.Create <FinishShoppingListCommandHandler>();

            listMock.SetupFinish(command.CompletionDate, remainingListMock.Object);

            shoppingListRepositoryMock.SetupFindByAsync(command.ShoppingListId, listMock.Object);
            transactionGeneratorMock.SetupGenerateAsync(transactionMock.Object);

            // Act
            bool result = await handler.HandleAsync(command, default);

            // Assert
            using (new AssertionScope())
            {
                result.Should().BeTrue();
                listMock.VerifyFinishOnce(command.CompletionDate);
                transactionGeneratorMock.VerifyGenerateAsyncOnce();
                shoppingListRepositoryMock.VerifyStoreAsyncOnce(listMock.Object);
                shoppingListRepositoryMock.VerifyStoreAsyncOnce(remainingListMock.Object);
                transactionMock.Verify(
                    i => i.CommitAsync(
                        It.IsAny <CancellationToken>()),
                    Times.Once);
            }
        }
Ejemplo n.º 9
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();
            }
        }