Author: kkubasik
Date: 2009-07-01 05:39:21 -0500 (Wed, 01 Jul 2009)
New Revision: 11137
Added:
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/test_models.py
Modified:
django/branches/soc2009/test-improvements/
django/branches/soc2009/test-improvements/django/test/testcases.py
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/tests.py
django/branches/soc2009/test-improvements/tests/runtests.py
Log:
[gsoc2009-testing] Add test_models loading code. Not very clean yet, but it
works
Property changes on: django/branches/soc2009/test-improvements
___________________________________________________________________
Name: svk:merge
- 23ef3597-c209-482b-90c0-ea6045f15f7f:/local/django-gsoc:10951
23ef3597-c209-482b-90c0-ea6045f15f7f:/local/django/trunk:10927
bcc190cf-cafb-0310-a4f2-bffc1f526a37:/django/trunk:1054
+ 23ef3597-c209-482b-90c0-ea6045f15f7f:/local/django-gsoc:10952
23ef3597-c209-482b-90c0-ea6045f15f7f:/local/django/trunk:10927
bcc190cf-cafb-0310-a4f2-bffc1f526a37:/django/trunk:1054
Modified: django/branches/soc2009/test-improvements/django/test/testcases.py
===================================================================
--- django/branches/soc2009/test-improvements/django/test/testcases.py
2009-07-01 10:39:06 UTC (rev 11136)
+++ django/branches/soc2009/test-improvements/django/test/testcases.py
2009-07-01 10:39:21 UTC (rev 11137)
@@ -212,8 +212,11 @@
named fixtures.
* If the Test Case class has a 'urls' member, replace the
ROOT_URLCONF with it.
+ * If the Test Case class has a 'test_models' member, load the
relivent
+ named models.
* Clearing the mail test outbox.
"""
+ self._test_model_setup()
self._fixture_setup()
self._urlconf_setup()
mail.outbox = []
@@ -225,6 +228,35 @@
# that we're using *args and **kwargs together.
call_command('loaddata', *self.fixtures, **{'verbosity': 0})
+ def _test_model_setup(self):
+ if hasattr(self, 'test_models'):
+ print self.test_models
+ if self.__module__.endswith('tests'):
+ app_label = self.__module__.split('.')[:-1][-1]
+ else:
+ app_label = self.__module__.split('.')[:-2][-1]
+ from django.db.models.loading import cache
+ from django.utils import importlib
+ from django.db import models
+ #importlib.import_module()
+ cache.write_lock.acquire()
+ try:
+ app_mods = cache.app_models[app_label]
+ for tm in self.test_models:
+ print "importing %s " % tm
+ im = importlib.import_module(tm)
+ #cache.app_store[im] = len(cache.app_store)
+ print "finding model classes"
+ mod_classes = [f for f in im.__dict__.values() if
hasattr(f,'__bases__') and issubclass(f,models.Model)]
+ print "Found models %s " % mod_classes
+ for mc in mod_classes:
+ print "Adding %s to AppCache" % mc
+ app_mods[mc.__name__.lower()] = mc
+ finally:
+ cache.write_lock.release()
+ #call_command('syncdb', **{'verbosity': 0})
+
+
def _urlconf_setup(self):
if hasattr(self, 'urls'):
self._old_root_urlconf = settings.ROOT_URLCONF
@@ -261,12 +293,53 @@
* Putting back the original ROOT_URLCONF if it was changed.
"""
+ self._test_model_teardown()
self._fixture_teardown()
self._urlconf_teardown()
def _fixture_teardown(self):
pass
+ def _test_model_teardown(self):
+ if hasattr(self, 'test_models'):
+ print self.test_models
+ if self.__module__.endswith('tests'):
+ app_label = self.__module__.split('.')[:-1][-1]
+ else:
+ app_label = self.__module__.split('.')[:-2][-1]
+ from django.db.models.loading import cache
+ from django.utils import importlib
+ from django.db import models
+ #importlib.import_module()
+ # cc = cache.get_app(app_label)
+ # del cache.app_store[cc]
+ # #del cache.app_models[app_label]
+ # cache.loaded = False
+ # print cache.handled
+ # print '.'.join(cc.__name__.split('.')[:-1])
+ # print cc.__package__
+ # del cache.handled[cc.__package__]
+ # cache._populate()
+ # print cache.get_app(app_label)
+ #cc = cache.get_app(app_label)
+
+ #reload(cache.get_app(app_label))
+ cache.write_lock.acquire()
+ try:
+ app_mods = cache.app_models[app_label]
+ print app_mods
+ for tm in self.test_models:
+ print "importing %s " % tm
+ im = importlib.import_module(tm)
+ #cache.app_store[im] = len(cache.app_store)
+ print "finding model classes"
+ mod_classes = [f for f in im.__dict__.values() if
hasattr(f,'__bases__') and issubclass(f,models.Model)]
+ print "Found models %s " % mod_classes
+ for mc in mod_classes:
+ print "Deleting %s from AppCache" % mc
+ del app_mods[mc.__name__.lower()]
+ finally:
+ cache.write_lock.release()
def _urlconf_teardown(self):
if hasattr(self, '_old_root_urlconf'):
settings.ROOT_URLCONF = self._old_root_urlconf
Added:
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/test_models.py
===================================================================
---
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/test_models.py
(rev 0)
+++
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/test_models.py
2009-07-01 10:39:21 UTC (rev 11137)
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+import tempfile
+import os
+from django.core.files.storage import FileSystemStorage
+from django.db import models
+from django.contrib import admin
+from django.core.mail import EmailMessage
+
+class SectionTest(models.Model):
+ """
+ A simple section that links to articles, to test linking to related items
+ in admin views.
+ """
+ name = models.CharField(max_length=100)
+
+admin.site.register(SectionTest, save_as=True)
\ No newline at end of file
Modified:
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/tests.py
===================================================================
---
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/tests.py
2009-07-01 10:39:06 UTC (rev 11136)
+++
django/branches/soc2009/test-improvements/tests/regressiontests/admin_views/tests.py
2009-07-01 10:39:21 UTC (rev 11137)
@@ -18,6 +18,8 @@
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, \
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit
+from test_models import SectionTest
+
try:
set
except NameError:
@@ -25,16 +27,20 @@
class AdminViewBasicTest(TestCase):
fixtures = ['admin-views-users.xml', 'admin-views-colors.xml',
'admin-views-fabrics.xml']
-
+ test_models = ['regressiontests.admin_views.test_models']
# Store the bit of the URL where the admin is registered as a class
# variable. That way we can test a second AdminSite just by subclassing
# this test case and changing urlbit.
urlbit = 'admin'
def setUp(self):
+ from django.contrib import admin
+ admin.autodiscover()
self.client.login(username='super', password='secret')
def tearDown(self):
+ from django.contrib import admin
+ admin.autodiscover()
self.client.logout()
def testTrailingSlashRequired(self):
@@ -53,6 +59,13 @@
response = self.client.get('/test_admin/%s/admin_views/section/add/' %
self.urlbit)
self.failUnlessEqual(response.status_code, 200)
+ def testBasicAddGetTest(self):
+ """
+ A smoke test to ensure GET on the add_view works.
+ """
+ response =
self.client.get('/test_admin/%s/admin_views/sectiontest/add/' % self.urlbit)
+ self.failUnlessEqual(response.status_code, 200)
+
def testAddWithGETArgs(self):
response = self.client.get('/test_admin/%s/admin_views/section/add/' %
self.urlbit, {'name': 'My Section'})
self.failUnlessEqual(response.status_code, 200)
@@ -280,6 +293,13 @@
self.client.login(username='super', password='secret')
response = self.client.get('/test_admin/%s/my_view/' % self.urlbit)
self.assert_(response.content == "Django is a magical pony!",
response.content)
+
+ def testBasicAddGetTest(self):
+ """
+ A smoke test to ensure GET on the add_view works.
+ """
+ response = self.client.get('/test_admin/%s/admin_views/section/add/' %
self.urlbit)
+ self.failUnlessEqual(response.status_code, 200)
def get_perm(Model, perm):
"""Return the permission object, for the Model"""
@@ -591,7 +611,18 @@
def tearDown(self):
self.client.logout()
-
+
+ def testBasicAddGetTest(self):
+ """
+ A smoke test to ensure GET on the add_view works.
+ """
+ from django.contrib import admin
+ admin.site.unregister(SectionTest)
+ import regressiontests.admin_views.urls
+ reload(regressiontests.admin_views.urls)
+ response =
self.client.get('/test_admin/admin/admin_views/sectiontest/add/')
+ self.failUnlessEqual(response.status_code, 404)
+
def test_get_change_view(self):
"Retrieving the object using urlencoded form of primary key should
work"
response =
self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' %
quote(self.pk))
Modified: django/branches/soc2009/test-improvements/tests/runtests.py
===================================================================
--- django/branches/soc2009/test-improvements/tests/runtests.py 2009-07-01
10:39:06 UTC (rev 11136)
+++ django/branches/soc2009/test-improvements/tests/runtests.py 2009-07-01
10:39:21 UTC (rev 11137)
@@ -1,5 +1,4 @@
#!/usr/bin/env python
-
import os, sys, traceback
import unittest
import django
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---