|
23 | 23 | from __future__ import unicode_literals |
24 | 24 |
|
25 | 25 | from django.core import mail |
| 26 | +from django.http import HttpResponse |
26 | 27 | from django.test import Client, TestCase, RequestFactory |
27 | 28 | from django.test import override_settings |
28 | 29 |
|
29 | | -from .views import get_view |
| 30 | +from .views import get_view, post_view, trace_view |
30 | 31 |
|
31 | 32 |
|
32 | 33 | @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',), |
@@ -79,6 +80,13 @@ def test_post(self): |
79 | 80 | self.assertEqual(response.templates[0].name, 'POST Template') |
80 | 81 | self.assertContains(response, 'Data received') |
81 | 82 |
|
| 83 | + def test_trace(self): |
| 84 | + """TRACE a view""" |
| 85 | + response = self.client.trace('/trace_view/') |
| 86 | + self.assertEqual(response.status_code, 200) |
| 87 | + self.assertEqual(response.context['method'], 'TRACE') |
| 88 | + self.assertEqual(response.templates[0].name, 'TRACE Template') |
| 89 | + |
82 | 90 | def test_response_headers(self): |
83 | 91 | "Check the value of HTTP headers returned in a response" |
84 | 92 | response = self.client.get("/header_view/") |
@@ -552,13 +560,54 @@ def test_custom_test_client(self): |
552 | 560 | self.assertEqual(hasattr(self.client, "i_am_customized"), True) |
553 | 561 |
|
554 | 562 |
|
| 563 | +_generic_view = lambda request: HttpResponse(status=200) |
| 564 | + |
| 565 | + |
555 | 566 | @override_settings(ROOT_URLCONF='test_client.urls') |
556 | 567 | class RequestFactoryTest(TestCase): |
| 568 | + """Tests for the request factory.""" |
| 569 | + |
| 570 | + # A mapping between names of HTTP/1.1 methods and their test views. |
| 571 | + http_methods_and_views = ( |
| 572 | + ('get', get_view), |
| 573 | + ('post', post_view), |
| 574 | + ('put', _generic_view), |
| 575 | + ('patch', _generic_view), |
| 576 | + ('delete', _generic_view), |
| 577 | + ('head', _generic_view), |
| 578 | + ('options', _generic_view), |
| 579 | + ('trace', trace_view), |
| 580 | + ) |
| 581 | + |
| 582 | + def setUp(self): |
| 583 | + self.request_factory = RequestFactory() |
557 | 584 |
|
558 | 585 | def test_request_factory(self): |
559 | | - factory = RequestFactory() |
560 | | - request = factory.get('/somewhere/') |
| 586 | + """The request factory implements all the HTTP/1.1 methods.""" |
| 587 | + for method_name, view in self.http_methods_and_views: |
| 588 | + method = getattr(self.request_factory, method_name) |
| 589 | + request = method('/somewhere/') |
| 590 | + response = view(request) |
| 591 | + |
| 592 | + self.assertEqual(response.status_code, 200) |
| 593 | + |
| 594 | + def test_get_request_from_factory(self): |
| 595 | + """ |
| 596 | + The request factory returns a templated response for a GET request. |
| 597 | + """ |
| 598 | + request = self.request_factory.get('/somewhere/') |
561 | 599 | response = get_view(request) |
562 | 600 |
|
563 | 601 | self.assertEqual(response.status_code, 200) |
564 | 602 | self.assertContains(response, 'This is a test') |
| 603 | + |
| 604 | + def test_trace_request_from_factory(self): |
| 605 | + """The request factory returns an echo response for a TRACE request.""" |
| 606 | + url_path = '/somewhere/' |
| 607 | + request = self.request_factory.trace(url_path) |
| 608 | + response = trace_view(request) |
| 609 | + protocol = request.META["SERVER_PROTOCOL"] |
| 610 | + echoed_request_line = "TRACE {} {}".format(url_path, protocol) |
| 611 | + |
| 612 | + self.assertEqual(response.status_code, 200) |
| 613 | + self.assertContains(response, echoed_request_line) |
0 commit comments