Commit 21d1f702b64c482f5b6358b7d109465731cc46cd
1 parent
2f756444
Refactored redirection assertions to be Django 1.9 compatible
Showing
3 changed files
with
31 additions
and
18 deletions
| 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