test_api.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import json
  2. from django.urls import reverse
  3. from misago.legal.models import Agreement
  4. from misago.users.testutils import AuthenticatedUserTestCase
  5. class SubmitAgreementTests(AuthenticatedUserTestCase):
  6. def setUp(self):
  7. super().setUp()
  8. self.agreement = Agreement.objects.create(
  9. type=Agreement.TYPE_TOS, text="Lorem ipsum", is_active=True
  10. )
  11. self.api_link = reverse(
  12. "misago:api:submit-agreement", kwargs={"pk": self.agreement.pk}
  13. )
  14. def post_json(self, data):
  15. return self.client.post(
  16. self.api_link, json.dumps(data), content_type="application/json"
  17. )
  18. def test_anonymous(self):
  19. self.logout_user()
  20. response = self.client.post(self.api_link)
  21. self.assertEqual(response.status_code, 403)
  22. self.assertEqual(
  23. response.json(), {"detail": "This action is not available to guests."}
  24. )
  25. def test_get_request(self):
  26. response = self.client.get(self.api_link)
  27. self.assertEqual(response.status_code, 405)
  28. self.assertEqual(response.json(), {"detail": 'Method "GET" not allowed.'})
  29. def test_invalid_agreement_id(self):
  30. api_link = reverse(
  31. "misago:api:submit-agreement", kwargs={"pk": self.agreement.pk + 1}
  32. )
  33. response = self.client.post(api_link)
  34. self.assertEqual(response.status_code, 404)
  35. self.assertEqual(response.json(), {"detail": "Not found."})
  36. def test_agreement_already_accepted(self):
  37. self.user.agreements.append(self.agreement.id)
  38. self.user.save()
  39. response = self.client.post(self.api_link)
  40. self.assertEqual(response.status_code, 403)
  41. self.assertEqual(
  42. response.json(), {"detail": "You have already accepted this agreement."}
  43. )
  44. def test_no_accept_sent(self):
  45. response = self.client.post(self.api_link)
  46. self.assertEqual(response.status_code, 403)
  47. self.assertEqual(
  48. response.json(), {"detail": "You need to submit a valid choice."}
  49. )
  50. def test_invalid_accept_sent(self):
  51. response = self.post_json({"accept": 1})
  52. self.assertEqual(response.status_code, 403)
  53. self.assertEqual(
  54. response.json(), {"detail": "You need to submit a valid choice."}
  55. )
  56. def test_accept_false(self):
  57. response = self.post_json({"accept": False})
  58. self.assertEqual(response.status_code, 200)
  59. self.assertEqual(response.json(), {"detail": "ok"})
  60. self.user.refresh_from_db()
  61. self.assertTrue(self.user.is_deleting_account)
  62. self.assertFalse(self.user.is_active)
  63. def test_accept_false_staff(self):
  64. self.user.is_staff = True
  65. self.user.save()
  66. response = self.post_json({"accept": False})
  67. self.assertEqual(response.status_code, 200)
  68. self.assertEqual(response.json(), {"detail": "ok"})
  69. self.user.refresh_from_db()
  70. self.assertFalse(self.user.is_deleting_account)
  71. self.assertTrue(self.user.is_active)
  72. def test_accept_true(self):
  73. response = self.post_json({"accept": True})
  74. self.assertEqual(response.status_code, 200)
  75. self.assertEqual(response.json(), {"detail": "ok"})
  76. self.user.refresh_from_db()
  77. self.assertEqual(self.user.agreements, [self.agreement.id])
  78. self.assertFalse(self.user.is_deleting_account)
  79. self.assertTrue(self.user.is_active)