~ubuntu-branches/ubuntu/saucy/python-django/saucy-updates

« back to all changes in this revision

Viewing changes to tests/regressiontests/generic_views/base.py

  • Committer: Package Import Robot
  • Author(s): Luke Faraone, Jakub Wilk, Luke Faraone
  • Date: 2013-05-09 15:10:47 UTC
  • mfrom: (1.1.21) (4.4.27 sid)
  • Revision ID: package-import@ubuntu.com-20130509151047-aqv8d71oj9wvcv8c
Tags: 1.5.1-2
[ Jakub Wilk ]
* Use canonical URIs for Vcs-* fields.

[ Luke Faraone ]
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from __future__ import absolute_import
 
2
 
1
3
import time
2
4
 
3
5
from django.core.exceptions import ImproperlyConfigured
6
8
from django.utils import unittest
7
9
from django.views.generic import View, TemplateView, RedirectView
8
10
 
 
11
from . import views
9
12
 
10
13
class SimpleView(View):
11
14
    """
66
69
 
67
70
    def _assert_simple(self, response):
68
71
        self.assertEqual(response.status_code, 200)
69
 
        self.assertEqual(response.content, 'This is a simple view')
 
72
        self.assertEqual(response.content, b'This is a simple view')
70
73
 
71
74
    def test_no_init_kwargs(self):
72
75
        """
170
173
        """
171
174
        self.assertTrue(DecoratedDispatchView.as_view().is_decorated)
172
175
 
 
176
    def test_options(self):
 
177
        """
 
178
        Test that views respond to HTTP OPTIONS requests with an Allow header
 
179
        appropriate for the methods implemented by the view class.
 
180
        """
 
181
        request = self.rf.options('/')
 
182
        view = SimpleView.as_view()
 
183
        response = view(request)
 
184
        self.assertEqual(200, response.status_code)
 
185
        self.assertTrue(response['Allow'])
 
186
 
 
187
    def test_options_for_get_view(self):
 
188
        """
 
189
        Test that a view implementing GET allows GET and HEAD.
 
190
        """
 
191
        request = self.rf.options('/')
 
192
        view = SimpleView.as_view()
 
193
        response = view(request)
 
194
        self._assert_allows(response, 'GET', 'HEAD')
 
195
 
 
196
    def test_options_for_get_and_post_view(self):
 
197
        """
 
198
        Test that a view implementing GET and POST allows GET, HEAD, and POST.
 
199
        """
 
200
        request = self.rf.options('/')
 
201
        view = SimplePostView.as_view()
 
202
        response = view(request)
 
203
        self._assert_allows(response, 'GET', 'HEAD', 'POST')
 
204
 
 
205
    def test_options_for_post_view(self):
 
206
        """
 
207
        Test that a view implementing POST allows POST.
 
208
        """
 
209
        request = self.rf.options('/')
 
210
        view = PostOnlyView.as_view()
 
211
        response = view(request)
 
212
        self._assert_allows(response, 'POST')
 
213
 
 
214
    def _assert_allows(self, response, *expected_methods):
 
215
        "Assert allowed HTTP methods reported in the Allow response header"
 
216
        response_allows = set(response['Allow'].split(', '))
 
217
        self.assertEqual(set(expected_methods + ('OPTIONS',)), response_allows)
 
218
 
 
219
    def test_args_kwargs_request_on_self(self):
 
220
        """
 
221
        Test a view only has args, kwargs & request once `as_view`
 
222
        has been called.
 
223
        """
 
224
        bare_view = InstanceView()
 
225
        view = InstanceView.as_view()(self.rf.get('/'))
 
226
        for attribute in ('args', 'kwargs', 'request'):
 
227
            self.assertNotIn(attribute, dir(bare_view))
 
228
            self.assertIn(attribute, dir(view))
 
229
 
173
230
 
174
231
class TemplateViewTest(TestCase):
175
232
    urls = 'regressiontests.generic_views.urls'
220
277
        """
221
278
        response = self.client.get('/template/simple/bar/')
222
279
        self.assertEqual(response.status_code, 200)
223
 
        self.assertEqual(response.context['params'], {'foo': 'bar'})
 
280
        self.assertEqual(response.context['foo'], 'bar')
 
281
        self.assertTrue(isinstance(response.context['view'], View))
224
282
 
225
283
    def test_extra_template_params(self):
226
284
        """
228
286
        """
229
287
        response = self.client.get('/template/custom/bar/')
230
288
        self.assertEqual(response.status_code, 200)
231
 
        self.assertEqual(response.context['params'], {'foo': 'bar'})
 
289
        self.assertEqual(response.context['foo'], 'bar')
232
290
        self.assertEqual(response.context['key'], 'value')
 
291
        self.assertTrue(isinstance(response.context['view'], View))
233
292
 
234
293
    def test_cached_views(self):
235
294
        """
253
312
 
254
313
        self.assertNotEqual(response.content, response2.content)
255
314
 
 
315
    def test_content_type(self):
 
316
        response = self.client.get('/template/content_type/')
 
317
        self.assertEqual(response['Content-Type'], 'text/plain')
 
318
 
 
319
 
256
320
class RedirectViewTest(unittest.TestCase):
257
321
    rf = RequestFactory()
258
322
 
331
395
        # we can't use self.rf.get because it always sets QUERY_STRING
332
396
        response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/'))
333
397
        self.assertEqual(response.status_code, 301)
 
398
 
 
399
 
 
400
class GetContextDataTest(unittest.TestCase):
 
401
 
 
402
    def test_get_context_data_super(self):
 
403
        test_view = views.CustomContextView()
 
404
        context = test_view.get_context_data(kwarg_test='kwarg_value')
 
405
 
 
406
        # the test_name key is inserted by the test classes parent
 
407
        self.assertTrue('test_name' in context)
 
408
        self.assertEqual(context['kwarg_test'], 'kwarg_value')
 
409
        self.assertEqual(context['custom_key'], 'custom_value')
 
410
 
 
411
        # test that kwarg overrides values assigned higher up
 
412
        context = test_view.get_context_data(test_name='test_value')
 
413
        self.assertEqual(context['test_name'], 'test_value')