1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
from askbot.tests.utils import AskbotTestCase
from askbot.views.users import owner_or_moderator_required
from django.contrib.auth.models import AnonymousUser
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from mock import Mock
import urllib
import urlparse
class UserViewsTests(AskbotTestCase):
def test_owner_or_mod_required_passes_url_parameters(self):
@owner_or_moderator_required
def mock_view(request, user, context):
return None
request = Mock(spec=('path', 'REQUEST', 'user'))
request.user = AnonymousUser()
request.REQUEST = {'abra': 'cadabra', 'foo': 'bar'}
request.path = '/some/path/'
user = self.create_user('user')
response = mock_view(request, user, {})
self.assertEqual(isinstance(response, HttpResponseRedirect), True)
url = response['location']
parsed_url = urlparse.urlparse(url)
self.assertEqual(parsed_url.path, reverse('user_signin'))
next = dict(urlparse.parse_qsl(parsed_url.query))['next']
next_url = urllib.unquote(next)
parsed_url = urlparse.urlparse(next_url)
self.assertEqual(parsed_url.path, request.path)
query = dict(urlparse.parse_qsl(parsed_url.query))
self.assertEqual(set(query.keys()), set(['foo', 'abra']))
self.assertEqual(set(query.values()), set(['bar', 'cadabra']))
self.assertEqual(query['abra'], 'cadabra')
|