Commit 21d1f702b64c482f5b6358b7d109465731cc46cd

Authored by Claude Paroz
1 parent 2f756444

Refactored redirection assertions to be Django 1.9 compatible

1 from __future__ import absolute_import 1 from __future__ import absolute_import
2 2
  3 +from django import VERSION
3 from django.contrib.auth.models import User 4 from django.contrib.auth.models import User
4 from django.contrib.contenttypes.models import ContentType 5 from django.contrib.contenttypes.models import ContentType
5 from django.contrib.sites.models import Site 6 from django.contrib.sites.models import Site
@@ -88,3 +89,14 @@ class CommentTestCase(TestCase): @@ -88,3 +89,14 @@ class CommentTestCase(TestCase):
88 d = self.getData() 89 d = self.getData()
89 d.update(f.initial) 90 d.update(f.initial)
90 return d 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,7 +12,8 @@ from . import CommentTestCase
12 from testapp.models import Article, Book 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 class CommentViewTests(CommentTestCase): 19 class CommentViewTests(CommentTestCase):
@@ -252,7 +253,7 @@ class CommentViewTests(CommentTestCase): @@ -252,7 +253,7 @@ class CommentViewTests(CommentTestCase):
252 data["comment"] = "This is another comment" 253 data["comment"] = "This is another comment"
253 response = self.client.post("/post/", data) 254 response = self.client.post("/post/", data)
254 location = response["Location"] 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 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location) 257 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
257 258
258 data["next"] = "http://badserver/somewhere/else/" 259 data["next"] = "http://badserver/somewhere/else/"
@@ -284,7 +285,7 @@ class CommentViewTests(CommentTestCase): @@ -284,7 +285,7 @@ class CommentViewTests(CommentTestCase):
284 data["comment"] = "This is another comment" 285 data["comment"] = "This is another comment"
285 response = self.client.post("/post/", data) 286 response = self.client.post("/post/", data)
286 location = response["Location"] 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 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location) 289 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
289 290
290 def testCommentPostRedirectWithInvalidIntegerPK(self): 291 def testCommentPostRedirectWithInvalidIntegerPK(self):
@@ -313,7 +314,7 @@ class CommentViewTests(CommentTestCase): @@ -313,7 +314,7 @@ class CommentViewTests(CommentTestCase):
313 data["comment"] = "This is another comment" 314 data["comment"] = "This is another comment"
314 response = self.client.post("/post/", data) 315 response = self.client.post("/post/", data)
315 location = response["Location"] 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 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location) 318 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
318 319
319 # Without a query string 320 # Without a query string
@@ -323,5 +324,5 @@ class CommentViewTests(CommentTestCase): @@ -323,5 +324,5 @@ class CommentViewTests(CommentTestCase):
323 data["comment"] = "This is another comment" 324 data["comment"] = "This is another comment"
324 response = self.client.post("/post/", data) 325 response = self.client.post("/post/", data)
325 location = response["Location"] 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 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location) 328 self.assertIsNotNone(match, "Unexpected redirect location: %s" % location)
@@ -26,7 +26,7 @@ class FlagViewTests(CommentTestCase): @@ -26,7 +26,7 @@ class FlagViewTests(CommentTestCase):
26 pk = comments[0].pk 26 pk = comments[0].pk
27 self.client.login(username="normaluser", password="normaluser") 27 self.client.login(username="normaluser", password="normaluser")
28 response = self.client.post("/flag/%d/" % pk) 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 c = Comment.objects.get(pk=pk) 30 c = Comment.objects.get(pk=pk)
31 self.assertEqual(c.flags.filter(flag=CommentFlag.SUGGEST_REMOVAL).count(), 1) 31 self.assertEqual(c.flags.filter(flag=CommentFlag.SUGGEST_REMOVAL).count(), 1)
32 return c 32 return c
@@ -39,7 +39,7 @@ class FlagViewTests(CommentTestCase): @@ -39,7 +39,7 @@ class FlagViewTests(CommentTestCase):
39 pk = comments[0].pk 39 pk = comments[0].pk
40 self.client.login(username="normaluser", password="normaluser") 40 self.client.login(username="normaluser", password="normaluser")
41 response = self.client.post("/flag/%d/" % pk, {'next': "/go/here/"}) 41 response = self.client.post("/flag/%d/" % pk, {'next': "/go/here/"})
42 - self.assertEqual(response["Location"], 42 + self.assertRedirects(response,
43 "http://testserver/go/here/?c=%d" % pk) 43 "http://testserver/go/here/?c=%d" % pk)
44 44
45 def testFlagPostUnsafeNext(self): 45 def testFlagPostUnsafeNext(self):
@@ -52,7 +52,7 @@ class FlagViewTests(CommentTestCase): @@ -52,7 +52,7 @@ class FlagViewTests(CommentTestCase):
52 self.client.login(username="normaluser", password="normaluser") 52 self.client.login(username="normaluser", password="normaluser")
53 response = self.client.post("/flag/%d/" % pk, 53 response = self.client.post("/flag/%d/" % pk,
54 {'next': "http://elsewhere/bad"}) 54 {'next': "http://elsewhere/bad"})
55 - self.assertEqual(response["Location"], 55 + self.assertRedirects(response,
56 "http://testserver/flagged/?c=%d" % pk) 56 "http://testserver/flagged/?c=%d" % pk)
57 57
58 def testFlagPostTwice(self): 58 def testFlagPostTwice(self):
@@ -67,9 +67,9 @@ class FlagViewTests(CommentTestCase): @@ -67,9 +67,9 @@ class FlagViewTests(CommentTestCase):
67 comments = self.createSomeComments() 67 comments = self.createSomeComments()
68 pk = comments[0].pk 68 pk = comments[0].pk
69 response = self.client.get("/flag/%d/" % pk) 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 response = self.client.post("/flag/%d/" % pk) 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 def testFlaggedView(self): 74 def testFlaggedView(self):
75 comments = self.createSomeComments() 75 comments = self.createSomeComments()
@@ -112,7 +112,7 @@ class DeleteViewTests(CommentTestCase): @@ -112,7 +112,7 @@ class DeleteViewTests(CommentTestCase):
112 pk = comments[0].pk 112 pk = comments[0].pk
113 self.client.login(username="normaluser", password="normaluser") 113 self.client.login(username="normaluser", password="normaluser")
114 response = self.client.get("/delete/%d/" % pk) 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 makeModerator("normaluser") 117 makeModerator("normaluser")
118 response = self.client.get("/delete/%d/" % pk) 118 response = self.client.get("/delete/%d/" % pk)
@@ -125,7 +125,7 @@ class DeleteViewTests(CommentTestCase): @@ -125,7 +125,7 @@ class DeleteViewTests(CommentTestCase):
125 makeModerator("normaluser") 125 makeModerator("normaluser")
126 self.client.login(username="normaluser", password="normaluser") 126 self.client.login(username="normaluser", password="normaluser")
127 response = self.client.post("/delete/%d/" % pk) 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 c = Comment.objects.get(pk=pk) 129 c = Comment.objects.get(pk=pk)
130 self.assertTrue(c.is_removed) 130 self.assertTrue(c.is_removed)
131 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1) 131 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1)
@@ -140,7 +140,7 @@ class DeleteViewTests(CommentTestCase): @@ -140,7 +140,7 @@ class DeleteViewTests(CommentTestCase):
140 makeModerator("normaluser") 140 makeModerator("normaluser")
141 self.client.login(username="normaluser", password="normaluser") 141 self.client.login(username="normaluser", password="normaluser")
142 response = self.client.post("/delete/%d/" % pk, {'next': "/go/here/"}) 142 response = self.client.post("/delete/%d/" % pk, {'next': "/go/here/"})
143 - self.assertEqual(response["Location"], 143 + self.assertRedirects(response,
144 "http://testserver/go/here/?c=%d" % pk) 144 "http://testserver/go/here/?c=%d" % pk)
145 145
146 def testDeletePostUnsafeNext(self): 146 def testDeletePostUnsafeNext(self):
@@ -154,7 +154,7 @@ class DeleteViewTests(CommentTestCase): @@ -154,7 +154,7 @@ class DeleteViewTests(CommentTestCase):
154 self.client.login(username="normaluser", password="normaluser") 154 self.client.login(username="normaluser", password="normaluser")
155 response = self.client.post("/delete/%d/" % pk, 155 response = self.client.post("/delete/%d/" % pk,
156 {'next': "http://elsewhere/bad"}) 156 {'next': "http://elsewhere/bad"})
157 - self.assertEqual(response["Location"], 157 + self.assertRedirects(response,
158 "http://testserver/deleted/?c=%d" % pk) 158 "http://testserver/deleted/?c=%d" % pk)
159 159
160 def testDeleteSignals(self): 160 def testDeleteSignals(self):
@@ -186,7 +186,7 @@ class ApproveViewTests(CommentTestCase): @@ -186,7 +186,7 @@ class ApproveViewTests(CommentTestCase):
186 pk = comments[0].pk 186 pk = comments[0].pk
187 self.client.login(username="normaluser", password="normaluser") 187 self.client.login(username="normaluser", password="normaluser")
188 response = self.client.get("/approve/%d/" % pk) 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 makeModerator("normaluser") 191 makeModerator("normaluser")
192 response = self.client.get("/approve/%d/" % pk) 192 response = self.client.get("/approve/%d/" % pk)
@@ -201,7 +201,7 @@ class ApproveViewTests(CommentTestCase): @@ -201,7 +201,7 @@ class ApproveViewTests(CommentTestCase):
201 makeModerator("normaluser") 201 makeModerator("normaluser")
202 self.client.login(username="normaluser", password="normaluser") 202 self.client.login(username="normaluser", password="normaluser")
203 response = self.client.post("/approve/%d/" % c1.pk) 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 c = Comment.objects.get(pk=c1.pk) 205 c = Comment.objects.get(pk=c1.pk)
206 self.assertTrue(c.is_public) 206 self.assertTrue(c.is_public)
207 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1) 207 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1)
@@ -219,7 +219,7 @@ class ApproveViewTests(CommentTestCase): @@ -219,7 +219,7 @@ class ApproveViewTests(CommentTestCase):
219 self.client.login(username="normaluser", password="normaluser") 219 self.client.login(username="normaluser", password="normaluser")
220 response = self.client.post("/approve/%d/" % c1.pk, 220 response = self.client.post("/approve/%d/" % c1.pk,
221 {'next': "/go/here/"}) 221 {'next': "/go/here/"})
222 - self.assertEqual(response["Location"], 222 + self.assertRedirects(response,
223 "http://testserver/go/here/?c=%d" % c1.pk) 223 "http://testserver/go/here/?c=%d" % c1.pk)
224 224
225 def testApprovePostUnsafeNext(self): 225 def testApprovePostUnsafeNext(self):
@@ -235,7 +235,7 @@ class ApproveViewTests(CommentTestCase): @@ -235,7 +235,7 @@ class ApproveViewTests(CommentTestCase):
235 self.client.login(username="normaluser", password="normaluser") 235 self.client.login(username="normaluser", password="normaluser")
236 response = self.client.post("/approve/%d/" % c1.pk, 236 response = self.client.post("/approve/%d/" % c1.pk,
237 {'next': "http://elsewhere/bad"}) 237 {'next': "http://elsewhere/bad"})
238 - self.assertEqual(response["Location"], 238 + self.assertRedirects(response,
239 "http://testserver/approved/?c=%d" % c1.pk) 239 "http://testserver/approved/?c=%d" % c1.pk)
240 240
241 def testApproveSignals(self): 241 def testApproveSignals(self):
Please register or login to post a comment