Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. namespace Testing
  2. {
  3. public class NewsController_LatestNews
  4. {
  5. [Theory]
  6. [AutoData]
  7. public void Should_be_news_items_ordered_by_date_descending(IEnumerable<NewsResultItem> newsResultItems)
  8. {
  9. var searchContext = Substitute.For<IProviderSearchContext>();
  10. var queryable = new LuceneProviderQueryableStub(enumerable);
  11. searchContext.GetQueryable().Returns(queryable);
  12. var newsController = new NewsController(indexName => searchContext);
  13.  
  14. var actual = newsController.LatestNews(5).Model;
  15.  
  16. Assert.IsGreater(actual.First().Date, actual.Last().Date);
  17. }
  18. }
  19.  
  20. public class LuceneProviderQueryableStub<TElement> : IOrderedQueryable<TElement>, IOrderedQueryable, IQueryProvider
  21. {
  22. private readonly EnumerableQuery<TElement> innerQueryable;
  23.  
  24. public Type ElementType { get { return ((IQueryable)innerQueryable).ElementType; } }
  25.  
  26. public Expression Expression { get { return ((IQueryable)innerQueryable).Expression; } }
  27.  
  28. public IQueryProvider Provider { get { return this; } }
  29.  
  30. public LuceneProviderQueryableStub(IEnumerable<TElement> enumerable)
  31. {
  32. innerQueryable = new EnumerableQuery<TElement>(enumerable);
  33. }
  34.  
  35. public LuceneProviderQueryableStub(Expression expression)
  36. {
  37. innerQueryable = new EnumerableQuery<TElement>(expression);
  38. }
  39.  
  40. public IQueryable CreateQuery(Expression expression)
  41. {
  42. return new LuceneProviderQueryableStub<TElement>((IEnumerable<TElement>)((IQueryProvider)innerQueryable).CreateQuery(expression));
  43. }
  44.  
  45. public IQueryable<TElement1> CreateQuery<TElement1>(Expression expression)
  46. {
  47. return (IQueryable<TElement1>)new LuceneProviderQueryableStub<TElement>((IEnumerable<TElement>)((IQueryProvider)innerQueryable).CreateQuery(expression));
  48. }
  49.  
  50. public object Execute(Expression expression)
  51. {
  52. throw new NotImplementedException();
  53. }
  54.  
  55. public TResult Execute<TResult>(Expression expression)
  56. {
  57. var items = this.ToArray();
  58. object results = new SearchResults<TElement>(items.Select(s => new SearchHit<TElement>(0, s)), 0);
  59. return (TResult)results;
  60. }
  61.  
  62. public IEnumerator<TElement> GetEnumerator()
  63. {
  64. return ((IEnumerable<TElement>)innerQueryable).GetEnumerator();
  65. }
  66.  
  67. IEnumerator IEnumerable.GetEnumerator()
  68. {
  69. return GetEnumerator();
  70. }
  71. }
  72.  
  73. public class NewsController
  74. {
  75. private readonly Func<string, IProviderSearchContext> searchContextFactory;
  76.  
  77. public NewsController(Func<string, IProviderSearchContext> searchContextFactory)
  78. {
  79. this.searchContextFactory = searchContextFactory;
  80. }
  81.  
  82. public ViewResult LatestNews(int count)
  83. {
  84. using (var searchContext = searchContextFactory("news_index"))
  85. {
  86. var newsResults = searchContext.GetQueryable<NewsResultItem>().OrderByDescending(x => x.Date).Take(count).GetResults();
  87. return View("~/Views/LatestNews.cshtml", newsResults);
  88. }
  89. }
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement