forked from praekelt/django-object-tools
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Shaun Sephton
committed
Jul 13, 2011
1 parent
28a7771
commit d963095
Showing
6 changed files
with
563 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
import sys | ||
from unittest import TestCase | ||
|
||
from django.contrib.contenttypes.models import ContentType | ||
from django.core.exceptions import ImproperlyConfigured | ||
|
||
from object_tools import autodiscover | ||
from object_tools.options import ObjectTool | ||
from object_tools.sites import ObjectTools | ||
from object_tools.tests.tools import TestForm, TestTool, TestMediaTool, TestInvalidTool | ||
from object_tools.validation import validate | ||
|
||
class MockRequest(): | ||
method = 'POST' | ||
POST = () | ||
|
||
class InitTestCase(TestCase): | ||
def test_autodiscover(self): | ||
autodiscover() | ||
self.failUnless('object_tools.tests.tools' in sys.modules.keys(), 'Autodiscover should import tool modules from installed apps.') | ||
|
||
class ValidateTestCase(TestCase): | ||
""" | ||
Testcase testing object_tools.validation ObjectTool validation. | ||
""" | ||
def test_validation(self): | ||
# Fail without 'name' member. | ||
self.failUnlessRaises(ImproperlyConfigured, validate, TestInvalidTool, ContentType) | ||
try: | ||
validate(TestInvalidTool, ContentType) | ||
except ImproperlyConfigured, e: | ||
self.failUnlessEqual(e.message, "No 'name' attribute found for tool TestInvalidTool.") | ||
|
||
TestInvalidTool.name = 'test_invalid_tool' | ||
|
||
# Fail without 'form_class' member. | ||
self.failUnlessRaises(ImproperlyConfigured, validate, TestInvalidTool, ContentType) | ||
try: | ||
validate(TestInvalidTool, ContentType) | ||
except ImproperlyConfigured, e: | ||
self.failUnlessEqual(e.message, "No 'form_class' attribute found for tool TestInvalidTool.") | ||
|
||
TestInvalidTool.form_class = TestForm | ||
#validate(TestInvalidTool, ContentType) | ||
|
||
class ObjectToolsTestCase(TestCase): | ||
""" | ||
Testcase for object_tools.sites.ObjectTools. | ||
""" | ||
def test__init(self): | ||
# Check init results in expected members. | ||
tools = ObjectTools() | ||
self.failUnlessEqual(tools.name, 'object-tools') | ||
self.failUnlessEqual(tools.app_name, 'object-tools') | ||
self.failUnlessEqual(tools._registry, {}) | ||
|
||
def test_register(self): | ||
# Set DEBUG = True so validation is triggered. | ||
from django.conf import settings | ||
settings.DEBUG = True | ||
|
||
tools = ObjectTools() | ||
tools.register(TestTool) | ||
|
||
class ObjectToolTestCase(TestCase): | ||
""" | ||
Testcase for object_tools.options.ObjectTool. | ||
""" | ||
def test_init(self): | ||
tool = ObjectTool(ContentType) | ||
self.failUnless(tool.model == ContentType, 'Object Tool should have self.model set on init.') | ||
|
||
def test_construct_form(self): | ||
# Tool should provide form class. | ||
tool = ObjectTool(ContentType) | ||
self.failUnlessRaises(AttributeError, tool.construct_form, MockRequest()) | ||
tool = TestTool(ContentType) | ||
tool.construct_form(MockRequest()) | ||
|
||
def test_media(self): | ||
tool = TestTool(ContentType) | ||
form = tool.construct_form(MockRequest()) | ||
media = tool.media(form) | ||
|
||
#Media result should include default admin media. | ||
self.failUnlessEqual(media.render_js(), [u'<script type="text/javascript" src="/media/js/core.js"></script>', u'<script type="text/javascript" src="/media/js/admin/RelatedObjectLookups.js"></script>', u'<script type="text/javascript" src="/media/js/jquery.min.js"></script>', u'<script type="text/javascript" src="/media/js/jquery.init.js"></script>'], 'Media result should include default admin media.') | ||
|
||
tool = TestMediaTool(ContentType) | ||
form = tool.construct_form(MockRequest()) | ||
media = tool.media(form) | ||
|
||
#Media result should also include field specific media. | ||
self.failUnlessEqual(media.render_js(), [u'<script type="text/javascript" src="/media/js/core.js"></script>', u'<script type="text/javascript" src="/media/js/admin/RelatedObjectLookups.js"></script>', u'<script type="text/javascript" src="/media/js/jquery.min.js"></script>', u'<script type="text/javascript" src="/media/js/jquery.init.js"></script>', u'<script type="text/javascript" src="/media/js/calendar.js"></script>', u'<script type="text/javascript" src="/media/js/admin/DateTimeShortcuts.js"></script>']) | ||
|
||
def test_reverse(self): | ||
tool = TestTool(ContentType) | ||
self.failUnlessEqual(tool.reverse(), '/object-tools/contenttypes/contenttype/test_tool/', "Tool url reverse should reverse similar to how admin does, except pointing to the particular tool.") | ||
|
||
tool = TestMediaTool(ContentType) | ||
self.failUnlessEqual(tool.reverse(), '/object-tools/contenttypes/contenttype/test_media_tool/', "Tool url reverse should reverse similar to how admin does, except pointing to the particular tool.") | ||
|
||
def test_urls(self): | ||
tool = TestTool(ContentType) | ||
urls = tool.urls | ||
self.failUnlessEqual(len(urls), 1, 'urls property should only return 1 url') | ||
self.failUnlessEqual(urls[0].__repr__(), '<RegexURLPattern contenttypes_contenttype_test_tool ^test_tool/$>') | ||
self.failUnlessEqual(urls[0].name, 'contenttypes_contenttype_test_tool', 'URL should be named as "<app_label>_<module_name>_<tool_name>".') | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
from django import forms | ||
|
||
from django.contrib.admin.widgets import AdminSplitDateTime | ||
|
||
import object_tools | ||
|
||
class TestForm(forms.Form): | ||
pass | ||
|
||
class TestMediaForm(forms.Form): | ||
media_field = forms.fields.DateTimeField( | ||
widget = AdminSplitDateTime, | ||
) | ||
|
||
class TestTool(object_tools.ObjectTool): | ||
name = 'test_tool' | ||
form_class = TestForm | ||
pass | ||
|
||
class TestMediaTool(object_tools.ObjectTool): | ||
name = 'test_media_tool' | ||
form_class = TestMediaForm | ||
|
||
class TestInvalidTool(object_tools.ObjectTool): | ||
pass | ||
|
||
object_tools.tools.register(TestTool) | ||
object_tools.tools.register(TestMediaTool) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
from django.conf.urls.defaults import * | ||
|
||
import object_tools | ||
object_tools.autodiscover() | ||
|
||
urlpatterns = patterns('', | ||
(r'^object-tools/', include(object_tools.tools.urls)), | ||
) |
Oops, something went wrong.