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 | 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