Package django :: Package contrib :: Package contenttypes :: Module tests
[hide private]
[frames] | no frames]

Module tests

source code

Make sure that the content type cache (see ContentTypeManager) works correctly. Lookups for a particular content type -- by model or by ID -- should hit the database only on the first lookup.

First, let's make sure we're dealing with a blank slate (and that DEBUG is on so that queries get logged):

   >>> from django.conf import settings
   >>> settings.DEBUG = True

   >>> from django.contrib.contenttypes.models import ContentType
   >>> ContentType.objects.clear_cache()

   >>> from django import db
   >>> db.reset_queries()

At this point, a lookup for a ContentType should hit the DB:

   >>> ContentType.objects.get_for_model(ContentType)
   <ContentType: content type>
   
   >>> len(db.connection.queries)
   1

A second hit, though, won't hit the DB, nor will a lookup by ID:

   >>> ct = ContentType.objects.get_for_model(ContentType)
   >>> len(db.connection.queries)
   1
   >>> ContentType.objects.get_for_id(ct.id)
   <ContentType: content type>
   >>> len(db.connection.queries)
   1

Once we clear the cache, another lookup will again hit the DB:

   >>> ContentType.objects.clear_cache()
   >>> ContentType.objects.get_for_model(ContentType)
   <ContentType: content type>
   >>> len(db.connection.queries)
   2

Don't forget to reset DEBUG!

>>> settings.DEBUG = False