Commit 21d1f702b64c482f5b6358b7d109465731cc46cd

Authored by Claude Paroz
1 parent 2f756444

Refactored redirection assertions to be Django 1.9 compatible

1 1 from __future__ import absolute_import
2 2
  3 +from django import VERSION
3 4 from django.contrib.auth.models import User
4 5 from django.contrib.contenttypes.models import ContentType
5 6 from django.contrib.sites.models import Site
... ... @@ -88,3 +89,14 @@ class CommentTestCase(TestCase):
88 89 d = self.getData()
89 90 d.update(f.initial)
90 91 return d
  92 +
  93 + def assertRedirects(self, response, expected_url, **kwargs):
  94 + """
  95 + Wrapper for assertRedirects to handle Django pre-1.7.
  96 + """
  97 + if VERSION >= (1, 7):
  98 + kwargs['fetch_redirect_response'] = False
  99 + return super(CommentTestCase, self).assertRedirects(
  100 + response, expected_url, **kwargs)
  101 + else:
  102 + self.assertEqual(response["Location"], expected_url)
... ...
... ... @@ -12,7 +12,8 @@ from . import CommentTestCase
12 12 from testapp.models import Article, Book
13 13
14 14
15   -post_redirect_re = re.compile(r'^http://testserver/posted/\?c=(?P<pk>\d+$)')
  15 +# Before Django 1.9, the response contained the scheme/netloc parts
  16 +post_redirect_re = re.compile(r'^(http://testserver)?/posted/\?c=(?P<pk>\d+$)')
16 17
17 18
18 19 class CommentViewTests(CommentTestCase):
... ... @@ -252,7 +253,7 @@ class CommentViewTests(CommentTestCase):
252 253 data["comment"] = "This is another comment"
253 254 response = self.client.post("/post/", data)
254 255 location = response["Location"]
255   - match = re.search(r"^http://testserver/somewhere/else/\?c=\d+$", location)
  256 + match = re.search(r"^(http://testserver)?/somewhere/else/\?c=\d+$", location)
256 257 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
257 258
258 259 data["next"] = "http://badserver/somewhere/else/"
... ... @@ -284,7 +285,7 @@ class CommentViewTests(CommentTestCase):
284 285 data["comment"] = "This is another comment"
285 286 response = self.client.post("/post/", data)
286 287 location = response["Location"]
287   - match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+$", location)
  288 + match = re.search(r"^(http://testserver)?/somewhere/else/\?foo=bar&c=\d+$", location)
288 289 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
289 290
290 291 def testCommentPostRedirectWithInvalidIntegerPK(self):
... ... @@ -313,7 +314,7 @@ class CommentViewTests(CommentTestCase):
313 314 data["comment"] = "This is another comment"
314 315 response = self.client.post("/post/", data)
315 316 location = response["Location"]
316   - match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+#baz$", location)
  317 + match = re.search(r"^(http://testserver)?/somewhere/else/\?foo=bar&c=\d+#baz$", location)
317 318 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
318 319
319 320 # Without a query string
... ... @@ -323,5 +324,5 @@ class CommentViewTests(CommentTestCase):
323 324 data["comment"] = "This is another comment"
324 325 response = self.client.post("/post/", data)
325 326 location = response["Location"]
326   - match = re.search(r"^http://testserver/somewhere/else/\?c=\d+#baz$", location)
  327 + match = re.search(r"^(http://testserver)?/somewhere/else/\?c=\d+#baz$", location)
327 328 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
... ...
... ... @@ -26,7 +26,7 @@ class FlagViewTests(CommentTestCase):
26 26 pk = comments[0].pk
27 27 self.client.login(username="normaluser", password="normaluser")
28 28 response = self.client.post("/flag/%d/" % pk)
29   - self.assertEqual(response["Location"], "http://testserver/flagged/?c=%d" % pk)
  29 + self.assertRedirects(response, "http://testserver/flagged/?c=%d" % pk)
30 30 c = Comment.objects.get(pk=pk)
31 31 self.assertEqual(c.flags.filter(flag=CommentFlag.SUGGEST_REMOVAL).count(), 1)
32 32 return c
... ... @@ -39,7 +39,7 @@ class FlagViewTests(CommentTestCase):
39 39 pk = comments[0].pk
40 40 self.client.login(username="normaluser", password="normaluser")
41 41 response = self.client.post("/flag/%d/" % pk, {'next': "/go/here/"})
42   - self.assertEqual(response["Location"],
  42 + self.assertRedirects(response,
43 43 "http://testserver/go/here/?c=%d" % pk)
44 44
45 45 def testFlagPostUnsafeNext(self):
... ... @@ -52,7 +52,7 @@ class FlagViewTests(CommentTestCase):
52 52 self.client.login(username="normaluser", password="normaluser")
53 53 response = self.client.post("/flag/%d/" % pk,
54 54 {'next': "http://elsewhere/bad"})
55   - self.assertEqual(response["Location"],
  55 + self.assertRedirects(response,
56 56 "http://testserver/flagged/?c=%d" % pk)
57 57
58 58 def testFlagPostTwice(self):
... ... @@ -67,9 +67,9 @@ class FlagViewTests(CommentTestCase):
67 67 comments = self.createSomeComments()
68 68 pk = comments[0].pk
69 69 response = self.client.get("/flag/%d/" % pk)
70   - self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
  70 + self.assertRedirects(response, "http://testserver/accounts/login/?next=/flag/%d/" % pk)
71 71 response = self.client.post("/flag/%d/" % pk)
72   - self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
  72 + self.assertRedirects(response, "http://testserver/accounts/login/?next=/flag/%d/" % pk)
73 73
74 74 def testFlaggedView(self):
75 75 comments = self.createSomeComments()
... ... @@ -112,7 +112,7 @@ class DeleteViewTests(CommentTestCase):
112 112 pk = comments[0].pk
113 113 self.client.login(username="normaluser", password="normaluser")
114 114 response = self.client.get("/delete/%d/" % pk)
115   - self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/delete/%d/" % pk)
  115 + self.assertRedirects(response, "http://testserver/accounts/login/?next=/delete/%d/" % pk)
116 116
117 117 makeModerator("normaluser")
118 118 response = self.client.get("/delete/%d/" % pk)
... ... @@ -125,7 +125,7 @@ class DeleteViewTests(CommentTestCase):
125 125 makeModerator("normaluser")
126 126 self.client.login(username="normaluser", password="normaluser")
127 127 response = self.client.post("/delete/%d/" % pk)
128   - self.assertEqual(response["Location"], "http://testserver/deleted/?c=%d" % pk)
  128 + self.assertRedirects(response, "http://testserver/deleted/?c=%d" % pk)
129 129 c = Comment.objects.get(pk=pk)
130 130 self.assertTrue(c.is_removed)
131 131 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1)
... ... @@ -140,7 +140,7 @@ class DeleteViewTests(CommentTestCase):
140 140 makeModerator("normaluser")
141 141 self.client.login(username="normaluser", password="normaluser")
142 142 response = self.client.post("/delete/%d/" % pk, {'next': "/go/here/"})
143   - self.assertEqual(response["Location"],
  143 + self.assertRedirects(response,
144 144 "http://testserver/go/here/?c=%d" % pk)
145 145
146 146 def testDeletePostUnsafeNext(self):
... ... @@ -154,7 +154,7 @@ class DeleteViewTests(CommentTestCase):
154 154 self.client.login(username="normaluser", password="normaluser")
155 155 response = self.client.post("/delete/%d/" % pk,
156 156 {'next': "http://elsewhere/bad"})
157   - self.assertEqual(response["Location"],
  157 + self.assertRedirects(response,
158 158 "http://testserver/deleted/?c=%d" % pk)
159 159
160 160 def testDeleteSignals(self):
... ... @@ -186,7 +186,7 @@ class ApproveViewTests(CommentTestCase):
186 186 pk = comments[0].pk
187 187 self.client.login(username="normaluser", password="normaluser")
188 188 response = self.client.get("/approve/%d/" % pk)
189   - self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/approve/%d/" % pk)
  189 + self.assertRedirects(response, "http://testserver/accounts/login/?next=/approve/%d/" % pk)
190 190
191 191 makeModerator("normaluser")
192 192 response = self.client.get("/approve/%d/" % pk)
... ... @@ -201,7 +201,7 @@ class ApproveViewTests(CommentTestCase):
201 201 makeModerator("normaluser")
202 202 self.client.login(username="normaluser", password="normaluser")
203 203 response = self.client.post("/approve/%d/" % c1.pk)
204   - self.assertEqual(response["Location"], "http://testserver/approved/?c=%d" % c1.pk)
  204 + self.assertRedirects(response, "http://testserver/approved/?c=%d" % c1.pk)
205 205 c = Comment.objects.get(pk=c1.pk)
206 206 self.assertTrue(c.is_public)
207 207 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1)
... ... @@ -219,7 +219,7 @@ class ApproveViewTests(CommentTestCase):
219 219 self.client.login(username="normaluser", password="normaluser")
220 220 response = self.client.post("/approve/%d/" % c1.pk,
221 221 {'next': "/go/here/"})
222   - self.assertEqual(response["Location"],
  222 + self.assertRedirects(response,
223 223 "http://testserver/go/here/?c=%d" % c1.pk)
224 224
225 225 def testApprovePostUnsafeNext(self):
... ... @@ -235,7 +235,7 @@ class ApproveViewTests(CommentTestCase):
235 235 self.client.login(username="normaluser", password="normaluser")
236 236 response = self.client.post("/approve/%d/" % c1.pk,
237 237 {'next': "http://elsewhere/bad"})
238   - self.assertEqual(response["Location"],
  238 + self.assertRedirects(response,
239 239 "http://testserver/approved/?c=%d" % c1.pk)
240 240
241 241 def testApproveSignals(self):
... ...
Please register or login to post a comment