Example #1
0
        public async Task CanDoCRUDandSearch()
        {
            // Read non-existing item
            var getByIdsResult = await CustomerReviewService.GetByIdsAsync(new[] { CustomerReviewId });

            Assert.NotNull(getByIdsResult);
            Assert.Empty(getByIdsResult);

            // Create
            var item = new CustomerReview
            {
                Id            = CustomerReviewId,
                ProductId     = ProductId,
                CreatedDate   = DateTime.Now,
                CreatedBy     = "initial data seed",
                CustomerName  = "John Doe",
                ReviewContent = "Liked that"
            };

            await CustomerReviewService.SaveCustomerReviewsAsync(new[] { item });

            _mockCustomerReviewRepository.Setup(ss => ss.GetByIdsAsync(new[] { CustomerReviewId }))
            .ReturnsAsync(new[] { new CustomerReviewEntity().FromModel(item, new PrimaryKeyResolvingMap()) });

            getByIdsResult = await CustomerReviewService.GetByIdsAsync(new[] { CustomerReviewId });

            Assert.Single(getByIdsResult);

            item = getByIdsResult[0];
            Assert.Equal(CustomerReviewId, item.Id);

            // Update
            var updatedContent = "Updated content";

            Assert.NotEqual(updatedContent, item.ReviewContent);

            item.ReviewContent = updatedContent;
            await CustomerReviewService.SaveCustomerReviewsAsync(new[] { item });

            getByIdsResult = await CustomerReviewService.GetByIdsAsync(new[] { CustomerReviewId });

            Assert.Single(getByIdsResult);

            item = getByIdsResult[0];
            Assert.Equal(updatedContent, item.ReviewContent);

            // Search
            var mockReviews = new[] { new CustomerReviewEntity().FromModel(item, new PrimaryKeyResolvingMap()) }.AsQueryable().BuildMock();

            _mockCustomerReviewRepository.SetupGet(x => x.CustomerReviews).Returns(mockReviews.Object);

            var criteria = new CustomerReviewSearchCriteria {
                ProductIds = new[] { ProductId }
            };
            var cacheKey = CacheKey.With(CustomerReviewSearchService.GetType(), nameof(CustomerReviewSearchService.SearchCustomerReviewsAsync), criteria.GetCacheKey());

            _platformMemoryCacheMock.Setup(pmc => pmc.CreateEntry(cacheKey)).Returns(_cacheEntryMock.Object);

            var searchResult = await CustomerReviewSearchService.SearchCustomerReviewsAsync(criteria);

            Assert.NotNull(searchResult);
            Assert.Equal(1, searchResult.TotalCount);
            Assert.Single(searchResult.Results);

            // Delete
            _mockCustomerReviewRepository.Setup(ss => ss.GetByIdsAsync(new[] { CustomerReviewId }))
            .ReturnsAsync(new CustomerReviewEntity[0]);

            await CanDeleteCustomerReviews();
        }