Beispiel #1
0
        public IList <NewsItemViewModel> GetManyNewsItemViewModel(string categoryId)
        {
            var result      = new List <NewsItemViewModel>();
            var categoryIds = new List <string>();

            var childrenCategory = _menuService.GetRecursionAllChildren(categoryId);

            categoryIds.Add(categoryId);
            categoryIds.AddRange(childrenCategory.Select(menuItem => menuItem.Id));

            var filterNewsItemParameters = new FilterNewsItemParameters()
            {
                CategoryIds = categoryIds
            };

            foreach (var newsItem in _newsService.GetNewsItem(filterNewsItemParameters))
            {
                if (newsItem == null)
                {
                    continue;
                }

                var newsItemViewModel = GetNewsItemViewModel(newsItem);

                if (newsItemViewModel == null)
                {
                    continue;
                }

                result.Add(newsItemViewModel);
            }

            return(result);
        }
Beispiel #2
0
        public void GetNewsItem_FilterByNotExistCategories_ReturnEmptyCollection()
        {
            DateTime data = new DateTime(2019, 01, 01, 12, 00, 00);

            NewsItem newsItem1 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = null,
                Description    = "Description1",
                Files          = null,
                Header         = "Header1",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem2 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = null,
                Description    = "Description2",
                Files          = null,
                Header         = "Header2",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem3 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = null,
                Description    = "Description3",
                Files          = null,
                Header         = "Header3",
                CreatedDate    = data,
                LastChangeDate = data
            };

            Mock <IRepository <NewsItem> > mock = new Mock <IRepository <NewsItem> >();

            mock.Setup(m => m.GetAll()).Returns(new List <NewsItem>()
            {
                newsItem1, newsItem2, newsItem3
            });
            var filterParams = new FilterNewsItemParameters()
            {
                CategoryIds = new List <string>()
                {
                    Guid.NewGuid().ToString()
                }
            };

            NewsService     newsService = new NewsService(mock.Object);
            List <NewsItem> result      = newsService.GetNewsItem(filterParams).ToList();

            Assert.IsTrue(result != null);
            Assert.IsTrue(result.Count == 0);
        }
Beispiel #3
0
        /// <summary>
        /// Поиск новостей
        /// </summary>
        /// <remarks> Поиск по дате осуществляется только в период с<paramref name= "startDate" />
        /// по < paramref name= "endDate" /></remarks>
        /// <param name="authorId">Автор</param>
        /// <param name="category">Категория</param>
        /// <param name="startDate">С даты</param>
        /// <param name="endDate">По дату</param>
        public IEnumerable <NewsItem> GetNewsItem(FilterNewsItemParameters filterNewsItemParameters)
        {
            var category   = filterNewsItemParameters.CategoryIds.FirstOrDefault();
            var categories = filterNewsItemParameters.CategoryIds.ToList();
            var authorId   = filterNewsItemParameters.AuthorId;
            var startDate  = filterNewsItemParameters.StartDate;
            var endDate    = filterNewsItemParameters.EndDate;
            var isNewest   = filterNewsItemParameters.IsNewest;

            var collection = _newsRepository.GetAll()
                             .Where(a => category == null || categories.Contains(a.Category))
                             .Where(a => authorId == null || a.AutorFio == authorId || a.LastChangeAuthor == authorId)
                             .Where(a => startDate == null || a.LastChangeDate >= startDate)
                             .Where(a => endDate == null || a.LastChangeDate <= endDate)
                             .SortByNewestOrOldest(isNewest, item => item.LastChangeDate);

            return(collection.AsQueryable());
        }
Beispiel #4
0
        private IList <NewsItemViewModel> GetManyNewsItemViewModel(string categoryId, int skip, int take)
        {
            var categoryIds   = new List <string>();
            var pinnedNewsIds = new List <string>();


            var childrenCategory = _menuService.GetRecursionAllChildren(categoryId);
            var pinnedNews       = _pinNewsService.GetAllPinnedNewsByCategory(categoryId);

            categoryIds.Add(categoryId);
            categoryIds.AddRange(childrenCategory.Select(menuItem => menuItem.Id));
            pinnedNewsIds.AddRange(pinnedNews.Select(p => p.NewsItemId));

            var filterNewsItemParameters = new FilterNewsItemParameters()
            {
                CategoryIds   = categoryIds,
                PinnedNewsIds = pinnedNewsIds,
                Skip          = skip,
                Take          = take
            };
            var newsCollection = _newsService.GetNewsItem(filterNewsItemParameters);

            return(GetNewsItemsViewModel(newsCollection));
        }
Beispiel #5
0
        /// <summary>
        /// Фильтр для поиска среди новостей
        /// </summary>
        /// <param name="filterNewsItemParameters">параметры для фильтра, может быть null</param>
        /// <returns></returns>
        public IEnumerable <NewsItem> GetFiltered(FilterNewsItemParameters filterNewsItemParameters)
        {
            var category   = filterNewsItemParameters?.CategoryIds?.FirstOrDefault() ?? null;
            var categories = filterNewsItemParameters?.CategoryIds.ToList() ?? null;
            var authorId   = filterNewsItemParameters?.AuthorId;
            var startDate  = filterNewsItemParameters?.StartDate;
            var endDate    = filterNewsItemParameters?.EndDate;
            var isNewest   = filterNewsItemParameters?.IsNewest;
            var pinnedNews = filterNewsItemParameters?.PinnedNewsIds;
            var skip       = filterNewsItemParameters?.Skip ?? 0;
            var take       = filterNewsItemParameters?.Take ?? 5;
            var authorFio  = filterNewsItemParameters.AuthorFio;

            var data = GetAllQueryable;

            if (category != null)
            {
                data = data.Where(d => categories.Contains(d.Category));
            }
            if (isNewest == null)                                     //по-умолчанию, сортировка от последнего к первому элементу
            {
                data = data.OrderByDescending(d => d.LastChangeDate); //.ThenByDescending(d => d.CreatedDate);
            }
            else//но её можно задать явно
            {
                data = isNewest.Value ? data.OrderByDescending(d => d.LastChangeDate) : data.OrderBy(d => d.LastChangeDate);
            }

            if (authorId != null)
            {
                data = data.Where(d => d.AuthorId == authorId || d.LastChangeAuthorId == authorId);
            }
            if (authorFio != null)
            {
                data = data.Where(d => d.AuthorFio == authorFio || d.LastChangeAuthorFio == authorFio);
            }


            if (startDate != null && startDate != DateTime.MinValue)
            {
                data = data.Where(d => d.CreatedDate >= startDate);
            }

            if (endDate != null && endDate != DateTime.MinValue)
            {
                data = data.Where(d => d.CreatedDate >= endDate);
            }
            if (pinnedNews != null && pinnedNews.Any())
            {
                data = data.Where(d => pinnedNews.Contains(d.Id));
            }



            if (skip != 0)
            {
                data = data.Skip(skip);
            }

            if (take != 0)
            {
                data = data.Take(take);
            }
            Console.WriteLine(data.ToQueryString());
            return(data.Include(c => c.Files));
        }
Beispiel #6
0
 /// <summary>
 /// Поиск новостей
 /// </summary>
 public IEnumerable <NewsItem> GetNewsItem(FilterNewsItemParameters filterNewsItemParameters) =>
 _newsRepository.GetFiltered(filterNewsItemParameters);
Beispiel #7
0
        public void GetNewsItem_ItemWithDifferentCategorySelectNullCategory_ReturnAllNewsItem()
        {
            string guidSubCategory1 = Guid.NewGuid().ToString();
            string guidSubCategory2 = Guid.NewGuid().ToString();
            string guidSubCategory3 = Guid.NewGuid().ToString();

            DateTime data = new DateTime(2019, 01, 01, 12, 00, 00);

            NewsItem newsItem1 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory1,
                Description    = "Description1",
                Files          = null,
                Header         = "Header1",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem2 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory1,
                Description    = "Description2",
                Files          = null,
                Header         = "Header2",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem3 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory2,
                Description    = "Description3",
                Files          = null,
                Header         = "Header3",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem4 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory3,
                Description    = "Description4",
                Files          = null,
                Header         = "Header4",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem5 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = null,
                Description    = "Description4",
                Files          = null,
                Header         = "Header4",
                CreatedDate    = data,
                LastChangeDate = data
            };

            Mock <IRepository <NewsItem> > mock = new Mock <IRepository <NewsItem> >();

            mock.Setup(m => m.GetAll()).Returns(new List <NewsItem>()
            {
                newsItem1, newsItem2, newsItem3, newsItem4, newsItem5
            });

            var filterParams = new FilterNewsItemParameters()
            {
                CategoryIds = new List <string>()
            };

            NewsService     newsService = new NewsService(mock.Object);
            List <NewsItem> result      = newsService.GetNewsItem(filterParams).ToList();

            Assert.IsTrue(result != null);
            Assert.IsTrue(result.Count == 5);
        }
Beispiel #8
0
        public void GetNewsItem_FilterManyItemFromSubCategory_ReturnManyItemsOnlySubcategory()
        {
            string guidSubCategory1 = Guid.NewGuid().ToString();
            string guidSubCategory2 = Guid.NewGuid().ToString();
            string guidSubCategory3 = Guid.NewGuid().ToString();

            DateTime data = new DateTime(2019, 01, 01, 12, 00, 00);

            NewsItem newsItem1 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory1,
                Description    = "Description1",
                Files          = null,
                Header         = "Header1",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem2 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory1,
                Description    = "Description2",
                Files          = null,
                Header         = "Header2",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem3 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory2,
                Description    = "Description3",
                Files          = null,
                Header         = "Header3",
                CreatedDate    = data,
                LastChangeDate = data
            };
            NewsItem newsItem4 = new NewsItem()
            {
                Id             = Guid.NewGuid().ToString(),
                Category       = guidSubCategory3,
                Description    = "Description4",
                Files          = null,
                Header         = "Header4",
                CreatedDate    = data,
                LastChangeDate = data
            };

            Mock <NewsItemRepository> mock = new Mock <NewsItemRepository>();

            mock.Setup(m => m.GetAll).Returns(new List <NewsItem>()
            {
                newsItem1, newsItem2, newsItem3, newsItem4
            });

            var filterParams = new FilterNewsItemParameters()
            {
                CategoryIds = new List <string>()
                {
                    guidSubCategory1, guidSubCategory2
                }
            };

            NewsService     newsService = new NewsService(mock.Object);
            List <NewsItem> result      = newsService.GetNewsItem(filterParams).ToList();

            Assert.IsTrue(result != null);
            Assert.IsTrue(result.Count == 3);
        }