def test_subset_aggregation(self): todays_ratings = Rating.objects.filter(created__gte=datetime.date.today()) aggregated = generic_aggregate(Food.objects.all(), Rating.content_object, models.Sum('rating'), todays_ratings) self.assertEqual(aggregated, 15) aggregated = generic_aggregate(Food.objects.all(), Rating.content_object, models.Count('rating'), todays_ratings) self.assertEqual(aggregated, 4)
def test_charfield_pks(self): a1 = CharFieldGFK.objects.create(name='a1', content_object=self.apple) a2 = CharFieldGFK.objects.create(name='a2', content_object=self.apple) o1 = CharFieldGFK.objects.create(name='o1', content_object=self.orange) annotated_qs = generic_annotate(Food.objects.all(), CharFieldGFK.content_object, models.Count('name')) self.assertEqual(annotated_qs.count(), 2) food_a, food_b = annotated_qs self.assertEqual(food_b.score, 1) self.assertEqual(food_b.name, 'orange') self.assertEqual(food_a.score, 2) self.assertEqual(food_a.name, 'apple') aggregated = generic_aggregate(Food.objects.all(), CharFieldGFK.content_object, models.Count('name')) self.assertEqual(aggregated, 3)
def test_aggregation(self): # number of ratings on any food aggregated = generic_aggregate(Food.objects.all(), Rating.content_object, models.Count('rating')) self.assertEqual(aggregated, 7) # total of ratings out there for all foods aggregated = generic_aggregate(Food.objects.all(), Rating.content_object, models.Sum('rating')) self.assertEqual(aggregated, 27) # (showing the use of filters and inner query) aggregated = generic_aggregate(Food.objects.filter(name='apple'), Rating.content_object, models.Count('rating')) self.assertEqual(aggregated, 4) aggregated = generic_aggregate(Food.objects.filter(name='orange'), Rating.content_object, models.Count('rating')) self.assertEqual(aggregated, 3) # avg for apple aggregated = generic_aggregate(Food.objects.filter(name='apple'), Rating.content_object, models.Avg('rating')) self.assertEqual(aggregated, 3) # avg for orange aggregated = generic_aggregate(Food.objects.filter(name='orange'), Rating.content_object, models.Avg('rating')) self.assertEqual(aggregated, 5)