Exemplo n.º 1
0
        public override async Task <PagedList <Product> > Query(ListProductsByCategoryCommand command)
        {
            var includableQueryable = DbContext.Products
                                      .Include(o => o.Route).ThenInclude(o => o.AngularComponent)
                                      .Include(o => o.Images).ThenInclude(o => o.ImageSizeType)
                                      .Include(o => o.ProductDetails).ThenInclude(o => o.ProductDetailType)
                                      .Include(o => o.ProductDetails).ThenInclude(o => o.Characteristics).ThenInclude(o => o.Characteristic)
                                      .Include(o => o.ProductDetails).ThenInclude(o => o.Characteristics)
                                      .Include(o => o.Characteristics).ThenInclude(o => o.Characteristic)
                                      .Include(o => o.Characteristics);

            IQueryable <Product> queryable = null;

            if (command.CategoryId.HasValue)
            {
                queryable = includableQueryable.Where(o => o.CategoryId == command.CategoryId);
            }
            if (command.IsShowHomePage)
            {
                queryable = includableQueryable.Where(o => o.Characteristics.Any(i => i.Characteristic.Code == CharacteristicCodes.IsShowHomePage && i.Value == "true"));
            }

            var pagedList = await queryable.OrderByProductSorting(command.Sorting).ToPagedListAsync(command);

            var productCharacteristicIds = pagedList.Items.SelectMany(o => o.Characteristics).Select(o => o.Id);
            await DbContext.ProductCharacteristicTranslations.Where(o => productCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync();

            var productDetailCharacteristicIds = pagedList.Items.SelectMany(o => o.ProductDetails).SelectMany(o => o.Characteristics).Select(o => o.Id);
            await DbContext.ProductDetailCharacteristicTranslations.Where(o => productDetailCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync();

            var productImageCharacteristicIds = pagedList.Items.SelectMany(o => o.Images).SelectMany(o => o.Characteristics).Select(o => o.Id);
            await DbContext.ImageCharacteristicTranslations.Where(o => productImageCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync();

            return(pagedList);
        }
Exemplo n.º 2
0
        public void When_there_are_lots_of_products_Must_paginate()
        {
            // Arrangе

            var category = CreateCategory();

            Repeat(() => CreateProduct(category), 50);
            Db.SaveChanges();

            // Act

            var cmd    = new ListProductsByCategoryCommand(Db);
            var result = cmd.Execute(category.Id);

            // Assert

            AssertSuccess(result);
            Assert.AreEqual(50, result.Value.TotalCount, "Вернулось неправильное кол-во товаров в категории");
            Assert.AreEqual(25, result.Value.Count, "Возвратилось неправильное кол-во товаров первой страницы");

            // Act 2

            var result2 = cmd.Execute(category.Id, 30);

            // Assert 2

            AssertSuccess(result2);
            Assert.AreEqual(50, result2.Value.TotalCount, "Вернулось неправильное кол-во товаров в категории");
            Assert.AreEqual(20, result2.Value.Count, "Возвратилось неправильное кол-во товаров второй страницы");
        }
Exemplo n.º 3
0
        public override async Task <ActionResult <PagedList <ProductDto> > > Handle(ListProductsByCategoryCommand command)
        {
            var products = await _listProductsByCategoryQuery.Query(command);

            var productsDto = _mapper.Map(products, new PagedList <ProductDto>(), opt => opt.Items["WorkingLanguageId"] = command.LanguageId);

            return(Ok(productsDto));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> ListProductsByCategory(ListProductsByCategoryCommand listProductsByCategoryCommand)
        {
            // TODO: fix workingLanguageId
            listProductsByCategoryCommand.LanguageId = 1;
            var pagedProductsDtoResult = await QueryProcessor.GetQueryHandler <ListProductsByCategoryCommand, PagedList <ProductDto> >(listProductsByCategoryCommand);

            if (pagedProductsDtoResult.Failure)
            {
                return(BadRequest(pagedProductsDtoResult.ErrorMessages));
            }

            var pagedProductsDto = pagedProductsDtoResult.Object;

            return(Ok(pagedProductsDto));
        }
Exemplo n.º 5
0
        public async Task ShouldGetCategory()
        {
            // Arrange
            var listCategoriesCommand = new ListCategoriesCommand(1, WorkContext.WorkingLanguageId, true);
            var categoryId            = (await _listCategoriesQuery.Query(listCategoriesCommand)).Items
                                        .FirstOrDefault(o => o.Route.AngularComponent.Code == AngularComponents.ProductCategoryComponent).Id;
            var getCategoryCommand            = new GetCategoryCommand(7, WorkContext.WorkingLanguageId);
            var listProductsByCategoryCommand = new ListProductsByCategoryCommand(7, WorkContext.WorkingLanguageId, pageIndex: 1, pageSize: 24);

            // Act
            var categoryDto = (await _getCategoryQueryHandler.Handle(getCategoryCommand)).Object;
            var productsDto = (await _listProductsByCategoryQueryHandler.Handle(listProductsByCategoryCommand));

            // Assert
            Assert.IsNotNull(categoryDto);
            Assert.IsNotNull(productsDto);
        }
Exemplo n.º 6
0
        public void Must_list_products_only_by_specified_category()
        {
            // Arrange

            Repeat(() => CreateProduct(), 2);
            var category = CreateCategory();

            Repeat(() => CreateProduct(category), 2);
            Db.SaveChanges();

            // Act

            var cmd    = new ListProductsByCategoryCommand(Db);
            var result = cmd.Execute(category.Id);

            // Assert

            AssertSuccess(result);
            Assert.AreEqual(2, result.Value.Count, "Возвратилось неверное кол-во товаров");
            Assert.IsTrue(result.Value.All(p => p.CategoryId == category.Id), "Возвратились товары из другой категории");
        }
Exemplo n.º 7
0
        public void Must_list_products()
        {
            // Arrange

            var category = CreateCategory();

            Repeat(() => CreateProduct(category), 2);
            Db.SaveChanges();

            // Act

            var cmd    = new ListProductsByCategoryCommand(Db);
            var result = cmd.Execute(category.Id);

            // Assert

            AssertSuccess(result);
            Assert.IsTrue(result.Value.Any(), "Не возвратились продукты");
            Assert.AreEqual(2, result.Value.Count, "Возвратились не все продукты, либо врозвратились лишние");
            Assert.IsTrue(result.Value.All(p => p.Params.Any()), "Не возвратились параметры продуктов");
        }
Exemplo n.º 8
0
        public void ReturnCustomMessage_WhenUserIsNotLogged()
        {
            // Arange
            var contextMock            = new Mock <IStoreContext>();
            var writerMock             = new Mock <IWriter>();
            var readerMock             = new Mock <IReader>();
            var productServiceMock     = new Mock <IProductService>();
            var userServiceMock        = new Mock <IUserService>();
            var loggedUserProviderMock = new Mock <ILoggedUserProvider>();

            userServiceMock.Setup(m => m.IsUserLogged()).Returns(false);

            var command = new ListProductsByCategoryCommand(contextMock.Object, writerMock.Object,
                                                            readerMock.Object, productServiceMock.Object, userServiceMock.Object,
                                                            loggedUserProviderMock.Object);

            string expectedResult = "You must Login First!";
            // Act
            var actualResul = command.Execute();

            // Assert
            Assert.AreEqual(expectedResult, actualResul);
        }