1 import datetime
2 import re
3 from decimal import Decimal
4
5 from django.core.exceptions import FieldError
6 from django.db import connection
7 from django.db.models import (
8 Avg, Case, Count, DecimalField, DurationField, Exists, F, FloatField, Func,
9 IntegerField, Max, Min, OuterRef, Subquery, Sum, Value, When,
10 )
11 from django.db.models.functions import Coalesce
12 from django.test import TestCase
13 from django.test.testcases import skipUnlessDBFeature
14 from django.test.utils import Approximate, CaptureQueriesContext
15 from django.utils import timezone
16
17 from .models import Author, Book, Publisher, Store
18
19
20 class AggregateTestCase(TestCase):
21
22 @classmethod
23 def setUpTestData(cls):
24 cls.a1 = Author.objects.create(name='Adrian Holovaty', age=34)
25 cls.a2 = Author.objects.create(name='Jacob Kaplan-Moss', age=35)
26 cls.a3 = Author.objects.create(name='Brad Dayley', age=45)
27 cls.a4 = Author.objects.create(name='James Bennett', age=29)
28 cls.a5 = Author.objects.create(name='Jeffrey Forcier', age=37)
29 cls.a6 = Author.objects.create(name='Paul Bissex', age=29)
30 cls.a7 = Author.objects.create(name='Wesley J. Chun', age=25)
31 cls.a8 = Author.objects.create(name='Peter Norvig', age=57)
32 cls.a9 = Author.objects.create(name='Stuart Russell', age=46)
33 cls.a1.friends.add(cls.a2, cls.a4)
34 cls.a2.friends.add(cls.a1, cls.a7)
35 cls.a4.friends.add(cls.a1)
36 cls.a5.friends.add(cls.a6, cls.a7)
37 cls.a6.friends.add(cls.a5, cls.a7)
38 cls.a7.friends.add(cls.a2, cls.a5, cls.a6)
39 cls.a8.friends.add(cls.a9)
40 cls.a9.friends.add(cls.a8)
41
42 cls.p1 = Publisher.objects.create(name='Apress', num_awards=3, duration=datetime.timedelta(days=1))
43 cls.p2 = Publisher.objects.create(name='Sams', num_awards=1, duration=datetime.timedelta(days=2))
44 cls.p3 = Publisher.objects.create(name='Prentice Hall', num_awards=7)
45 cls.p4 = Publisher.objects.create(name='Morgan Kaufmann', num_awards=9)
46 cls.p5 = Publisher.objects.create(name="Jonno's House of Books", num_awards=0)