public void Ctor_HasEmptyTypes()
		{
			// arrange
			var query = new SearchErrorLogQuery();
			
			// assert
			Assert.That(query.Types, Is.Not.Null);
		}
		public void Ctor_SetsQuery()
		{
			// arrange
			var query = new SearchErrorLogQuery();

			// act
			var args = new ErrorLogSearchEventArgs(query);

			// assert
			Assert.That(args.Query, Is.EqualTo(query));
		}
        public void OnFilterApplied_ShouldDisplaySearchResult()
        {
            // arrange
            var presenter = BuildPresenter();
            var filter = new SearchErrorLogQuery();
            var args = new ErrorLogSearchEventArgs(filter);
            var searchResult = new List<ErrorLog>();

            _repository.Setup(x => x.GetWithFilter(filter)).Returns(searchResult);

            // act
            _view.Raise(x => x.OnFilterApplied += null, args);

            // assert
            _view.Verify(x => x.DisplaySearchResult(searchResult), Times.Once());
        }
        public IList<ErrorLog> GetWithFilter(SearchErrorLogQuery filter)
        {
            var query = from e in _errorLogs
                    where
                        e.Time.Date.IsBetween(filter.Interval) &&
                        e.Application == filter.Application &&
                        filter.Types.Items.InvertedContains(e.Type, filter.Types.IncludeItems) &&
                        filter.Sources.Items.InvertedContains(e.Source, filter.Sources.IncludeItems) &&
                        filter.Urls.Items.InvertedContains(e.CleanUrl, filter.Urls.IncludeItems) &&
                        filter.Users.Items.InvertedContains(e.User, filter.Users.IncludeItems)
                    select e;

            if (filter.Text.HasValue())
            {
                query = from e in query
                        where e.Message.ContainsText(filter.Text, true) || e.Details.ContainsText(filter.Text, true)
                        select e;
            }

            return query.OrderByDescending(x => x.Time).ToList();
        }
		private static SearchErrorLogQuery CreateQueryThatIncluedEverything()
		{
			var repository = CreateRepository();
			var query = new SearchErrorLogQuery();

			query.Application = repository.GetApplications().First();
			query.Types = new SearchErrorLogQueryParameter(true, repository.GetTypes());
			query.Sources = new SearchErrorLogQueryParameter(true, repository.GetSources());
			query.Urls = new SearchErrorLogQueryParameter(true, repository.GetUrls());
			query.Users = new SearchErrorLogQueryParameter(true, repository.GetUsers());
			
			return query;
		}
		private static void GetWithFilterTest(SearchErrorLogQuery query, int expectedResult)
		{
			// arrange
			var repository = CreateRepository();

			// act
			var result = repository.GetWithFilter(query);

			// assert
			Assert.That(result.Count, Is.EqualTo(expectedResult));
		}
		public ErrorLogSearchEventArgs(SearchErrorLogQuery query)
		{
			Query = query;
		}
 public static SearchErrorLogQuery Create(ReportQuery reportQuery)
 {
     var query = new SearchErrorLogQuery { Application = reportQuery.Application, Interval = reportQuery.Interval };
     return query;
 }