Added test to demonstrate issue 11387 isn't there anymore.

Thanks adurdin for the report and patch. Fixes #11387.
This commit is contained in:
Ramiro Morales 2013-02-01 22:10:16 -03:00
parent c4b6659269
commit 2ca37af621
2 changed files with 27 additions and 2 deletions

View File

@ -6,7 +6,7 @@ from django.utils.encoding import python_2_unicode_compatible
__all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address',
'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2',
'Contact', 'Organization', 'Note')
'Contact', 'Organization', 'Note', 'Company')
@python_2_unicode_compatible
class Link(models.Model):
@ -84,3 +84,10 @@ class Organization(models.Model):
name = models.CharField(max_length=255)
contacts = models.ManyToManyField(Contact, related_name='organizations')
@python_2_unicode_compatible
class Company(models.Model):
name = models.CharField(max_length=100)
links = generic.GenericRelation(Link)
def __str__(self):
return "Company: %s" % self.name

View File

@ -2,7 +2,7 @@ from django.db.models import Q
from django.test import TestCase
from .models import (Address, Place, Restaurant, Link, CharLink, TextLink,
Person, Contact, Note, Organization, OddRelation1, OddRelation2)
Person, Contact, Note, Organization, OddRelation1, OddRelation2, Company)
class GenericRelationTests(TestCase):
@ -80,3 +80,21 @@ class GenericRelationTests(TestCase):
)
self.assertEqual(str(qs.query).count('JOIN'), 2)
def test_generic_relation_ordering(self):
"""
Test that ordering over a generic relation does not include extraneous
duplicate results, nor excludes rows not participating in the relation.
"""
p1 = Place.objects.create(name="South Park")
p2 = Place.objects.create(name="The City")
c = Company.objects.create(name="Chubby's Intl.")
l1 = Link.objects.create(content_object=p1)
l2 = Link.objects.create(content_object=c)
places = list(Place.objects.order_by('links__id'))
def count_places(place):
return len(filter(lambda p: p.id == place.id, places))
self.assertEqual(len(places), 2)
self.assertEqual(count_places(p1), 1)
self.assertEqual(count_places(p2), 1)