summaryrefslogtreecommitdiff
path: root/tests/basic/tests.py
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-07-26 11:59:40 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-07-26 12:41:27 +0300
commit31fadc120213284da76801cc7bc56e9f32d7281b (patch)
tree534ba416b05409f03c524e1bb3ebd7dc581667b5 /tests/basic/tests.py
parent8f3aefdec33f6cb4bdda142ff9f7fa423c0bebbd (diff)
Fixed #20625 -- Chainable Manager/QuerySet methods.
Additionally this patch solves the orthogonal problem that specialized `QuerySet` like `ValuesQuerySet` didn't inherit from the current `QuerySet` type. This wasn't an issue until now because we didn't officially support custom `QuerySet` but it became necessary with the introduction of this new feature. Thanks aaugustin, akaariai, carljm, charettes, mjtamlyn, shaib and timgraham for the reviews.
Diffstat (limited to 'tests/basic/tests.py')
-rw-r--r--tests/basic/tests.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/basic/tests.py b/tests/basic/tests.py
index fb21b11279..9d4490afc6 100644
--- a/tests/basic/tests.py
+++ b/tests/basic/tests.py
@@ -6,6 +6,7 @@ import threading
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.db import connections, DEFAULT_DB_ALIAS
from django.db.models.fields import Field, FieldDoesNotExist
+from django.db.models.manager import BaseManager
from django.db.models.query import QuerySet, EmptyQuerySet, ValuesListQuerySet, MAX_GET_RESULTS
from django.test import TestCase, TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature
from django.utils import six
@@ -734,3 +735,57 @@ class ConcurrentSaveTests(TransactionTestCase):
t.join()
a.save()
self.assertEqual(Article.objects.get(pk=a.pk).headline, 'foo')
+
+
+class ManagerTest(TestCase):
+ QUERYSET_PROXY_METHODS = [
+ 'none',
+ 'count',
+ 'dates',
+ 'datetimes',
+ 'distinct',
+ 'extra',
+ 'get',
+ 'get_or_create',
+ 'update_or_create',
+ 'create',
+ 'bulk_create',
+ 'filter',
+ 'aggregate',
+ 'annotate',
+ 'complex_filter',
+ 'exclude',
+ 'in_bulk',
+ 'iterator',
+ 'earliest',
+ 'latest',
+ 'first',
+ 'last',
+ 'order_by',
+ 'select_for_update',
+ 'select_related',
+ 'prefetch_related',
+ 'values',
+ 'values_list',
+ 'update',
+ 'reverse',
+ 'defer',
+ 'only',
+ 'using',
+ 'exists',
+ '_update',
+ ]
+
+ def test_manager_methods(self):
+ """
+ This test ensures that the correct set of methods from `QuerySet`
+ are copied onto `Manager`.
+
+ It's particularly useful to prevent accidentally leaking new methods
+ into `Manager`. New `QuerySet` methods that should also be copied onto
+ `Manager` will need to be added to `ManagerTest.QUERYSET_PROXY_METHODS`.
+ """
+ self.assertEqual(
+ sorted(BaseManager._get_queryset_methods(QuerySet).keys()),
+ sorted(self.QUERYSET_PROXY_METHODS),
+ )