Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Testing
- {
- public class NewsController_LatestNews
- {
- [Theory]
- [AutoData]
- public void Should_be_news_items_ordered_by_date_descending(IEnumerable<NewsResultItem> newsResultItems)
- {
- var searchContext = Substitute.For<IProviderSearchContext>();
- var queryable = new LuceneProviderQueryableStub(enumerable);
- searchContext.GetQueryable().Returns(queryable);
- var newsController = new NewsController(indexName => searchContext);
- var actual = newsController.LatestNews(5).Model;
- Assert.IsGreater(actual.First().Date, actual.Last().Date);
- }
- }
- public class LuceneProviderQueryableStub<TElement> : IOrderedQueryable<TElement>, IOrderedQueryable, IQueryProvider
- {
- private readonly EnumerableQuery<TElement> innerQueryable;
- public Type ElementType { get { return ((IQueryable)innerQueryable).ElementType; } }
- public Expression Expression { get { return ((IQueryable)innerQueryable).Expression; } }
- public IQueryProvider Provider { get { return this; } }
- public LuceneProviderQueryableStub(IEnumerable<TElement> enumerable)
- {
- innerQueryable = new EnumerableQuery<TElement>(enumerable);
- }
- public LuceneProviderQueryableStub(Expression expression)
- {
- innerQueryable = new EnumerableQuery<TElement>(expression);
- }
- public IQueryable CreateQuery(Expression expression)
- {
- return new LuceneProviderQueryableStub<TElement>((IEnumerable<TElement>)((IQueryProvider)innerQueryable).CreateQuery(expression));
- }
- public IQueryable<TElement1> CreateQuery<TElement1>(Expression expression)
- {
- return (IQueryable<TElement1>)new LuceneProviderQueryableStub<TElement>((IEnumerable<TElement>)((IQueryProvider)innerQueryable).CreateQuery(expression));
- }
- public object Execute(Expression expression)
- {
- throw new NotImplementedException();
- }
- public TResult Execute<TResult>(Expression expression)
- {
- var items = this.ToArray();
- object results = new SearchResults<TElement>(items.Select(s => new SearchHit<TElement>(0, s)), 0);
- return (TResult)results;
- }
- public IEnumerator<TElement> GetEnumerator()
- {
- return ((IEnumerable<TElement>)innerQueryable).GetEnumerator();
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- }
- public class NewsController
- {
- private readonly Func<string, IProviderSearchContext> searchContextFactory;
- public NewsController(Func<string, IProviderSearchContext> searchContextFactory)
- {
- this.searchContextFactory = searchContextFactory;
- }
- public ViewResult LatestNews(int count)
- {
- using (var searchContext = searchContextFactory("news_index"))
- {
- var newsResults = searchContext.GetQueryable<NewsResultItem>().OrderByDescending(x => x.Date).Take(count).GetResults();
- return View("~/Views/LatestNews.cshtml", newsResults);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement