diff options
Diffstat (limited to 'parts/django/tests/regressiontests/context_processors')
13 files changed, 203 insertions, 0 deletions
diff --git a/parts/django/tests/regressiontests/context_processors/__init__.py b/parts/django/tests/regressiontests/context_processors/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/__init__.py diff --git a/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml b/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml new file mode 100644 index 0000000..aba8f4a --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<django-objects version="1.0"> + <object pk="100" model="auth.user"> + <field type="CharField" name="username">super</field> + <field type="CharField" name="first_name">Super</field> + <field type="CharField" name="last_name">User</field> + <field type="CharField" name="email">super@example.com</field> + <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field> + <field type="BooleanField" name="is_staff">True</field> + <field type="BooleanField" name="is_active">True</field> + <field type="BooleanField" name="is_superuser">True</field> + <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field> + <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field> + <field to="auth.group" name="groups" rel="ManyToManyRel"></field> + <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field> + </object> +</django-objects> diff --git a/parts/django/tests/regressiontests/context_processors/models.py b/parts/django/tests/regressiontests/context_processors/models.py new file mode 100644 index 0000000..cde172d --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/models.py @@ -0,0 +1 @@ +# Models file for tests to run. diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html new file mode 100644 index 0000000..b5c65db --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html @@ -0,0 +1 @@ +{{ user }} diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html new file mode 100644 index 0000000..7b7e448 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html @@ -0,0 +1 @@ +{% for m in messages %}{{ m }}{% endfor %} diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html @@ -0,0 +1 @@ + diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html new file mode 100644 index 0000000..a5db868 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html @@ -0,0 +1 @@ +{% if perms.auth %}Has auth permissions{% endif %} diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html new file mode 100644 index 0000000..a28ff93 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html @@ -0,0 +1 @@ +{% if session_accessed %}Session accessed{% else %}Session not accessed{% endif %} diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html new file mode 100644 index 0000000..7ed16d7 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html @@ -0,0 +1,4 @@ +unicode: {{ user }} +id: {{ user.id }} +username: {{ user.username }} +url: {% url userpage user %} diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html new file mode 100644 index 0000000..3978e9d --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html @@ -0,0 +1,13 @@ +{% if request %} +Have request +{% else %} +No request +{% endif %} + +{% if request.is_secure %} +Secure +{% else %} +Not secure +{% endif %} + +{{ request.path }} diff --git a/parts/django/tests/regressiontests/context_processors/tests.py b/parts/django/tests/regressiontests/context_processors/tests.py new file mode 100644 index 0000000..0d19bef --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/tests.py @@ -0,0 +1,112 @@ +""" +Tests for Django's bundled context processors. +""" + +from django.conf import settings +from django.contrib.auth import authenticate +from django.db.models import Q +from django.test import TestCase +from django.template import Template + +class RequestContextProcessorTests(TestCase): + """ + Tests for the ``django.core.context_processors.request`` processor. + """ + + urls = 'regressiontests.context_processors.urls' + + def test_request_attributes(self): + """ + Test that the request object is available in the template and that its + attributes can't be overridden by GET and POST parameters (#3828). + """ + url = '/request_attrs/' + # We should have the request object in the template. + response = self.client.get(url) + self.assertContains(response, 'Have request') + # Test is_secure. + response = self.client.get(url) + self.assertContains(response, 'Not secure') + response = self.client.get(url, {'is_secure': 'blah'}) + self.assertContains(response, 'Not secure') + response = self.client.post(url, {'is_secure': 'blah'}) + self.assertContains(response, 'Not secure') + # Test path. + response = self.client.get(url) + self.assertContains(response, url) + response = self.client.get(url, {'path': '/blah/'}) + self.assertContains(response, url) + response = self.client.post(url, {'path': '/blah/'}) + self.assertContains(response, url) + +class AuthContextProcessorTests(TestCase): + """ + Tests for the ``django.contrib.auth.context_processors.auth`` processor + """ + urls = 'regressiontests.context_processors.urls' + fixtures = ['context-processors-users.xml'] + + def test_session_not_accessed(self): + """ + Tests that the session is not accessed simply by including + the auth context processor + """ + response = self.client.get('/auth_processor_no_attr_access/') + self.assertContains(response, "Session not accessed") + + def test_session_is_accessed(self): + """ + Tests that the session is accessed if the auth context processor + is used and relevant attributes accessed. + """ + response = self.client.get('/auth_processor_attr_access/') + self.assertContains(response, "Session accessed") + + def test_perms_attrs(self): + self.client.login(username='super', password='secret') + response = self.client.get('/auth_processor_perms/') + self.assertContains(response, "Has auth permissions") + + def test_message_attrs(self): + self.client.login(username='super', password='secret') + response = self.client.get('/auth_processor_messages/') + self.assertContains(response, "Message 1") + + def test_user_attrs(self): + """ + Test that the lazy objects returned behave just like the wrapped objects. + """ + # These are 'functional' level tests for common use cases. Direct + # testing of the implementation (SimpleLazyObject) is in the 'utils' + # tests. + self.client.login(username='super', password='secret') + user = authenticate(username='super', password='secret') + response = self.client.get('/auth_processor_user/') + self.assertContains(response, "unicode: super") + self.assertContains(response, "id: 100") + self.assertContains(response, "username: super") + # bug #12037 is tested by the {% url %} in the template: + self.assertContains(response, "url: /userpage/super/") + + # See if this object can be used for queries where a Q() comparing + # a user can be used with another Q() (in an AND or OR fashion). + # This simulates what a template tag might do with the user from the + # context. Note that we don't need to execute a query, just build it. + # + # The failure case (bug #12049) on Python 2.4 with a LazyObject-wrapped + # User is a fatal TypeError: "function() takes at least 2 arguments + # (0 given)" deep inside deepcopy(). + # + # Python 2.5 and 2.6 succeeded, but logged internally caught exception + # spew: + # + # Exception RuntimeError: 'maximum recursion depth exceeded while + # calling a Python object' in <type 'exceptions.AttributeError'> + # ignored" + query = Q(user=response.context['user']) & Q(someflag=True) + + # Tests for user equality. This is hard because User defines + # equality in a non-duck-typing way + # See bug #12060 + self.assertEqual(response.context['user'], user) + self.assertEqual(user, response.context['user']) diff --git a/parts/django/tests/regressiontests/context_processors/urls.py b/parts/django/tests/regressiontests/context_processors/urls.py new file mode 100644 index 0000000..30728c8 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/urls.py @@ -0,0 +1,14 @@ +from django.conf.urls.defaults import * + +import views + + +urlpatterns = patterns('', + (r'^request_attrs/$', views.request_processor), + (r'^auth_processor_no_attr_access/$', views.auth_processor_no_attr_access), + (r'^auth_processor_attr_access/$', views.auth_processor_attr_access), + (r'^auth_processor_user/$', views.auth_processor_user), + (r'^auth_processor_perms/$', views.auth_processor_perms), + (r'^auth_processor_messages/$', views.auth_processor_messages), + url(r'^userpage/(.+)/$', views.userpage, name="userpage"), +) diff --git a/parts/django/tests/regressiontests/context_processors/views.py b/parts/django/tests/regressiontests/context_processors/views.py new file mode 100644 index 0000000..3f2dcb0 --- /dev/null +++ b/parts/django/tests/regressiontests/context_processors/views.py @@ -0,0 +1,37 @@ +from django.core import context_processors +from django.shortcuts import render_to_response +from django.template.context import RequestContext + + +def request_processor(request): + return render_to_response('context_processors/request_attrs.html', + RequestContext(request, {}, processors=[context_processors.request])) + +def auth_processor_no_attr_access(request): + r1 = render_to_response('context_processors/auth_attrs_no_access.html', + RequestContext(request, {}, processors=[context_processors.auth])) + # *After* rendering, we check whether the session was accessed + return render_to_response('context_processors/auth_attrs_test_access.html', + {'session_accessed':request.session.accessed}) + +def auth_processor_attr_access(request): + r1 = render_to_response('context_processors/auth_attrs_access.html', + RequestContext(request, {}, processors=[context_processors.auth])) + return render_to_response('context_processors/auth_attrs_test_access.html', + {'session_accessed':request.session.accessed}) + +def auth_processor_user(request): + return render_to_response('context_processors/auth_attrs_user.html', + RequestContext(request, {}, processors=[context_processors.auth])) + +def auth_processor_perms(request): + return render_to_response('context_processors/auth_attrs_perms.html', + RequestContext(request, {}, processors=[context_processors.auth])) + +def auth_processor_messages(request): + request.user.message_set.create(message="Message 1") + return render_to_response('context_processors/auth_attrs_messages.html', + RequestContext(request, {}, processors=[context_processors.auth])) + +def userpage(request): + pass |