test_maintenance.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # coding: utf-8
  2. from __future__ import print_function
  3. from __future__ import absolute_import
  4. from __future__ import division
  5. from __future__ import unicode_literals
  6. from django.test import TestCase
  7. from django.utils.timezone import now, utc
  8. from django.core import mail
  9. from backend import const
  10. from backend import models as bmodels
  11. from backend.unittest import PersonFixtureMixin, ExpectedSets, TestSet
  12. import process.models as pmodels
  13. from .common import ProcessFixtureMixin
  14. from process import maintenance
  15. import datetime
  16. def _ts(year=2016, month=6, day=1):
  17. return datetime.datetime(year, month, day, tzinfo=utc)
  18. class TestPings(ProcessFixtureMixin, TestCase):
  19. @classmethod
  20. def setUpClass(cls):
  21. super(TestPings, cls).setUpClass()
  22. cls.persons.create("app", status=const.STATUS_DC)
  23. cls.processes.create("app", person=cls.persons.app, applying_for=const.STATUS_DD_U, fd_comment="test")
  24. cls.persons.create("am", status=const.STATUS_DD_NU)
  25. cls.ams.create("am", person=cls.persons.am)
  26. def test_just_started(self):
  27. self.processes.app.add_log(self.persons.fd, "created", logdate=_ts(day=2))
  28. self.assertEqual(len(mail.outbox), 0)
  29. maintenance.ping_stuck_processes(_ts(day=1), self.persons.fd, logdate=_ts(day=1))
  30. self.assertEqual(len(mail.outbox), 0)
  31. log = list(self.processes.app.log.all())
  32. self.assertEqual(len(log), 1)
  33. self.processes.app.refresh_from_db()
  34. self.assertIsNone(self.processes.app.closed)
  35. maintenance.ping_stuck_processes(_ts(day=3), self.persons.fd, logdate=_ts(day=3))
  36. self.assertEqual(len(mail.outbox), 1)
  37. log = list(self.processes.app.log.all())
  38. self.assertEqual(len(log), 2)
  39. self.processes.app.refresh_from_db()
  40. self.assertIsNone(self.processes.app.closed)
  41. maintenance.ping_stuck_processes(_ts(day=2), self.persons.fd, logdate=_ts(day=4))
  42. self.assertEqual(len(mail.outbox), 1)
  43. log = list(self.processes.app.log.all())
  44. self.assertEqual(len(log), 2)
  45. self.processes.app.refresh_from_db()
  46. self.assertIsNone(self.processes.app.closed)
  47. maintenance.ping_stuck_processes(_ts(day=4), self.persons.fd, logdate=_ts(day=5))
  48. self.assertEqual(len(mail.outbox), 2)
  49. log = list(self.processes.app.log.all())
  50. self.assertEqual(len(log), 3)
  51. self.processes.app.refresh_from_db()
  52. self.assertEqual(self.processes.app.closed, _ts(day=5))