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 | |
| 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')
| -rw-r--r-- | tests/custom_lookups/tests.py | 56 | ||||
| -rw-r--r-- | tests/lookup/tests.py | 5 |
2 files changed, 57 insertions, 4 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) diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py index df6192ee11..8a9b69b879 100644 --- a/tests/lookup/tests.py +++ b/tests/lookup/tests.py @@ -476,8 +476,9 @@ class LookupTests(TestCase): Article.objects.filter(headline__starts='Article') self.fail('FieldError not raised') except FieldError as ex: - self.assertEqual(str(ex), "Join on field 'headline' not permitted. " - "Did you misspell 'starts' for the lookup type?") + self.assertEqual( + str(ex), "Unsupported lookup 'starts' for CharField " + "or join on the field not permitted.") def test_regex(self): # Create some articles with a bit more interesting headlines for testing field lookups: |
