All,

I've looked everywhere in the Django unit tests and can't find anywhere 
that's testing these four signals:

pre_save
post_save
pre_delete
post_delete

I found the dispatcher tests, which cover all the generic bits, but 
nothing specifically for these model signals.

On the assumption that I'm not blind, I built a unit test for it, which 
I've posted below.  I've also attached the unit test to #4879 ( 
http://code.djangoproject.com/ticket/4879 ), because my unit test is 
dependent on the post_save signal created keyword.  It would be easy 
enough to strip it (the tests will pass after a few extra lines of 
output were removed, I'll do it if necessary), but I figured adding a 
unit test for it would make the ticket pretty painless for submission.

Thoughts?
gav




django/tests/modeltests/signals/models.py:

"""
Testing signals before/after saving and deleting.
"""

from django.db import models
from django.dispatch import dispatcher

class Person(models.Model):
     first_name = models.CharField(max_length=20)
     last_name = models.CharField(max_length=20)

     def __unicode__(self):
         return u"%s %s" % (self.first_name, self.last_name)


def pre_save_test(sender, instance, **kwargs):
     print 'pre_save signal,', instance

def post_save_test(sender, instance, **kwargs):
     print 'post_save signal,', instance
     if 'created' in kwargs:
         if kwargs['created']:
             print 'Is created'
         else:
             print 'Is updated'

def pre_delete_test(sender, instance, **kwargs):
     print 'pre_delete signal,', instance
     print 'instance.id is not None: %s' % (instance.id != None)

def post_delete_test(sender, instance, **kwargs):
     print 'post_delete signal,', instance
     print 'instance.id is None: %s' % (instance.id == None)

__test__ = {'API_TESTS':"""

 >>> dispatcher.connect(pre_save_test, signal=models.signals.pre_save)
 >>> dispatcher.connect(post_save_test, signal=models.signals.post_save)
 >>> dispatcher.connect(pre_delete_test, signal=models.signals.pre_delete)
 >>> dispatcher.connect(post_delete_test, signal=models.signals.post_delete)
 >>> p1 = Person(first_name='John', last_name='Smith')
 >>> p1.save()
pre_save signal, John Smith
post_save signal, John Smith
Is created

 >>> p1.first_name = 'Tom'
 >>> p1.save()
pre_save signal, Tom Smith
post_save signal, Tom Smith
Is updated

 >>> p1.delete()
pre_delete signal, Tom Smith
instance.id is not None: True
post_delete signal, Tom Smith
instance.id is None: True

 >>> p2 = Person(first_name='James', last_name='Jones')
 >>> p2.id = 99999
 >>> p2.save()
pre_save signal, James Jones
post_save signal, James Jones
Is created

 >>> p2.id = 99998
 >>> p2.save()
pre_save signal, James Jones
post_save signal, James Jones
Is created

 >>> p2.delete()
pre_delete signal, James Jones
instance.id is not None: True
post_delete signal, James Jones
instance.id is None: True

 >>> Person.objects.all()
[<Person: James Jones>]

 >>> dispatcher.disconnect(post_delete_test, 
signal=models.signals.post_delete)
 >>> dispatcher.disconnect(pre_delete_test, 
signal=models.signals.pre_delete)
 >>> dispatcher.disconnect(post_save_test, signal=models.signals.post_save)
 >>> dispatcher.disconnect(pre_save_test, signal=models.signals.pre_save)
"""}

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to