public ISearchResponse<Flight> Search(LateSeatsQuery query)
        {
            var hit = MockRepository.GenerateStub<IHit<Flight>>();
            hit.Stub(x => x.Source).Return(new Flight
            {
                DepartureAirport = new Airport { Code = query.DepartureAirport },
                DestinationAirport = new Airport { Code = query.DestinationAirport }
            });

            var response = MockRepository.GenerateMock<ISearchResponse<Flight>>();
            response.Stub(x => x.Hits).Return(new List<IHit<Flight>> { hit });

            return response;
        }
        private static SearchDescriptor<Flight> GetElasticQuery(LateSeatsQuery query, SearchDescriptor<Flight> searchDescriptor)
        {
            if (query.HasValidDestination())
            {
                return searchDescriptor.Query(x =>
                                  x.Term("departure_airport.code.raw", query.DepartureAirport) &&
                                  x.Term("destination_airport.code.raw", query.DestinationAirport) &&
                                  x.Range(r => r.OnField("arrival_date").Greater(DateTime.Now).Lower(DateTime.Now.AddDays(query.Days))) &&
                                  x.Term("nights", query.MaxNights) &&
                                  x.Range(r => r.OnField("seats_remaining").GreaterOrEquals(query.SeatsRemaining)))
                           .Size(5000)
                           .Sort(x => x.OnField(query.SortBy).Ascending());
            }

            return searchDescriptor.Query(
                x =>
                x.Term("departure_airport.code.raw", query.DepartureAirport) &&
                x.Range(r => r.OnField("arrival_date").GreaterOrEquals(DateTime.Now).LowerOrEquals(DateTime.Now.AddDays(query.Days))) &&
                x.Term("nights", query.MaxNights) &&
                x.Range(r => r.OnField("seats_remaining").GreaterOrEquals(query.SeatsRemaining)))
                .Size(5000)
                .Sort(x => x.OnField(query.SortBy).Ascending());
        }
        public ISearchResponse<Flight> Search(LateSeatsQuery query)
        {
            var client = _config.GetElasticClient();

            return client.Search<Flight>(body => GetElasticQuery(query, body));
        }