def test_item_filter_more(self): """ Test the result when a few filters are applied to the results. """ query_tuple = [('limit', 0), ('item:extended_info:i_brand', 'Apple'), ('item:subcategory', 'Laptop Computer'), ('extended_info:app_type', 'tech')] request = RequestFactory().get( '/?limit=0&item:extended_info:i_brand=Apple&' 'item:subcategory=Laptop+Computer&' 'extended_info:app_type=tech') spots = get_spots_by_filter(query_tuple) filtered_spots = get_filtered_items(spots, request) self.assertNotEqual( get_item_count(spots), get_item_count(filtered_spots), "Filters weren't applied. All items were returned!") self.assertEqual(get_item_count(filtered_spots), 8, "Invalid number of filtered items returned") for spot in filtered_spots: for item in spot.items: self.assertEqual( item.brand, "Apple", "Invalid brand for spot %s item %s made through the " "filters." % (spot.name, item.name)) self.assertEqual( item.subcategory, "Laptop Computer", "Invalid category for spot %s item %s made through the " "filters." % (spot.name, item.name))
def test_item_filter(self): """ Test the result when a few filters are applied to the results. """ query_tuple = [ ('limit', 0), ('item:extended_info:i_brand', 'Apple'), ('extended_info:app_type', 'tech') ] request = RequestFactory().get( '/?limit=0&item:extended_info:i_brand=Apple&' 'extended_info:app_type=tech' ) spots = get_spots_by_filter(query_tuple) filtered_spots = get_filtered_items(spots, request) self.assertNotEqual( get_item_count(spots), get_item_count(filtered_spots), "Filters weren't applied. All items were returned!" ) self.assertEqual( get_item_count(filtered_spots), 15, "Invalid number of filtered items returned" ) for spot in filtered_spots: for item in spot.items: self.assertEqual( item.brand, "Apple", "Invalid brand for spot %s item %s made through the " "filters." % (spot.name, item.name) )
def test_get_spots_by_filter_pasta_food_court(self): filtered_spots = get_spots_by_filter([ ('extended_info:s_food_pasta', True), ('type', 'food_court'), ('extended_info:app_type', 'food') ]) self.assertEqual(len(filtered_spots), 1)
def get_item_by_id(item_id): spot = get_spots_by_filter([ ('item:id', item_id), ('extended_info:app_type', 'tech') ]) if spot: spot = _filter_spot_items(item_id, spot[0]) return spot
def hybrid_tech_list_view(request, campus): spots = get_spots_by_filter([('has_items', 'true')]) context = {"spots": spots, "campus": campus, "count": len(spots), "app_type": 'tech'} return render_to_response('hybridize/tech/list.html', context, context_instance=RequestContext(request))
def test_item_nofilter(self): """ Test the result when no filters are applied to the results. """ query_tuple = [('limit', 0), ('extended_info:app_type', 'tech')] request = RequestFactory().get('/?limit=0&extended_info:app_type=tech') spots = get_spots_by_filter(query_tuple) filtered_spots = get_filtered_items(spots, request) self.assertEqual( spots, filtered_spots, "Filters weren't applied. All items weren't returned!") self.assertEqual(get_item_count(filtered_spots), 115, "Invalid number of filtered items returned")
def test_get_spots_by_filter(self): """ tests function used by discover cards to load spaces with selected filters. Uses mock data that matches order of this filter. """ filters = [('limit', 5), ('center_latitude', u'47.653811'), ('center_longitude', u'-122.307815'), ('distance', 100000), ('fuzzy_hours_start', 'Tuesday,05:00'), ('fuzzy_hours_end', 'Tuesday,11:00'), ('extended_info:app_type', 'food')] spots = get_spots_by_filter(filters) self.assertEqual(len(spots), 5) self.assertEqual(spots[0].extended_info[3].value, 'food')
def test_get_spots_by_filter(self): """ tests function used by discover cards to load spaces with selected filters. Uses mock data that matches order of this filter. """ filters = [ ('limit', 5), ('center_latitude', u'47.653811'), ('center_longitude', u'-122.307815'), ('distance', 100000), ('fuzzy_hours_start', 'Tuesday,05:00'), ('fuzzy_hours_end', 'Tuesday,11:00'), ('extended_info:app_type', 'food') ] spots = get_spots_by_filter(filters) self.assertEqual(len(spots), 5) self.assertEqual(spots[0].extended_info[3].value, 'food')
def test_item_invalid_filter(self): """ Test the result when invalid filters are applied to the results. """ query_tuple = [ ('limit', 0), ('extended_info:app_type', 'invalid') ] request = RequestFactory().get( '/?limit=0&extended_info:app_type=invalid' ) spots = get_spots_by_filter(query_tuple) filtered_spots = get_filtered_items(spots, request) self.assertEqual( spots, filtered_spots, "Filters weren't applied. All items weren't returned!" ) self.assertEqual( get_item_count(filtered_spots), 0, "Invalid number of filtered items returned" )
def test_get_spots_by_filter_error(self): """ Assert get_spots_by_filter returns an empty list when encountering a failure. """ self.assertEqual(get_spots_by_filter(), [])
def test_get_spots_by_filter_pasta_food_court(self): filtered_spots = get_spots_by_filter([ ('extended_info:s_food_pasta', True), ('type', 'food_court'), ('extended_info:app_type', 'food') ]) self.assertEqual(len(filtered_spots), 1)
def test_get_spots_by_filter_error(self): """ Assert get_spots_by_filter returns an empty list when encountering a failure. """ self.assertEqual(get_spots_by_filter(), [])
def discover_card_view(request, campus, discover_category): # Will figure this out later lat = request.GET.get('latitude', None) lon = request.GET.get('longitude', None) # Hardcoded for food at the moment. Change it per need basis. discover_categories = { "open": { "title": "Open Now", "spot_type": "food", "filter_url": "open_now=true", "filter": [ ('limit', 5), ('open_now', True), ('center_latitude', lat if lat else DEFAULT_LAT), ('center_longitude', lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food') ] }, "morning": { "title": "Open Mornings (5am - 11am)", "spot_type": "food", "filter_url": "period0=morning", "filter": [ ('limit', 5), ('center_latitude', lat if lat else DEFAULT_LAT), ('center_longitude', lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food') ] + get_period_filter('morning') }, "late": { "title": "Open Late Night (10pm - 5am)", "spot_type": "food", "filter_url": "period0=late_night", "filter": [ ('limit', 5), ('center_latitude', lat if lat else DEFAULT_LAT), ('center_longitude', lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food') ] + get_period_filter('late_night') }, "studyoutdoors": { "title": "Outdoor Study Areas", "spot_type": "study", "filter_url": "type0=outdoor", "filter": [ ('limit', 5), ('center_latitude', lat if lat else DEFAULT_LAT), ('center_longitude', lon if lon else DEFAULT_LON), ('distance', 100000), ('type', 'outdoor') ] }, "studycomputerlab": { "title": "Computer Labs", "spot_type": "study", "filter_url": "type0=computer_lab", "filter": [ ('limit', 5), ('center_latitude', lat if lat else DEFAULT_LAT), ('center_longitude', lon if lon else DEFAULT_LON), ('distance', 100000), ('type', 'computer_lab') ] }, } try: discover_data = discover_categories[discover_category] except KeyError: return custom_404_response(request) discover_data["filter"].append(('extended_info:campus', campus)) spots = get_spots_by_filter(discover_data["filter"]) if len(spots) == 0: return custom_404_response(request) context = { "spots": spots, "campus": campus, "card_title": discover_data["title"], "spot_type": discover_data["spot_type"], "card_filter_url": discover_data["filter_url"] } return render_to_response('scout/discover_card.html', context, context_instance=RequestContext(request))
def get_item_by_id(item_id): spot = get_spots_by_filter([('item:id', item_id), ('extended_info:app_type', 'tech')]) if spot: spot = _filter_spot_items(item_id, spot[0]) return spot
def get_context_data(self, **kwargs): self.template_name = kwargs['template_name'] # if h_lat and h_lng is provided, use it # otherwise, user latitude and longitude # handle hybridize user lat/lng requests hlat = self.request.GET.get('h_lat', None) hlon = self.request.GET.get('h_lng', None) # handle standard lat/lng requests for web lat = self.request.GET.get('latitude', None) lon = self.request.GET.get('longitude', None) # Hardcoded for food at the moment. Change it per need basis. discover_categories = { "safestudy": { "title": "Study Spots Open Now", "spot_type": "study", "filter_url": "open_now=true", "filter": [ ('limit', 5), ('open_now', True), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ] }, "safefood": { "title": "Food Spots Open Now", "spot_type": "food", "filter_url": "open_now=true", "filter": [('limit', 5), ('open_now', True), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food')] }, "open": { "title": "Open Now", "spot_type": "food", "filter_url": "open_now=true", "filter": [('limit', 5), ('open_now', True), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food')] }, "morning": { "title": "Open Mornings (5am - 11am)", "spot_type": "food", "filter_url": "period0=morning", "filter": [('limit', 5), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food')] + get_period_filter('morning') }, "late": { "title": "Open Late Night (10pm - 5am)", "spot_type": "food", "filter_url": "period0=late_night", "filter": [('limit', 5), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('extended_info:app_type', 'food')] + get_period_filter('late_night') }, "studyoutdoors": { "title": "Outdoor Study Areas", "spot_type": "study", "filter_url": "type0=outdoor", "filter": [('limit', 5), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('type', 'outdoor')] }, "studycomputerlab": { "title": "Computer Labs", "spot_type": "study", "filter_url": "type0=computer_lab", "filter": [('limit', 5), ('center_latitude', hlat if hlat else lat if lat else DEFAULT_LAT), ('center_longitude', hlon if hlon else lon if lon else DEFAULT_LON), ('distance', 100000), ('type', 'computer_lab')] }, "studyrandom": { "title": "Places to study", "spot_type": "study", "filter_url": "", "filter": [('limit', 0)] }, "foodrandom": { "title": "Places to eat", "spot_type": "food", "filter_url": "", "filter": [('extended_info:app_type', 'food'), ('limit', 0)] }, } try: discover_data = discover_categories[kwargs['discover_category']] except KeyError: self.response_class = Response404 self.template_name = "404.html" return custom_404_context(kwargs["campus"]) discover_data["filter"].append( ('extended_info:campus', kwargs['campus'])) spots = get_spots_by_filter(discover_data["filter"]) if len(spots) == 0: self.response_class = Response404 self.template_name = "404.html" return custom_404_context(kwargs["campus"]) if kwargs['discover_category'] in ['foodrandom', 'studyrandom']: spots = get_random_limit_from_spots(spots, 5) context = { "spots": spots, "campus": kwargs['campus'], "card_title": discover_data["title"], "spot_type": discover_data["spot_type"], "card_filter_url": discover_data["filter_url"] } return context