test_prepareuserdatadownloads.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from io import StringIO
  2. from django.core import mail
  3. from django.core.management import call_command
  4. from misago.conf import settings
  5. from misago.users.datadownloads import request_user_data_download
  6. from misago.users.management.commands import prepareuserdatadownloads
  7. from misago.users.models import DataDownload
  8. from misago.users.testutils import AuthenticatedUserTestCase
  9. class PrepareUserDataDownloadsTests(AuthenticatedUserTestCase):
  10. def test_process_pending_data_download(self):
  11. """management command processes pending data download"""
  12. data_download = request_user_data_download(self.user)
  13. self.assertEqual(data_download.status, DataDownload.STATUS_PENDING)
  14. out = StringIO()
  15. call_command(prepareuserdatadownloads.Command(), stdout=out)
  16. command_output = out.getvalue().splitlines()[0].strip()
  17. self.assertEqual(command_output, "Data downloads prepared: 1")
  18. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  19. self.assertEqual(updated_data_download.status, DataDownload.STATUS_READY)
  20. self.assertTrue(updated_data_download.expires_on > data_download.expires_on)
  21. self.assertTrue(updated_data_download.file)
  22. self.assertEqual(len(mail.outbox), 1)
  23. self.assertEqual(mail.outbox[0].subject, "TestUser, your data download is ready")
  24. absolute_url = ''.join([settings.MISAGO_ADDRESS.rstrip('/'), updated_data_download.file.url])
  25. self.assertIn(absolute_url, mail.outbox[0].body)
  26. def test_skip_ready_data_download(self):
  27. """management command skips ready data download"""
  28. data_download = request_user_data_download(self.user)
  29. data_download.status = DataDownload.STATUS_READY
  30. data_download.save()
  31. out = StringIO()
  32. call_command(prepareuserdatadownloads.Command(), stdout=out)
  33. command_output = out.getvalue().splitlines()[0].strip()
  34. self.assertEqual(command_output, "Data downloads prepared: 0")
  35. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  36. self.assertEqual(updated_data_download.status, DataDownload.STATUS_READY)
  37. self.assertEqual(len(mail.outbox), 0)
  38. def test_skip_processing_data_download(self):
  39. """management command skips processing data download"""
  40. data_download = request_user_data_download(self.user)
  41. data_download.status = DataDownload.STATUS_PROCESSING
  42. data_download.save()
  43. out = StringIO()
  44. call_command(prepareuserdatadownloads.Command(), stdout=out)
  45. command_output = out.getvalue().splitlines()[0].strip()
  46. self.assertEqual(command_output, "Data downloads prepared: 0")
  47. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  48. self.assertEqual(updated_data_download.status, DataDownload.STATUS_PROCESSING)
  49. self.assertEqual(len(mail.outbox), 0)
  50. def test_skip_expired_data_download(self):
  51. """management command skips expired data download"""
  52. data_download = request_user_data_download(self.user)
  53. data_download.status = DataDownload.STATUS_EXPIRED
  54. data_download.save()
  55. out = StringIO()
  56. call_command(prepareuserdatadownloads.Command(), stdout=out)
  57. command_output = out.getvalue().splitlines()[0].strip()
  58. self.assertEqual(command_output, "Data downloads prepared: 0")
  59. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  60. self.assertEqual(updated_data_download.status, DataDownload.STATUS_EXPIRED)
  61. self.assertEqual(len(mail.outbox), 0)