Beispiel #1
0
def test_filter_prices_no_numbers(sample_data):
    search_criteria = {
        'max_price': 'foo',
        'min_price': 'bar',
        'star_rating': None,
        'earliest_departure_time': None,
        'earliest_return_time': None,
    }
    with pytest.raises(TypeError):
        search_listings(sample_data, search_criteria)
Beispiel #2
0
def test_star_rating(sample_data):
    search_criteria = {
        'max_price': None,
        'min_price': None,
        'star_rating': 1,
        'earliest_departure_time': None,
        'earliest_return_time': None,
    }
    result = search_listings(sample_data, search_criteria)
    assert len(result) == 6
    search_criteria = {
        'max_price': None,
        'min_price': None,
        'star_rating': 6,
        'earliest_departure_time': None,
        'earliest_return_time': None,
    }
    result = search_listings(sample_data, search_criteria)
    assert len(result) == 1
Beispiel #3
0
def test_return_time(sample_data):
    search_criteria = {
        'max_price': None,
        'min_price': None,
        'star_rating': None,
        'earliest_departure_time': None,
        'earliest_return_time': format_time('10:00', TIME_FORMAT),
    }
    result = search_listings(sample_data, search_criteria)
    assert len(result) == 5
    search_criteria = {
        'max_price': None,
        'min_price': None,
        'star_rating': 6,
        'earliest_departure_time': None,
        'earliest_return_time': format_time('21:00', TIME_FORMAT),
    }
    result = search_listings(sample_data, search_criteria)
    assert not result
Beispiel #4
0
    def on_get(self, req, resp, **params):
        """
        :param req: request object
        :param resp: response object
        :param params: additional params passed upon request
        :returns: 200 with json obj or 400
        """

        args = {
            'earliest_departure_time':
            format_time(req.get_param('earliest_departure_time'), TIME_FORMAT)
            if req.get_param('earliest_departure_time') else None,
            'earliest_return_time':
            format_time(req.get_param('earliest_return_time'), TIME_FORMAT)
            if req.get_param('earliest_return_time') else None,
            'max_price':
            Decimal(req.get_param('max_price'))
            if req.get_param('max_price') else None,
            'min_price':
            Decimal(req.get_param('min_price'))
            if req.get_param('min_price') else None,
            'star_rating':
            req.get_param_as_int('star_rating') or None,
        }
        # get rid of empty keys
        args = {k: v for k, v in args.items() if v}
        if not args:
            raise HTTPError(HTTP_400,
                            'Please supply at least one search criteria.')

        search_results = search_listings(listings=XmlParser.get_listings(),
                                         search_criteria=args)
        resp.body = simplejson.dumps(prepare_search_results(search_results),
                                     indent=2,
                                     default=json_handler)
        resp.status = HTTP_200