Ticket #3432: test_client_unicode.py

File test_client_unicode.py, 3.0 KB (added by Simon Willison, 9 years ago)

Test demonstrating the bug

Line 
1from django.test.client import Client
2import unittest
3import settings
4
5class TestPostGetPost(unittest.TestCase):
6
7    def echo_view(self, request):
8        # Django view, gets monkey-patched in to urls.py
9        from django.http import HttpResponse
10        response = HttpResponse()
11        response.write(request.method + '\n')
12        keys = request.POST.keys()
13        keys.sort()
14        response.write(','.join(keys))
15        return response
16
17    def setUp(self):
18        # Monkey-patch in our test view
19        urls = __import__(settings.ROOT_URLCONF, {}, {}, [''])
20        import copy
21        urls.oldpatterns = copy.copy(urls.urlpatterns)
22        urls.urlpatterns += urls.patterns('', 
23            ('^echomethod/$', self.echo_view)
24        )
25
26    def tearDown(self):
27        urls = __import__(settings.ROOT_URLCONF, {}, {}, [''])
28        urls.urlpatterns = urls.oldpatterns
29        del urls.oldpatterns
30
31    def test_get(self):
32        response = Client().get('/echomethod/')
33        self.assert_(response.content.startswith('GET'))
34
35    def test_post(self):
36        response = Client().post('/echomethod/', {'foo': 'bar'})
37        self.assertEqual(response.content, 'POST\nfoo')
38
39    def test_post_multiple_fields(self):
40        response = Client().post('/echomethod/', {'foo': 'bar', 'baz': '1'})
41        self.assertEqual(response.content, 'POST\nbaz,foo')
42
43    def test_get_post_get(self):
44        client = Client()
45       
46        response = client.get('/echomethod/')
47        self.assert_(response.content.startswith('GET'))
48       
49        response = client.post('/echomethod/', {'foo': 'bar', 'baz': '1'})
50        self.assertEqual(response.content, 'POST\nbaz,foo')
51       
52        response = client.get('/echomethod/')
53        self.assert_(response.content.startswith('GET'))
54
55    def test_post_get_post_not_unicode(self):
56        client = Client()
57        data = {
58            'firstname': 'Test',
59            'lastname': 'Example',
60            'email': 'test@example.com',
61        }
62        keys = data.keys()
63        keys.sort()
64
65        response = client.post('/echomethod/', data)
66        self.assertEqual(response.content, 'POST\n%s' % ','.join(keys))
67
68        response = client.get('/echomethod/')
69        self.assert_(response.content.startswith('GET'))
70
71        response = client.post('/echomethod/', data)
72        self.assertEqual(response.content, 'POST\n%s' % ','.join(keys))
73
74    def test_post_get_post_unicode(self):
75        client = Client()
76        data = {
77            u'firstname': u'Test',
78            u'lastname': u'Example',
79            u'email': u'test@example.com',
80        }
81        keys = data.keys()
82        keys.sort()
83       
84        response = client.post('/echomethod/', data)
85        self.assertEqual(response.content, 'POST\n%s' % ','.join(keys))
86
87        response = client.get('/echomethod/')
88        self.assert_(response.content.startswith('GET'))
89
90        response = client.post('/echomethod/', data)
91        self.assertEqual(response.content, 'POST\n%s' % ','.join(keys))
92
93if __name__ == '__main__':
94    unittest.main()
Back to Top