Fully test the post view

This commit is contained in:
Maximilian Friedersdorff 2022-07-06 21:56:12 +01:00
parent 30526d9f30
commit 56bea8020b
3 changed files with 26 additions and 6 deletions

View file

@ -46,7 +46,7 @@ class ModelTests(TestCase):
class PostViewsTests(TestCase): class PostViewsTests(TestCase):
def setUp(self): def setUp(self):
self.user = get_user_model().objects.create( self.user = get_user_model().objects.create_user(
email="someone@example.com", email="someone@example.com",
username="someone", username="someone",
password="secret", password="secret",
@ -68,17 +68,20 @@ class PostViewsTests(TestCase):
def test_anon_cant_see_post(self): def test_anon_cant_see_post(self):
c = Client() c = Client()
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk}) url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
with self.settings(LOGIN_URL="/loginurl/"):
response = c.get(url) response = c.get(url)
self.assertRedirects(response, settings.LOGIN_URL) self.assertRedirects(
response, f"/loginurl/?next={url}", fetch_redirect_response=False
)
def test_logged_in_other_user_cant_see_post(self): def test_logged_in_other_user_cant_see_post(self):
get_user_model().objects.create( get_user_model().objects.create_user(
email="someone2@example.com", email="someone2@example.com",
username="foobar", username="foobar",
password="secret", password="secret",
) )
c = Client() c = Client()
c.login(username="foobar", password="foobar") c.login(username="foobar", password="secret")
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk}) url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
response = c.get(url) response = c.get(url)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
@ -89,3 +92,17 @@ class PostViewsTests(TestCase):
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk}) url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
response = c.get(url) response = c.get(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_can_post_a_comment(self):
c = Client()
c.login(username="someone", password="secret")
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
c.post(url, {"comment": "some comment"})
self.assertTrue(self.post.comments.filter(comment="some comment").exists())
def test_posting_a_comment_requires_a_comment(self):
c = Client()
c.login(username="someone", password="secret")
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
c.post(url, {"comment": ""})
self.assertFalse(self.post.comments.all().exists())

View file

@ -22,10 +22,13 @@ class PostDetailView(LoginRequiredMixin, DetailView, ModelFormMixin):
comment.save() comment.save()
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(self.get_success_url())
def get_queryset(self):
return Post.objects.filter(user=self.request.user)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
form = self.form_class(request.POST) form = self.form_class(request.POST)
if form.is_valid: if form.is_valid():
return self.form_valid(form) return self.form_valid(form)
else: else:
return self.form_invalid(form) return self.form_invalid(form)

View file