diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2014-03-01 21:21:57 +0200 |
|---|---|---|
| committer | Marc Tamlyn <marc.tamlyn@gmail.com> | 2014-03-07 14:52:13 +0000 |
| commit | 219d928852c256a81d09dbaa29ed4cec42d2fdfa (patch) | |
| tree | 579c7d7fe66591e66c96fb406ba2d25a8ede5a91 /tests/custom_lookups | |
| parent | a0f252520291924f8fb7cb0d85f1680294508560 (diff) | |
Fixed #21863 -- supplemented get_lookup() with get_transform()
Also fixed #22124 -- Expanded explanation of exactly what is going on in
as_sql() methods.
Diffstat (limited to 'tests/custom_lookups')
| -rw-r--r-- | tests/custom_lookups/tests.py | 56 |
1 files changed, 54 insertions, 2 deletions
diff --git a/tests/custom_lookups/tests.py b/tests/custom_lookups/tests.py index 0ac1780796..396974b4b1 100644 --- a/tests/custom_lookups/tests.py +++ b/tests/custom_lookups/tests.py @@ -3,10 +3,11 @@ from __future__ import unicode_literals from datetime import date import unittest -from django.test import TestCase -from .models import Author +from django.core.exceptions import FieldError from django.db import models from django.db import connection +from django.test import TestCase +from .models import Author class Div3Lookup(models.Lookup): @@ -289,3 +290,54 @@ class YearLteTests(TestCase): finally: YearTransform._unregister_lookup(CustomYearExact) YearTransform.register_lookup(YearExact) + + +class TrackCallsYearTransform(YearTransform): + lookup_name = 'year' + call_order = [] + + def as_sql(self, qn, connection): + lhs_sql, params = qn.compile(self.lhs) + return connection.ops.date_extract_sql('year', lhs_sql), params + + @property + def output_type(self): + return models.IntegerField() + + def get_lookup(self, lookup_name): + self.call_order.append('lookup') + return super(TrackCallsYearTransform, self).get_lookup(lookup_name) + + def get_transform(self, lookup_name): + self.call_order.append('transform') + return super(TrackCallsYearTransform, self).get_transform(lookup_name) + + +class LookupTransformCallOrderTests(TestCase): + def test_call_order(self): + models.DateField.register_lookup(TrackCallsYearTransform) + try: + # junk lookup - tries lookup, then transform, then fails + with self.assertRaises(FieldError): + Author.objects.filter(birthdate__year__junk=2012) + self.assertEqual(TrackCallsYearTransform.call_order, + ['lookup', 'transform']) + TrackCallsYearTransform.call_order = [] + # junk transform - tries transform only, then fails + with self.assertRaises(FieldError): + Author.objects.filter(birthdate__year__junk__more_junk=2012) + self.assertEqual(TrackCallsYearTransform.call_order, + ['transform']) + TrackCallsYearTransform.call_order = [] + # Just getting the year (implied __exact) - lookup only + Author.objects.filter(birthdate__year=2012) + self.assertEqual(TrackCallsYearTransform.call_order, + ['lookup']) + TrackCallsYearTransform.call_order = [] + # Just getting the year (explicit __exact) - lookup only + Author.objects.filter(birthdate__year__exact=2012) + self.assertEqual(TrackCallsYearTransform.call_order, + ['lookup']) + + finally: + models.DateField._unregister_lookup(TrackCallsYearTransform) |
