test_prepareuserdatadownloads.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from io import StringIO
  2. from django.core import mail
  3. from django.core.management import call_command
  4. from ...conf import settings
  5. from ..datadownloads import request_user_data_download
  6. from ..management.commands import prepareuserdatadownloads
  7. from ..models import DataDownload
  8. from ..test 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(
  24. mail.outbox[0].subject, "TestUser, your data download is ready"
  25. )
  26. absolute_url = "".join(
  27. [settings.MISAGO_ADDRESS.rstrip("/"), updated_data_download.file.url]
  28. )
  29. self.assertIn(absolute_url, mail.outbox[0].body)
  30. def test_skip_ready_data_download(self):
  31. """management command skips ready data download"""
  32. data_download = request_user_data_download(self.user)
  33. data_download.status = DataDownload.STATUS_READY
  34. data_download.save()
  35. out = StringIO()
  36. call_command(prepareuserdatadownloads.Command(), stdout=out)
  37. command_output = out.getvalue().splitlines()[0].strip()
  38. self.assertEqual(command_output, "Data downloads prepared: 0")
  39. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  40. self.assertEqual(updated_data_download.status, DataDownload.STATUS_READY)
  41. self.assertEqual(len(mail.outbox), 0)
  42. def test_skip_processing_data_download(self):
  43. """management command skips processing data download"""
  44. data_download = request_user_data_download(self.user)
  45. data_download.status = DataDownload.STATUS_PROCESSING
  46. data_download.save()
  47. out = StringIO()
  48. call_command(prepareuserdatadownloads.Command(), stdout=out)
  49. command_output = out.getvalue().splitlines()[0].strip()
  50. self.assertEqual(command_output, "Data downloads prepared: 0")
  51. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  52. self.assertEqual(updated_data_download.status, DataDownload.STATUS_PROCESSING)
  53. self.assertEqual(len(mail.outbox), 0)
  54. def test_skip_expired_data_download(self):
  55. """management command skips expired data download"""
  56. data_download = request_user_data_download(self.user)
  57. data_download.status = DataDownload.STATUS_EXPIRED
  58. data_download.save()
  59. out = StringIO()
  60. call_command(prepareuserdatadownloads.Command(), stdout=out)
  61. command_output = out.getvalue().splitlines()[0].strip()
  62. self.assertEqual(command_output, "Data downloads prepared: 0")
  63. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  64. self.assertEqual(updated_data_download.status, DataDownload.STATUS_EXPIRED)
  65. self.assertEqual(len(mail.outbox), 0)