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); }
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); }
/// <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()); }
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)); }
/// <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)); }
/// <summary> /// Поиск новостей /// </summary> public IEnumerable <NewsItem> GetNewsItem(FilterNewsItemParameters filterNewsItemParameters) => _newsRepository.GetFiltered(filterNewsItemParameters);
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); }
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); }