summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2012-04-06 21:24:33 +0000
committerClaude Paroz <claude@2xlibre.net>2012-04-06 21:24:33 +0000
commit8663bc110305844b2f8b0829ee2ddfc5be61b758 (patch)
treecf59ad66ba09f07bb9ac17161f260be636e63e9a /tests
parentb4a98271339e1595fc5e362da0d1b82b3c492448 (diff)
Fixed #16074 -- Added ContextMixin to class-based generic views to handle get_context_data. Thanks emyller, Luke Plant, Preston Holmes for working on the ticket and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17875 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/generic_views/base.py19
-rw-r--r--tests/regressiontests/generic_views/tests.py3
-rw-r--r--tests/regressiontests/generic_views/views.py22
3 files changed, 39 insertions, 5 deletions
diff --git a/tests/regressiontests/generic_views/base.py b/tests/regressiontests/generic_views/base.py
index 6528dc6723..e18ed2a2a7 100644
--- a/tests/regressiontests/generic_views/base.py
+++ b/tests/regressiontests/generic_views/base.py
@@ -1,3 +1,5 @@
+from __future__ import absolute_import
+
import time
from django.core.exceptions import ImproperlyConfigured
@@ -6,6 +8,7 @@ from django.test import TestCase, RequestFactory
from django.utils import unittest
from django.views.generic import View, TemplateView, RedirectView
+from . import views
class SimpleView(View):
"""
@@ -331,3 +334,19 @@ class RedirectViewTest(unittest.TestCase):
# we can't use self.rf.get because it always sets QUERY_STRING
response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/'))
self.assertEqual(response.status_code, 301)
+
+
+class GetContextDataTest(unittest.TestCase):
+
+ def test_get_context_data_super(self):
+ test_view = views.CustomContextView()
+ context = test_view.get_context_data(kwarg_test='kwarg_value')
+
+ # the test_name key is inserted by the test classes parent
+ self.assertTrue('test_name' in context)
+ self.assertEqual(context['kwarg_test'], 'kwarg_value')
+ self.assertEqual(context['custom_key'], 'custom_value')
+
+ # test that kwarg overrides values assigned higher up
+ context = test_view.get_context_data(test_name='test_value')
+ self.assertEqual(context['test_name'], 'test_value')
diff --git a/tests/regressiontests/generic_views/tests.py b/tests/regressiontests/generic_views/tests.py
index 72aab035a8..c985ad3309 100644
--- a/tests/regressiontests/generic_views/tests.py
+++ b/tests/regressiontests/generic_views/tests.py
@@ -1,6 +1,7 @@
from __future__ import absolute_import
-from .base import ViewTest, TemplateViewTest, RedirectViewTest
+from .base import (ViewTest, TemplateViewTest, RedirectViewTest,
+ GetContextDataTest)
from .dates import (ArchiveIndexViewTests, YearArchiveViewTests,
MonthArchiveViewTests, WeekArchiveViewTests, DayArchiveViewTests,
DateDetailViewTests)
diff --git a/tests/regressiontests/generic_views/views.py b/tests/regressiontests/generic_views/views.py
index 5ff9cf0e65..1e70ba4b46 100644
--- a/tests/regressiontests/generic_views/views.py
+++ b/tests/regressiontests/generic_views/views.py
@@ -14,10 +14,9 @@ class CustomTemplateView(generic.TemplateView):
template_name = 'generic_views/about.html'
def get_context_data(self, **kwargs):
- return {
- 'params': kwargs,
- 'key': 'value'
- }
+ context = super(CustomTemplateView, self).get_context_data(**kwargs)
+ context.update({'key': 'value'})
+ return context
class ObjectDetail(generic.DetailView):
@@ -184,3 +183,18 @@ class BookDetailGetObjectCustomQueryset(BookDetail):
def get_object(self, queryset=None):
return super(BookDetailGetObjectCustomQueryset,self).get_object(
queryset=Book.objects.filter(pk=2))
+
+class CustomContextView(generic.detail.SingleObjectMixin, generic.View):
+ model = Book
+ object = Book(name='dummy')
+
+ def get_object(self):
+ return Book(name="dummy")
+
+ def get_context_data(self, **kwargs):
+ context = {'custom_key': 'custom_value'}
+ context.update(kwargs)
+ return super(CustomContextView, self).get_context_data(**context)
+
+ def get_context_object_name(self, obj):
+ return "test_name"