summaryrefslogtreecommitdiff
path: root/parts/django/tests/regressiontests/model_inheritance_regress
diff options
context:
space:
mode:
authorNishanth Amuluru2011-01-11 22:41:51 +0530
committerNishanth Amuluru2011-01-11 22:41:51 +0530
commitb03203c8cb991c16ac8a3d74c8c4078182d0bb48 (patch)
tree7cf13b2deacbfaaec99edb431b83ddd5ea734a52 /parts/django/tests/regressiontests/model_inheritance_regress
parent0c50203cd9eb94b819883c3110922e873f003138 (diff)
downloadpytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.tar.gz
pytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.tar.bz2
pytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.zip
removed all the buildout files
Diffstat (limited to 'parts/django/tests/regressiontests/model_inheritance_regress')
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/models.py148
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/tests.py388
3 files changed, 0 insertions, 536 deletions
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py b/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/models.py b/parts/django/tests/regressiontests/model_inheritance_regress/models.py
deleted file mode 100644
index 787f163..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/models.py
+++ /dev/null
@@ -1,148 +0,0 @@
-import datetime
-
-from django.db import models
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Restaurant(Place):
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the restaurant" % self.name
-
-class ItalianRestaurant(Restaurant):
- serves_gnocchi = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the italian restaurant" % self.name
-
-class ParkingLot(Place):
- # An explicit link to the parent (we can control the attribute name).
- parent = models.OneToOneField(Place, primary_key=True, parent_link=True)
- capacity = models.IntegerField()
-
- def __unicode__(self):
- return u"%s the parking lot" % self.name
-
-class ParkingLot2(Place):
- # In lieu of any other connector, an existing OneToOneField will be
- # promoted to the primary key.
- parent = models.OneToOneField(Place)
-
-class ParkingLot3(Place):
- # The parent_link connector need not be the pk on the model.
- primary_key = models.AutoField(primary_key=True)
- parent = models.OneToOneField(Place, parent_link=True)
-
-class Supplier(models.Model):
- restaurant = models.ForeignKey(Restaurant)
-
-class Wholesaler(Supplier):
- retailer = models.ForeignKey(Supplier,related_name='wholesale_supplier')
-
-class Parent(models.Model):
- created = models.DateTimeField(default=datetime.datetime.now)
-
-class Child(Parent):
- name = models.CharField(max_length=10)
-
-class SelfRefParent(models.Model):
- parent_data = models.IntegerField()
- self_data = models.ForeignKey('self', null=True)
-
-class SelfRefChild(SelfRefParent):
- child_data = models.IntegerField()
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
- class Meta:
- ordering = ('-pub_date', 'headline')
-
- def __unicode__(self):
- return self.headline
-
-class ArticleWithAuthor(Article):
- author = models.CharField(max_length=100)
-
-class M2MBase(models.Model):
- articles = models.ManyToManyField(Article)
-
-class M2MChild(M2MBase):
- name = models.CharField(max_length=50)
-
-class Evaluation(Article):
- quality = models.IntegerField()
-
- class Meta:
- abstract = True
-
-class QualityControl(Evaluation):
- assignee = models.CharField(max_length=50)
-
-class BaseM(models.Model):
- base_name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.base_name
-
-class DerivedM(BaseM):
- customPK = models.IntegerField(primary_key=True)
- derived_name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return "PK = %d, base_name = %s, derived_name = %s" \
- % (self.customPK, self.base_name, self.derived_name)
-
-class AuditBase(models.Model):
- planned_date = models.DateField()
-
- class Meta:
- abstract = True
- verbose_name_plural = u'Audits'
-
-class CertificationAudit(AuditBase):
- class Meta(AuditBase.Meta):
- abstract = True
-
-class InternalCertificationAudit(CertificationAudit):
- auditing_dept = models.CharField(max_length=20)
-
-# Check that abstract classes don't get m2m tables autocreated.
-class Person(models.Model):
- name = models.CharField(max_length=100)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class AbstractEvent(models.Model):
- name = models.CharField(max_length=100)
- attendees = models.ManyToManyField(Person, related_name="%(class)s_set")
-
- class Meta:
- abstract = True
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class BirthdayParty(AbstractEvent):
- pass
-
-class BachelorParty(AbstractEvent):
- pass
-
-class MessyBachelorParty(BachelorParty):
- pass
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/tests.py b/parts/django/tests/regressiontests/model_inheritance_regress/tests.py
deleted file mode 100644
index dac2cb5..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/tests.py
+++ /dev/null
@@ -1,388 +0,0 @@
-"""
-Regression tests for Model inheritance behaviour.
-"""
-
-import datetime
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import (Place, Restaurant, ItalianRestaurant, ParkingLot,
- ParkingLot2, ParkingLot3, Supplier, Wholesaler, Child, SelfRefParent,
- SelfRefChild, ArticleWithAuthor, M2MChild, QualityControl, DerivedM,
- Person, BirthdayParty, BachelorParty, MessyBachelorParty,
- InternalCertificationAudit)
-
-
-class ModelInheritanceTest(TestCase):
- def test_model_inheritance(self):
- # Regression for #7350, #7202
- # Check that when you create a Parent object with a specific reference
- # to an existent child instance, saving the Parent doesn't duplicate
- # the child. This behaviour is only activated during a raw save - it
- # is mostly relevant to deserialization, but any sort of CORBA style
- # 'narrow()' API would require a similar approach.
-
- # Create a child-parent-grandparent chain
- place1 = Place(
- name="Guido's House of Pasta",
- address='944 W. Fullerton')
- place1.save_base(raw=True)
- restaurant = Restaurant(
- place_ptr=place1,
- serves_hot_dogs=True,
- serves_pizza=False)
- restaurant.save_base(raw=True)
- italian_restaurant = ItalianRestaurant(
- restaurant_ptr=restaurant,
- serves_gnocchi=True)
- italian_restaurant.save_base(raw=True)
-
- # Create a child-parent chain with an explicit parent link
- place2 = Place(name='Main St', address='111 Main St')
- place2.save_base(raw=True)
- park = ParkingLot(parent=place2, capacity=100)
- park.save_base(raw=True)
-
- # Check that no extra parent objects have been created.
- places = list(Place.objects.all())
- self.assertEqual(places, [place1, place2])
-
- dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's House of Pasta",
- 'serves_hot_dogs': True
- }])
-
- dicts = list(ItalianRestaurant.objects.values(
- 'name','serves_hot_dogs','serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's House of Pasta",
- 'serves_gnocchi': True,
- 'serves_hot_dogs': True,
- }])
-
- dicts = list(ParkingLot.objects.values('name','capacity'))
- self.assertEqual(dicts, [{
- 'capacity': 100,
- 'name': u'Main St',
- }])
-
- # You can also update objects when using a raw save.
- place1.name = "Guido's All New House of Pasta"
- place1.save_base(raw=True)
-
- restaurant.serves_hot_dogs = False
- restaurant.save_base(raw=True)
-
- italian_restaurant.serves_gnocchi = False
- italian_restaurant.save_base(raw=True)
-
- place2.name='Derelict lot'
- place2.save_base(raw=True)
-
- park.capacity = 50
- park.save_base(raw=True)
-
- # No extra parent objects after an update, either.
- places = list(Place.objects.all())
- self.assertEqual(places, [place2, place1])
- self.assertEqual(places[0].name, 'Derelict lot')
- self.assertEqual(places[1].name, "Guido's All New House of Pasta")
-
- dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_hot_dogs': False,
- }])
-
- dicts = list(ItalianRestaurant.objects.values(
- 'name', 'serves_hot_dogs', 'serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_gnocchi': False,
- 'serves_hot_dogs': False,
- }])
-
- dicts = list(ParkingLot.objects.values('name','capacity'))
- self.assertEqual(dicts, [{
- 'capacity': 50,
- 'name': u'Derelict lot',
- }])
-
- # If you try to raw_save a parent attribute onto a child object,
- # the attribute will be ignored.
-
- italian_restaurant.name = "Lorenzo's Pasta Hut"
- italian_restaurant.save_base(raw=True)
-
- # Note that the name has not changed
- # - name is an attribute of Place, not ItalianRestaurant
- dicts = list(ItalianRestaurant.objects.values(
- 'name','serves_hot_dogs','serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_gnocchi': False,
- 'serves_hot_dogs': False,
- }])
-
- def test_issue_7105(self):
- # Regressions tests for #7105: dates() queries should be able to use
- # fields from the parent model as easily as the child.
- obj = Child.objects.create(
- name='child',
- created=datetime.datetime(2008, 6, 26, 17, 0, 0))
- dates = list(Child.objects.dates('created', 'month'))
- self.assertEqual(dates, [datetime.datetime(2008, 6, 1, 0, 0)])
-
- def test_issue_7276(self):
- # Regression test for #7276: calling delete() on a model with
- # multi-table inheritance should delete the associated rows from any
- # ancestor tables, as well as any descendent objects.
- place1 = Place(
- name="Guido's House of Pasta",
- address='944 W. Fullerton')
- place1.save_base(raw=True)
- restaurant = Restaurant(
- place_ptr=place1,
- serves_hot_dogs=True,
- serves_pizza=False)
- restaurant.save_base(raw=True)
- italian_restaurant = ItalianRestaurant(
- restaurant_ptr=restaurant,
- serves_gnocchi=True)
- italian_restaurant.save_base(raw=True)
-
- ident = ItalianRestaurant.objects.all()[0].id
- self.assertEqual(Place.objects.get(pk=ident), place1)
- xx = Restaurant.objects.create(
- name='a',
- address='xx',
- serves_hot_dogs=True,
- serves_pizza=False)
-
- # This should delete both Restuarants, plus the related places, plus
- # the ItalianRestaurant.
- Restaurant.objects.all().delete()
-
- self.assertRaises(
- Place.DoesNotExist,
- Place.objects.get,
- pk=ident)
- self.assertRaises(
- ItalianRestaurant.DoesNotExist,
- ItalianRestaurant.objects.get,
- pk=ident)
-
- def test_issue_6755(self):
- """
- Regression test for #6755
- """
- r = Restaurant(serves_pizza=False)
- r.save()
- self.assertEqual(r.id, r.place_ptr_id)
- orig_id = r.id
- r = Restaurant(place_ptr_id=orig_id, serves_pizza=True)
- r.save()
- self.assertEqual(r.id, orig_id)
- self.assertEqual(r.id, r.place_ptr_id)
-
- def test_issue_7488(self):
- # Regression test for #7488. This looks a little crazy, but it's the
- # equivalent of what the admin interface has to do for the edit-inline
- # case.
- suppliers = Supplier.objects.filter(
- restaurant=Restaurant(name='xx', address='yy'))
- suppliers = list(suppliers)
- self.assertEqual(suppliers, [])
-
- def test_issue_11764(self):
- """
- Regression test for #11764
- """
- wholesalers = list(Wholesaler.objects.all().select_related())
- self.assertEqual(wholesalers, [])
-
- def test_issue_7853(self):
- """
- Regression test for #7853
- If the parent class has a self-referential link, make sure that any
- updates to that link via the child update the right table.
- """
- obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
- obj.delete()
-
- def test_get_next_previous_by_date(self):
- """
- Regression tests for #8076
- get_(next/previous)_by_date should work
- """
- c1 = ArticleWithAuthor(
- headline='ArticleWithAuthor 1',
- author="Person 1",
- pub_date=datetime.datetime(2005, 8, 1, 3, 0))
- c1.save()
- c2 = ArticleWithAuthor(
- headline='ArticleWithAuthor 2',
- author="Person 2",
- pub_date=datetime.datetime(2005, 8, 1, 10, 0))
- c2.save()
- c3 = ArticleWithAuthor(
- headline='ArticleWithAuthor 3',
- author="Person 3",
- pub_date=datetime.datetime(2005, 8, 2))
- c3.save()
-
- self.assertEqual(c1.get_next_by_pub_date(), c2)
- self.assertEqual(c2.get_next_by_pub_date(), c3)
- self.assertRaises(
- ArticleWithAuthor.DoesNotExist,
- c3.get_next_by_pub_date)
- self.assertEqual(c3.get_previous_by_pub_date(), c2)
- self.assertEqual(c2.get_previous_by_pub_date(), c1)
- self.assertRaises(
- ArticleWithAuthor.DoesNotExist,
- c1.get_previous_by_pub_date)
-
- def test_inherited_fields(self):
- """
- Regression test for #8825 and #9390
- Make sure all inherited fields (esp. m2m fields, in this case) appear
- on the child class.
- """
- m2mchildren = list(M2MChild.objects.filter(articles__isnull=False))
- self.assertEqual(m2mchildren, [])
-
- # Ordering should not include any database column more than once (this
- # is most likely to ocurr naturally with model inheritance, so we
- # check it here). Regression test for #9390. This necessarily pokes at
- # the SQL string for the query, since the duplicate problems are only
- # apparent at that late stage.
- qs = ArticleWithAuthor.objects.order_by('pub_date', 'pk')
- sql = qs.query.get_compiler(qs.db).as_sql()[0]
- fragment = sql[sql.find('ORDER BY'):]
- pos = fragment.find('pub_date')
- self.assertEqual(fragment.find('pub_date', pos + 1), -1)
-
- def test_queryset_update_on_parent_model(self):
- """
- Regression test for #10362
- It is possible to call update() and only change a field in
- an ancestor model.
- """
- article = ArticleWithAuthor.objects.create(
- author="fred",
- headline="Hey there!",
- pub_date=datetime.datetime(2009, 3, 1, 8, 0, 0))
- update = ArticleWithAuthor.objects.filter(
- author="fred").update(headline="Oh, no!")
- self.assertEqual(update, 1)
- update = ArticleWithAuthor.objects.filter(
- pk=article.pk).update(headline="Oh, no!")
- self.assertEqual(update, 1)
-
- derivedm1 = DerivedM.objects.create(
- customPK=44,
- base_name="b1",
- derived_name="d1")
- self.assertEqual(derivedm1.customPK, 44)
- self.assertEqual(derivedm1.base_name, 'b1')
- self.assertEqual(derivedm1.derived_name, 'd1')
- derivedms = list(DerivedM.objects.all())
- self.assertEqual(derivedms, [derivedm1])
-
- def test_use_explicit_o2o_to_parent_as_pk(self):
- """
- Regression tests for #10406
- If there's a one-to-one link between a child model and the parent and
- no explicit pk declared, we can use the one-to-one link as the pk on
- the child.
- """
- self.assertEqual(ParkingLot2._meta.pk.name, "parent")
-
- # However, the connector from child to parent need not be the pk on
- # the child at all.
- self.assertEqual(ParkingLot3._meta.pk.name, "primary_key")
- # the child->parent link
- self.assertEqual(
- ParkingLot3._meta.get_ancestor_link(Place).name,
- "parent")
-
- def test_all_fields_from_abstract_base_class(self):
- """
- Regression tests for #7588
- """
- # All fields from an ABC, including those inherited non-abstractly
- # should be available on child classes (#7588). Creating this instance
- # should work without error.
- QualityControl.objects.create(
- headline="Problems in Django",
- pub_date=datetime.datetime.now(),
- quality=10,
- assignee="adrian")
-
- def test_abstract_base_class_m2m_relation_inheritance(self):
- # Check that many-to-many relations defined on an abstract base class
- # are correctly inherited (and created) on the child class.
- p1 = Person.objects.create(name='Alice')
- p2 = Person.objects.create(name='Bob')
- p3 = Person.objects.create(name='Carol')
- p4 = Person.objects.create(name='Dave')
-
- birthday = BirthdayParty.objects.create(
- name='Birthday party for Alice')
- birthday.attendees = [p1, p3]
-
- bachelor = BachelorParty.objects.create(name='Bachelor party for Bob')
- bachelor.attendees = [p2, p4]
-
- parties = list(p1.birthdayparty_set.all())
- self.assertEqual(parties, [birthday])
-
- parties = list(p1.bachelorparty_set.all())
- self.assertEqual(parties, [])
-
- parties = list(p2.bachelorparty_set.all())
- self.assertEqual(parties, [bachelor])
-
- # Check that a subclass of a subclass of an abstract model doesn't get
- # it's own accessor.
- self.assertFalse(hasattr(p2, 'messybachelorparty_set'))
-
- # ... but it does inherit the m2m from it's parent
- messy = MessyBachelorParty.objects.create(
- name='Bachelor party for Dave')
- messy.attendees = [p4]
- messy_parent = messy.bachelorparty_ptr
-
- parties = list(p4.bachelorparty_set.all())
- self.assertEqual(parties, [bachelor, messy_parent])
-
- def test_11369(self):
- """
- verbose_name_plural correctly inherited from ABC if inheritance chain
- includes an abstract model.
- """
- # Regression test for #11369: verbose_name_plural should be inherited
- # from an ABC even when there are one or more intermediate
- # abstract models in the inheritance chain, for consistency with
- # verbose_name.
- self.assertEquals(
- InternalCertificationAudit._meta.verbose_name_plural,
- u'Audits'
- )
-
- def test_inherited_nullable_exclude(self):
- obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
- self.assertQuerysetEqual(
- SelfRefParent.objects.exclude(self_data=72), [
- obj.pk
- ],
- attrgetter("pk")
- )
- self.assertQuerysetEqual(
- SelfRefChild.objects.exclude(self_data=72), [
- obj.pk
- ],
- attrgetter("pk")
- )