test_prepareuserdatadownloads.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from io import StringIO
  2. from django.core import mail
  3. from django.core.management import call_command
  4. from ...conf.test import override_dynamic_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. @override_dynamic_settings(forum_address="http://test.com/")
  11. def test_process_pending_data_download(self):
  12. """management command processes pending data download"""
  13. data_download = request_user_data_download(self.user)
  14. self.assertEqual(data_download.status, DataDownload.STATUS_PENDING)
  15. out = StringIO()
  16. call_command(prepareuserdatadownloads.Command(), stdout=out)
  17. command_output = out.getvalue().splitlines()[0].strip()
  18. self.assertEqual(command_output, "Data downloads prepared: 1")
  19. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  20. self.assertEqual(updated_data_download.status, DataDownload.STATUS_READY)
  21. self.assertTrue(updated_data_download.expires_on > data_download.expires_on)
  22. self.assertTrue(updated_data_download.file)
  23. self.assertEqual(len(mail.outbox), 1)
  24. self.assertEqual(
  25. mail.outbox[0].subject, "TestUser, your data download is ready"
  26. )
  27. absolute_url = "".join(["http://test.com", updated_data_download.file.url])
  28. self.assertIn(absolute_url, mail.outbox[0].body)
  29. def test_skip_ready_data_download(self):
  30. """management command skips ready data download"""
  31. data_download = request_user_data_download(self.user)
  32. data_download.status = DataDownload.STATUS_READY
  33. data_download.save()
  34. out = StringIO()
  35. call_command(prepareuserdatadownloads.Command(), stdout=out)
  36. command_output = out.getvalue().splitlines()[0].strip()
  37. self.assertEqual(command_output, "Data downloads prepared: 0")
  38. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  39. self.assertEqual(updated_data_download.status, DataDownload.STATUS_READY)
  40. self.assertEqual(len(mail.outbox), 0)
  41. def test_skip_processing_data_download(self):
  42. """management command skips processing data download"""
  43. data_download = request_user_data_download(self.user)
  44. data_download.status = DataDownload.STATUS_PROCESSING
  45. data_download.save()
  46. out = StringIO()
  47. call_command(prepareuserdatadownloads.Command(), stdout=out)
  48. command_output = out.getvalue().splitlines()[0].strip()
  49. self.assertEqual(command_output, "Data downloads prepared: 0")
  50. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  51. self.assertEqual(updated_data_download.status, DataDownload.STATUS_PROCESSING)
  52. self.assertEqual(len(mail.outbox), 0)
  53. def test_skip_expired_data_download(self):
  54. """management command skips expired data download"""
  55. data_download = request_user_data_download(self.user)
  56. data_download.status = DataDownload.STATUS_EXPIRED
  57. data_download.save()
  58. out = StringIO()
  59. call_command(prepareuserdatadownloads.Command(), stdout=out)
  60. command_output = out.getvalue().splitlines()[0].strip()
  61. self.assertEqual(command_output, "Data downloads prepared: 0")
  62. updated_data_download = DataDownload.objects.get(pk=data_download.pk)
  63. self.assertEqual(updated_data_download.status, DataDownload.STATUS_EXPIRED)
  64. self.assertEqual(len(mail.outbox), 0)