public async Task ConvertAsync_WithValidData_ShouldConvertToReadModel(IShoppingList list, IStore store,
                                                                              IEnumerable <IStoreItem> items, IEnumerable <IItemCategory> itemCategories,
                                                                              IEnumerable <IManufacturer> manufacturers, ShoppingListReadModel expected)
        {
            // Arrange
            var fixture                    = commonFixture.GetNewFixture();
            var storeRepositoryMock        = new StoreRepositoryMock(fixture);
            var itemRepositoryMock         = new ItemRepositoryMock(fixture);
            var itemCategoryRepositoryMock = new ItemCategoryRepositoryMock(fixture);
            var manufacturerRepositoryMock = new ManufacturerRepositoryMock(fixture);

            var service = fixture.Create <ShoppingListReadModelConversionService>();

            storeRepositoryMock.SetupFindByAsync(store.Id, store);
            itemRepositoryMock.SetupFindByAsync(items.Select(i => i.Id), items);
            itemCategoryRepositoryMock.SetupFindByAsync(itemCategories.Select(cat => cat.Id), itemCategories);
            manufacturerRepositoryMock.SetupFindByAsync(manufacturers.Select(m => m.Id), manufacturers);

            // Act
            var result = await service.ConvertAsync(list, default);

            // Assert
            using (new AssertionScope())
            {
                result.Should().BeEquivalentTo(expected);
            }
        }
Example #2
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();

                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);

                ItemRepositoryMock   = new ItemRepositoryMock(Fixture);
                StoreItemFactoryMock = new StoreItemFactoryMock(Fixture);
                AvailabilityValidationServiceMock = new AvailabilityValidationServiceMock(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);
            }
Example #6
0
        public async Task Should_return_single_item_by_identity()
        {
            // Arrange
            Item   expectedResult = MockDataItems[1];
            string id             = expectedResult.Id;

            ItemRepositoryMock.Setup(x => x.GetItemByIdAsync(id, default(CancellationToken))).ReturnsAsync(expectedResult);

            // Act
            Item resultItem = await ServiceUnderTest.GetItemByIdAsync(id, default(CancellationToken));

            // Assert
            Assert.Same(expectedResult, resultItem);
        }
Example #7
0
        public async Task Should_return_null_when_no_author_found()
        {
            // Arrange
            string             author       = Guid.NewGuid().ToString();
            IEnumerable <Item> expectedData = MockDataItems.Where(i => i.Author == author);

            ItemRepositoryMock.Setup(x => x.GetItemsByAuthorAsync(author, default(CancellationToken))).ReturnsAsync(expectedData);

            // Act
            IEnumerable <Item> resultItems = await ServiceUnderTest.GetItemsByAuthorAsync(author, default(CancellationToken));

            // Assert
            Assert.Null(resultItems);
        }
Example #8
0
        public async Task Should_return_items_by_author()
        {
            // Arrange
            string             author       = MockDataItems[2].Author;
            IEnumerable <Item> expectedData = MockDataItems.Where(i => i.Author == author);

            ItemRepositoryMock.Setup(x => x.GetItemsByAuthorAsync(author, default(CancellationToken))).ReturnsAsync(expectedData);

            // Act
            IEnumerable <Item> resultItems = await ServiceUnderTest.GetItemsByAuthorAsync(author, default(CancellationToken));

            // Assert
            Assert.Same(expectedData, resultItems);
        }
Example #9
0
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

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

                ItemRepositoryMock   = new ItemRepositoryMock(Fixture);
                StoreItemFactoryMock = new StoreItemFactoryMock(Fixture);
                ItemCategoryValidationServiceMock = new ItemCategoryValidationServiceMock(Fixture);
                ManufacturerValidationServiceMock = new ManufacturerValidationServiceMock(Fixture);
                AvailabilityValidationServiceMock = new AvailabilityValidationServiceMock(Fixture);
            }
Example #10
0
        public async Task Should_fail_update_missing_identity()
        {
            // Arrange
            Item newItem = new Item {
                Id = string.Empty, Author = "Jane Smith", HideAuthor = true, Title = "Adding new items is too simple", Description = "I think it needs to have more clicks to add an item", Votes = -7
            };

            ItemRepositoryMock.Setup(x => x.UpdateItemAsync(newItem, default(CancellationToken))).ReturnsAsync(newItem.Id);

            // Act
            ArgumentNullException exception = await Assert.ThrowsAsync <ArgumentNullException>(() => ServiceUnderTest.UpdateItemAsync(newItem, default(CancellationToken)));

            // Assert
            Assert.Equal(nameof(newItem.Id), exception.ParamName);
        }
Example #11
0
        public async Task Should_return_null_when_no_match()
        {
            // Arrange
            Item badResult = new Item {
                Id = Guid.NewGuid().ToString(), Author = "Bob Marley", HideAuthor = true, Title = "No women", Description = "No cry", Votes = 2
            };

            ItemRepositoryMock.Setup(x => x.GetItemByIdAsync(badResult.Id, default(CancellationToken))).ReturnsAsync(MockDataItems.FirstOrDefault(i => i.Id == badResult.Id));

            // Act
            Item resultItem = await ServiceUnderTest.GetItemByIdAsync(badResult.Id, default(CancellationToken));

            // Assert
            Assert.Null(resultItem);
        }
Example #12
0
        public async Task Should_update_an_existing_item()
        {
            // Arrange
            Item newItem = new Item {
                Id = Guid.NewGuid().ToString(), Author = "Jane Smith", HideAuthor = true, Title = "Adding new items is too simple", Description = "I think it needs to have more clicks to add an item", Votes = -7
            };

            ItemRepositoryMock.Setup(x => x.UpdateItemAsync(newItem, default(CancellationToken))).ReturnsAsync(newItem.Id);
            ItemRepositoryMock.Setup(x => x.GetItemByIdAsync(newItem.Id, default(CancellationToken))).ReturnsAsync(newItem);

            // Act
            Item resultItem = await ServiceUnderTest.UpdateItemAsync(newItem, default(CancellationToken));

            // Assert
            Assert.Equal(newItem, resultItem);
        }
Example #13
0
        public async Task Should_create_new_item()
        {
            // Arrange
            Item newItem = new Item {
                Id = Guid.NewGuid().ToString(), Author = "J. K. Rowling", HideAuthor = false, Title = "Fly Phising", Description = "I was wondering if you could tell if you have a book...", Votes = 0
            };

            ItemRepositoryMock.Setup(x => x.CreateNewItemAsync(newItem, default(CancellationToken))).ReturnsAsync(newItem.Id);
            ItemRepositoryMock.Setup(x => x.GetItemByIdAsync(newItem.Id, default(CancellationToken))).ReturnsAsync(newItem);

            // Act
            Item resultItem = await ServiceUnderTest.CreateItemAsync(newItem, default(CancellationToken));

            // Assert
            Assert.Same(newItem, resultItem);
        }
            public LocalFixture()
            {
                Fixture = CommonFixture.GetNewFixture();

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

                ShoppingListSectionFactoryMock = new ShoppingListSectionFactoryMock(Fixture);
                StoreRepositoryMock            = new StoreRepositoryMock(Fixture);
                ItemRepositoryMock             = new ItemRepositoryMock(Fixture);
                ShoppingListItemFactoryMock    = new ShoppingListItemFactoryMock(Fixture);
            }
Example #15
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();
            }
        }
Example #16
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();
            }
        }