test_api.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.urls import reverse
  4. from misago.users.testutils import AuthenticatedUserTestCase
  5. class ParseMarkupApiTests(AuthenticatedUserTestCase):
  6. def setUp(self):
  7. super(ParseMarkupApiTests, self).setUp()
  8. self.api_link = reverse('misago:api:parse-markup')
  9. def test_is_anonymous(self):
  10. """api requires authentication"""
  11. self.logout_user()
  12. response = self.client.post(self.api_link)
  13. self.assertEqual(response.status_code, 403)
  14. self.assertEqual(
  15. response.json(), {
  16. 'detail': "This action is not available to guests.",
  17. },
  18. )
  19. def test_no_data(self):
  20. """api handles no data"""
  21. response = self.client.post(self.api_link)
  22. self.assertEqual(response.status_code, 400)
  23. self.assertEqual(
  24. response.json(), {
  25. 'markup': ["This field is required."],
  26. },
  27. )
  28. def test_invalid_data(self):
  29. """api handles post that is invalid type"""
  30. response = self.client.post(self.api_link, '[]', content_type="application/json")
  31. self.assertEqual(response.status_code, 400)
  32. self.assertEqual(
  33. response.json(), {
  34. 'non_field_errors': ["Invalid data. Expected a dictionary, but got list."],
  35. },
  36. )
  37. response = self.client.post(self.api_link, '123', content_type="application/json")
  38. self.assertEqual(response.status_code, 400)
  39. self.assertEqual(
  40. response.json(), {
  41. 'non_field_errors': ["Invalid data. Expected a dictionary, but got int."],
  42. },
  43. )
  44. response = self.client.post(self.api_link, '"string"', content_type="application/json")
  45. self.assertEqual(response.status_code, 400)
  46. self.assertEqual(
  47. response.json(), {
  48. 'non_field_errors': ["Invalid data. Expected a dictionary, but got str."],
  49. },
  50. )
  51. response = self.client.post(self.api_link, 'malformed', content_type="application/json")
  52. self.assertEqual(response.status_code, 400)
  53. self.assertEqual(
  54. response.json(), {
  55. 'detail': 'JSON parse error - Expecting value: line 1 column 1 (char 0)',
  56. },
  57. )
  58. def test_empty_markup(self):
  59. """api handles empty markup"""
  60. response = self.client.post(self.api_link, {'markup': ''})
  61. self.assertEqual(response.status_code, 400)
  62. self.assertEqual(
  63. response.json(), {
  64. 'markup': ["You have to enter a message."],
  65. },
  66. )
  67. # regression test for #929
  68. response = self.client.post(self.api_link, {'markup': '\n'})
  69. self.assertEqual(response.status_code, 400)
  70. self.assertEqual(
  71. response.json(), {
  72. 'markup': ["You have to enter a message."],
  73. },
  74. )
  75. def test_invalid_markup(self):
  76. """api handles invalid markup type"""
  77. response = self.client.post(self.api_link, {'markup': 123})
  78. self.assertEqual(response.status_code, 400)
  79. self.assertEqual(
  80. response.json(), {
  81. 'markup': [
  82. "Posted message should be at least 5 characters long (it has 3)."
  83. ],
  84. },
  85. )
  86. def test_valid_markup(self):
  87. """api returns parsed markup for valid markup"""
  88. response = self.client.post(self.api_link, {'markup': 'Lorem ipsum dolor met!'})
  89. self.assertEqual(response.status_code, 200)
  90. self.assertEqual(
  91. response.json(), {
  92. 'parsed': '<p>Lorem ipsum dolor met!</p>',
  93. },
  94. )