summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2013-08-23 12:36:53 +0100
committerAndrew Godwin <andrew@aeracode.org>2013-08-23 12:36:53 +0100
commit5569b0b92f0504aadf0376f9cf0cb09106cd3e92 (patch)
treee82fda531a8ef41e8a32054f4fe55eb288457994 /tests
parent9cc6cfc4057e07b73a1d72a1177d568362b0c517 (diff)
parent57c82f909b212708a17edd11014be718bd02be3b (diff)
Merge remote-tracking branch 'core/master' into schema-alteration
Conflicts: django/db/backends/oracle/base.py django/db/backends/postgresql_psycopg2/base.py django/db/models/signals.py tests/queries/tests.py
Diffstat (limited to 'tests')
-rw-r--r--tests/admin_views/tests.py13
-rw-r--r--tests/admin_widgets/tests.py17
-rw-r--r--tests/basic/tests.py11
-rw-r--r--tests/defer_regress/tests.py40
-rw-r--r--tests/queries/models.py26
-rw-r--r--tests/queries/tests.py22
6 files changed, 110 insertions, 19 deletions
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 8f83324a37..66a5735b6c 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -630,6 +630,19 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
with self.assertRaises(AttributeError):
self.client.get('/test_admin/%s/admin_views/simple/' % self.urlbit)
+ def test_changelist_with_no_change_url(self):
+ """
+ ModelAdmin.changelist_view shouldn't result in a NoReverseMatch if url
+ for change_view is removed from get_urls
+
+ Regression test for #20934
+ """
+ UnchangeableObject.objects.create()
+ response = self.client.get('/test_admin/admin/admin_views/unchangeableobject/')
+ self.assertEqual(response.status_code, 200)
+ # Check the format of the shown object -- shouldn't contain a change link
+ self.assertContains(response, '<th class="field-__str__">UnchangeableObject object</th>', html=True)
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class AdminViewFormUrlTest(TestCase):
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index d2ecf46358..7d2f70f69b 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -132,6 +132,23 @@ class AdminFormfieldForDBFieldTests(TestCase):
self.assertEqual(f2.widget.attrs['maxlength'], '20')
self.assertEqual(f2.widget.attrs['size'], '10')
+ def testFormfieldOverridesWidgetInstancesForFieldsWithChoices(self):
+ """
+ Test that widget is actually overridden for fields with choices.
+ (#194303)
+ """
+ class MemberAdmin(admin.ModelAdmin):
+ formfield_overrides = {
+ CharField: {'widget': forms.TextInput}
+ }
+ ma = MemberAdmin(models.Member, admin.site)
+ name_field = models.Member._meta.get_field('name')
+ gender_field = models.Member._meta.get_field('gender')
+ name = ma.formfield_for_dbfield(name_field, request=None)
+ gender = ma.formfield_for_dbfield(gender_field, request=None)
+ self.assertIsInstance(name.widget, forms.TextInput)
+ self.assertIsInstance(gender.widget, forms.TextInput)
+
def testFieldWithChoices(self):
self.assertFormfield(models.Member, 'gender', forms.Select)
diff --git a/tests/basic/tests.py b/tests/basic/tests.py
index 2b051621ef..611944902a 100644
--- a/tests/basic/tests.py
+++ b/tests/basic/tests.py
@@ -708,9 +708,20 @@ class ModelTest(TestCase):
SelfRef.objects.get(selfref=sr)
def test_eq(self):
+ self.assertEqual(Article(id=1), Article(id=1))
self.assertNotEqual(Article(id=1), object())
self.assertNotEqual(object(), Article(id=1))
+ a = Article()
+ self.assertEqual(a, a)
+ self.assertNotEqual(Article(), a)
+ def test_hash(self):
+ # Value based on PK
+ self.assertEqual(hash(Article(id=1)), hash(1))
+ with self.assertRaises(TypeError):
+ # No PK value -> unhashable (because save() would then change
+ # hash)
+ hash(Article())
class ConcurrentSaveTests(TransactionTestCase):
diff --git a/tests/defer_regress/tests.py b/tests/defer_regress/tests.py
index 619f65163c..ffb47a8133 100644
--- a/tests/defer_regress/tests.py
+++ b/tests/defer_regress/tests.py
@@ -7,6 +7,7 @@ from django.contrib.sessions.backends.db import SessionStore
from django.db.models import Count
from django.db.models.loading import cache
from django.test import TestCase
+from django.test.utils import override_settings
from .models import (
ResolveThis, Item, RelatedItem, Child, Leaf, Proxy, SimpleItem, Feature,
@@ -83,24 +84,6 @@ class DeferRegressionTest(TestCase):
self.assertEqual(results[0].child.name, "c1")
self.assertEqual(results[0].second_child.name, "c2")
- # Test for #12163 - Pickling error saving session with unsaved model
- # instances.
- SESSION_KEY = '2b1189a188b44ad18c35e1baac6ceead'
-
- item = Item()
- item._deferred = False
- s = SessionStore(SESSION_KEY)
- s.clear()
- s["item"] = item
- s.save()
-
- s = SessionStore(SESSION_KEY)
- s.modified = True
- s.save()
-
- i2 = s["item"]
- self.assertFalse(i2._deferred)
-
# Regression for #16409 - make sure defer() and only() work with annotate()
self.assertIsInstance(
list(SimpleItem.objects.annotate(Count('feature')).defer('name')),
@@ -147,6 +130,27 @@ class DeferRegressionTest(TestCase):
cache.get_app("defer_regress"), include_deferred=True))
)
+ @override_settings(SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer')
+ def test_ticket_12163(self):
+ # Test for #12163 - Pickling error saving session with unsaved model
+ # instances.
+ SESSION_KEY = '2b1189a188b44ad18c35e1baac6ceead'
+
+ item = Item()
+ item._deferred = False
+ s = SessionStore(SESSION_KEY)
+ s.clear()
+ s["item"] = item
+ s.save()
+
+ s = SessionStore(SESSION_KEY)
+ s.modified = True
+ s.save()
+
+ i2 = s["item"]
+ self.assertFalse(i2._deferred)
+
+ def test_ticket_16409(self):
# Regression for #16409 - make sure defer() and only() work with annotate()
self.assertIsInstance(
list(SimpleItem.objects.annotate(Count('feature')).defer('name')),
diff --git a/tests/queries/models.py b/tests/queries/models.py
index 3a638b2867..a81ec9f029 100644
--- a/tests/queries/models.py
+++ b/tests/queries/models.py
@@ -501,3 +501,29 @@ class OrderItem(models.Model):
def __str__(self):
return '%s' % self.pk
+
+class BaseUser(models.Model):
+ pass
+
+@python_2_unicode_compatible
+class Task(models.Model):
+ title = models.CharField(max_length=10)
+ owner = models.ForeignKey(BaseUser, related_name='owner')
+ creator = models.ForeignKey(BaseUser, related_name='creator')
+
+ def __str__(self):
+ return self.title
+
+@python_2_unicode_compatible
+class Staff(models.Model):
+ name = models.CharField(max_length=10)
+
+ def __str__(self):
+ return self.name
+
+@python_2_unicode_compatible
+class StaffUser(BaseUser):
+ staff = models.OneToOneField(Staff, related_name='user')
+
+ def __str__(self):
+ return self.staff
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index 91d4b17d0b..9e59a1acee 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -25,7 +25,7 @@ from .models import (
OneToOneCategory, NullableName, ProxyCategory, SingleObject, RelatedObject,
ModelA, ModelB, ModelC, ModelD, Responsibility, Job, JobResponsibilities,
BaseA, FK1, Identifier, Program, Channel, Page, Paragraph, Chapter, Book,
- MyObject, Order, OrderItem, SharedConnection)
+ MyObject, Order, OrderItem, SharedConnection, Task, Staff, StaffUser)
class BaseQuerysetTest(TestCase):
def assertValueQuerysetEqual(self, qs, values):
@@ -2992,3 +2992,23 @@ class Ticket14056Tests(TestCase):
SharedConnection.objects.order_by('-pointera__connection', 'pk'),
expected_ordering, lambda x: x
)
+
+class Ticket20955Tests(TestCase):
+ def test_ticket_20955(self):
+ jack = Staff.objects.create(name='jackstaff')
+ jackstaff = StaffUser.objects.create(staff=jack)
+ jill = Staff.objects.create(name='jillstaff')
+ jillstaff = StaffUser.objects.create(staff=jill)
+ task = Task.objects.create(creator=jackstaff, owner=jillstaff, title="task")
+ task_get = Task.objects.get(pk=task.pk)
+ # Load data so that assertNumQueries doesn't complain about the get
+ # version's queries.
+ task_get.creator.staffuser.staff
+ task_get.owner.staffuser.staff
+ task_select_related = Task.objects.select_related(
+ 'creator__staffuser__staff', 'owner__staffuser__staff').get(pk=task.pk)
+ with self.assertNumQueries(0):
+ self.assertEqual(task_select_related.creator.staffuser.staff,
+ task_get.creator.staffuser.staff)
+ self.assertEqual(task_select_related.owner.staffuser.staff,
+ task_get.owner.staffuser.staff)