1 | from django.conf import settings
|
---|
2 | from django.core.urlresolvers import reverse
|
---|
3 | from django.test import TestCase
|
---|
4 | from django.conf import urls as url_handlers
|
---|
5 | from django.template import Context, Template
|
---|
6 | from django.contrib.messages.tests import urls
|
---|
7 | from django import http
|
---|
8 | from django.test.utils import override_settings
|
---|
9 | from django.contrib.messages import constants
|
---|
10 | from django.contrib.messages.api import MessageFailure
|
---|
11 |
|
---|
12 |
|
---|
13 | class Test500(TestCase):
|
---|
14 |
|
---|
15 | def render_error(self, *args, **kw):
|
---|
16 | error_template = Template("{% url about-site %}")
|
---|
17 | # This template will work, because it doesn't do a reverse match on
|
---|
18 | # on something on the destroyed ROOT_URLCONF.
|
---|
19 | #error_template = Template("works")
|
---|
20 | return http.HttpResponse(error_template.render(Context({})))
|
---|
21 |
|
---|
22 | # These are the override_settings defined in the contrib/messages/tests/base.py,
|
---|
23 | # copied here so you don't get lead astray
|
---|
24 | @override_settings(
|
---|
25 | INSTALLED_APPS=filter(
|
---|
26 | lambda app:app!='django.contrib.messages', settings.INSTALLED_APPS),
|
---|
27 | MIDDLEWARE_CLASSES=filter(
|
---|
28 | lambda m:'MessageMiddleware' not in m, settings.MIDDLEWARE_CLASSES),
|
---|
29 | TEMPLATE_CONTEXT_PROCESSORS=filter(
|
---|
30 | lambda p:'context_processors.messages' not in p,
|
---|
31 | settings.TEMPLATE_CONTEXT_PROCESSORS),
|
---|
32 | MESSAGE_LEVEL=constants.DEBUG
|
---|
33 | )
|
---|
34 | def test_error_handling_page(self):
|
---|
35 | # This is the key here. This is done in django/test/testcases.py _urlconf_setup.
|
---|
36 | # Where the url conf is overridden in the test.
|
---|
37 | settings.ROOT_URLCONF = urls
|
---|
38 | # When the client has a problem and raises the 500 message down below, it will
|
---|
39 | # propogate up the handler 500 specified here.
|
---|
40 | url_handlers.handler500 = self.render_error
|
---|
41 | show_url = reverse('django.contrib.messages.tests.urls.show')
|
---|
42 | add_url = reverse('django.contrib.messages.tests.urls.add', args=('warning',))
|
---|
43 | data = {
|
---|
44 | 'messages': ['Test message %d' % x for x in xrange(10)],
|
---|
45 | }
|
---|
46 | # This is copied from contrib/messages/tests/base.py and will raise a MessageFailure error
|
---|
47 | #
|
---|
48 | # So really the problem is that we are testing the propogation into the 500 handler
|
---|
49 | # as well. We shouldn't be doing all that, what we should be doing is the following.
|
---|
50 | # Then render_error never gets called.
|
---|
51 | #settings.DEBUG = True
|
---|
52 | #settings.DEBUG_PROPAGATE_EXCEPTION = True
|
---|
53 | self.assertRaises(MessageFailure, self.client.post, add_url, data, follow=True)
|
---|