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)
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
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
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