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')
71
74
def test_no_init_kwargs(self):
171
174
self.assertTrue(DecoratedDispatchView.as_view().is_decorated)
176
def test_options(self):
178
Test that views respond to HTTP OPTIONS requests with an Allow header
179
appropriate for the methods implemented by the view class.
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'])
187
def test_options_for_get_view(self):
189
Test that a view implementing GET allows GET and HEAD.
191
request = self.rf.options('/')
192
view = SimpleView.as_view()
193
response = view(request)
194
self._assert_allows(response, 'GET', 'HEAD')
196
def test_options_for_get_and_post_view(self):
198
Test that a view implementing GET and POST allows GET, HEAD, and POST.
200
request = self.rf.options('/')
201
view = SimplePostView.as_view()
202
response = view(request)
203
self._assert_allows(response, 'GET', 'HEAD', 'POST')
205
def test_options_for_post_view(self):
207
Test that a view implementing POST allows POST.
209
request = self.rf.options('/')
210
view = PostOnlyView.as_view()
211
response = view(request)
212
self._assert_allows(response, 'POST')
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)
219
def test_args_kwargs_request_on_self(self):
221
Test a view only has args, kwargs & request once `as_view`
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))
174
231
class TemplateViewTest(TestCase):
175
232
urls = 'regressiontests.generic_views.urls'
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))
225
283
def test_extra_template_params(self):
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))
234
293
def test_cached_views(self):
254
313
self.assertNotEqual(response.content, response2.content)
315
def test_content_type(self):
316
response = self.client.get('/template/content_type/')
317
self.assertEqual(response['Content-Type'], 'text/plain')
256
320
class RedirectViewTest(unittest.TestCase):
257
321
rf = RequestFactory()
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)
400
class GetContextDataTest(unittest.TestCase):
402
def test_get_context_data_super(self):
403
test_view = views.CustomContextView()
404
context = test_view.get_context_data(kwarg_test='kwarg_value')
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')
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')