test_api.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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(SubmitAgreementTests, self).setUp()
  8. self.agreement = Agreement.objects.create(
  9. type=Agreement.TYPE_TOS,
  10. text='Lorem ipsum',
  11. is_active=True,
  12. )
  13. self.api_link = reverse(
  14. 'misago:api:submit-agreement', kwargs={'pk': self.agreement.pk})
  15. def post_json(self, data):
  16. return self.client.post(
  17. self.api_link, json.dumps(data), content_type='application/json')
  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(response.json(), {
  23. '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(), {
  29. 'detail': 'Method "GET" not allowed.',
  30. })
  31. def test_invalid_agreement_id(self):
  32. api_link = reverse(
  33. 'misago:api:submit-agreement', kwargs={'pk': self.agreement.pk + 1})
  34. response = self.client.post(api_link)
  35. self.assertEqual(response.status_code, 404)
  36. self.assertEqual(response.json(), {
  37. 'detail': "Not found.",
  38. })
  39. def test_agreement_already_accepted(self):
  40. self.user.agreements.append(self.agreement.id)
  41. self.user.save()
  42. response = self.client.post(self.api_link)
  43. self.assertEqual(response.status_code, 403)
  44. self.assertEqual(response.json(), {
  45. 'detail': "You have already accepted this agreement.",
  46. })
  47. def test_no_accept_sent(self):
  48. response = self.client.post(self.api_link)
  49. self.assertEqual(response.status_code, 403)
  50. self.assertEqual(response.json(), {
  51. 'detail': "You need to submit a valid choice.",
  52. })
  53. def test_invalid_accept_sent(self):
  54. response = self.post_json({'accept': 1})
  55. self.assertEqual(response.status_code, 403)
  56. self.assertEqual(response.json(), {
  57. 'detail': "You need to submit a valid choice.",
  58. })
  59. def test_accept_false(self):
  60. response = self.post_json({'accept': False})
  61. self.assertEqual(response.status_code, 200)
  62. self.assertEqual(response.json(), {'detail': 'ok'})
  63. self.user.refresh_from_db()
  64. self.assertTrue(self.user.is_deleting_account)
  65. self.assertFalse(self.user.is_active)
  66. def test_accept_false_staff(self):
  67. self.user.is_staff = True
  68. self.user.save()
  69. response = self.post_json({'accept': False})
  70. self.assertEqual(response.status_code, 200)
  71. self.assertEqual(response.json(), {'detail': 'ok'})
  72. self.user.refresh_from_db()
  73. self.assertFalse(self.user.is_deleting_account)
  74. self.assertTrue(self.user.is_active)
  75. def test_accept_true(self):
  76. response = self.post_json({'accept': True})
  77. self.assertEqual(response.status_code, 200)
  78. self.assertEqual(response.json(), {'detail': 'ok'})
  79. self.user.refresh_from_db()
  80. self.assertEqual(self.user.agreements, [self.agreement.id])
  81. self.assertFalse(self.user.is_deleting_account)
  82. self.assertTrue(self.user.is_active)