diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2013-08-23 12:36:53 +0100 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2013-08-23 12:36:53 +0100 |
| commit | 5569b0b92f0504aadf0376f9cf0cb09106cd3e92 (patch) | |
| tree | e82fda531a8ef41e8a32054f4fe55eb288457994 /tests | |
| parent | 9cc6cfc4057e07b73a1d72a1177d568362b0c517 (diff) | |
| parent | 57c82f909b212708a17edd11014be718bd02be3b (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.py | 13 | ||||
| -rw-r--r-- | tests/admin_widgets/tests.py | 17 | ||||
| -rw-r--r-- | tests/basic/tests.py | 11 | ||||
| -rw-r--r-- | tests/defer_regress/tests.py | 40 | ||||
| -rw-r--r-- | tests/queries/models.py | 26 | ||||
| -rw-r--r-- | tests/queries/tests.py | 22 |
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) |
