123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- from django.core.exceptions import ValidationError
- from django.urls import reverse
- from ...categories.models import Category
- from ...users.test import AuthenticatedUserTestCase
- class ValidatePostTests(AuthenticatedUserTestCase):
- def setUp(self):
- super().setUp()
- self.category = Category.objects.get(slug="first-category")
- self.api_link = reverse("misago:api:thread-list")
- def test_title_validation(self):
- """validate_post tests title"""
- response = self.client.post(
- self.api_link,
- data={
- "category": self.category.pk,
- "title": "Check our l33t CaSiNo!",
- "post": "Lorem ipsum dolor met!",
- },
- )
- self.assertEqual(response.status_code, 400)
- self.assertEqual(
- response.json(), {"non_field_errors": ["Don't discuss gambling!"]}
- )
- # clean title passes validation
- response = self.client.post(
- self.api_link,
- data={
- "category": self.category.pk,
- "title": "Check our l33t place!",
- "post": "Lorem ipsum dolor met!",
- },
- )
- self.assertEqual(response.status_code, 200)
- def test_post_validation(self):
- """validate_post tests post content"""
- response = self.client.post(
- self.api_link,
- data={
- "category": self.category.pk,
- "title": "Lorem ipsum dolor met!",
- "post": "Check our l33t CaSiNo!",
- },
- )
- self.assertEqual(response.status_code, 400)
- self.assertEqual(
- response.json(), {"non_field_errors": ["Don't discuss gambling!"]}
- )
- # clean post passes validation
- response = self.client.post(
- self.api_link,
- data={
- "category": self.category.pk,
- "title": "Lorem ipsum dolor met!",
- "post": "Check our l33t place!",
- },
- )
- self.assertEqual(response.status_code, 200)
- def test_empty_input(self):
- """validate_post handles empty input"""
- response = self.client.post(self.api_link, data={"category": self.category.pk})
- self.assertEqual(response.status_code, 400)
- self.assertEqual(
- response.json(),
- {
- "title": ["You have to enter thread title."],
- "post": ["You have to enter a message."],
- },
- )
- response = self.client.post(
- self.api_link, data={"category": self.category.pk, "title": "", "post": ""}
- )
- self.assertEqual(response.status_code, 400)
- self.assertEqual(
- response.json(),
- {
- "title": ["This field may not be blank."],
- "post": ["This field may not be blank."],
- },
- )
- def test_post_validators_hook_is_used_by_posting_api(db, user_client, mocker, thread):
- def validator(context, data):
- raise ValidationError("ERROR FROM PLUGIN")
- mocker.patch("misago.threads.validators.hooks.post_validators", [validator])
- response = user_client.post(
- f"/api/threads/{thread.id}/posts/", {"post": "Lorem ipsum dolor met"}
- )
- assert response.status_code == 400
- assert response.json() == {"non_field_errors": ["ERROR FROM PLUGIN"]}
|