1 import datetime
2 from decimal import Decimal
3
4 from django.core.exceptions import FieldDoesNotExist, FieldError
5 from django.db.models import (
6 BooleanField, CharField, Count, DateTimeField, ExpressionWrapper, F, Func,
7 IntegerField, NullBooleanField, OuterRef, Q, Subquery, Sum, Value,
8 )
9 from django.db.models.expressions import RawSQL
10 from django.db.models.functions import Length, Lower
11 from django.test import TestCase, skipUnlessDBFeature
12
13 from .models import (
14 Author, Book, Company, DepartmentStore, Employee, Publisher, Store, Ticket,
15 )
16
17
18 def cxOracle_py3_bug(func):
19 """
20 There's a bug in Django/cx_Oracle with respect to string handling under
21 Python 3 (essentially, they treat Python 3 strings as Python 2 strings
22 rather than unicode). This makes some tests here fail under Python 3, so
23 we mark them as expected failures until someone fixes them in #23843.
24 """
25 from unittest import expectedFailure
26 from django.db import connection
27 return expectedFailure(func) if connection.vendor == 'oracle' else func
28
29
30 class NonAggregateAnnotationTestCase(TestCase):
31
32 @classmethod
33 def setUpTestData(cls):
34 cls.a1 = Author.objects.create(name='Adrian Holovaty', age=34)
35 cls.a2 = Author.objects.create(name='Jacob Kaplan-Moss', age=35)
36 cls.a3 = Author.objects.create(name='Brad Dayley', age=45)
37 cls.a4 = Author.objects.create(name='James Bennett', age=29)
38 cls.a5 = Author.objects.create(name='Jeffrey Forcier', age=37)
39 cls.a6 = Author.objects.create(name='Paul Bissex', age=29)
40 cls.a7 = Author.objects.create(name='Wesley J. Chun', age=25)
41 cls.a8 = Author.objects.create(name='Peter Norvig', age=57)
42 cls.a9 = Author.objects.create(name='Stuart Russell', age=46)