public RecentPosts ( int pageNumber, int pageSize, int categoryId, System.DateTime startDate, System.DateTime endDate ) : IEnumerable |
||
pageNumber | int | |
pageSize | int | |
categoryId | int | |
startDate | System.DateTime | |
endDate | System.DateTime | |
return | IEnumerable |
public IEnumerable<PostViewModel> RecentPosts(int pageNumber, int pageSize, int? categoryId, DateTime? startDate, DateTime? endDate)
{
Condition.Requires(pageNumber, "pageNumber").IsGreaterOrEqual(0);
Condition.Requires(pageSize, "pageSize").IsLessOrEqual(ServiceConstants.MaximumPageSize+1);
Condition.Requires(pageSize, "pageSize").IsGreaterThan(0);
Post[] posts = null;
using(IUnitOfWork unitOfWork = _unitOfWorkFactory.Create())
{
unitOfWork.Execute(() =>
{
IRepository<Post> repository = unitOfWork.GetRepository<Post>();
IQueryable<Post> query = repository.AllIncluding(x => x.Categories, x => x.Author);
if (categoryId.HasValue)
{
query = query.Where(x => x.Categories.Any(c => c.CategoryID == categoryId.Value));
}
if (startDate.HasValue)
{
query = query.Where(x => x.PostedAt >= startDate.Value);
}
if (endDate.HasValue)
{
query = query.Where(x => x.PostedAt <= endDate.Value);
}
posts = query
.OrderByDescending(x => x.PostedAt)
.Skip(pageNumber*pageSize)
.Take(pageSize+1)
.ToArray();
});
}
return posts.Select(x => _postMapper.Map(x)).ToArray();
}
public void RecentPostsBeforeEndDate() { // Arrange PostViewModel mappedPost1 = new PostViewModel { PostID = 1 }; PostsService service = new PostsService(_unitOfWorkFactory, _mapper); _mapper.Stub(x => x.Map(_post1)).Return(mappedPost1); // Act IEnumerable<PostViewModel> models = service.RecentPosts(0, 10, null, null, DateTime.Now.Subtract(TimeSpan.FromDays(1))); // Assert Assert.That(models.First(), Is.EqualTo(mappedPost1)); Assert.That(models.Count(), Is.EqualTo(1)); }