test_amassign.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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.core.urlresolvers import reverse
  8. from django.utils.timezone import now
  9. from backend import const
  10. from backend import models as bmodels
  11. from backend.unittest import PersonFixtureMixin
  12. import process.models as pmodels
  13. from mock import patch
  14. from .common import ProcessFixtureMixin
  15. class TestProcessAMAssign(ProcessFixtureMixin, TestCase):
  16. @classmethod
  17. def setUpClass(cls):
  18. super(TestProcessAMAssign, cls).setUpClass()
  19. cls.persons.create("app", status=const.STATUS_DC)
  20. cls.processes.create("app", person=cls.persons.app, applying_for=const.STATUS_DD_U, fd_comment="test")
  21. cls.persons.create("am", status=const.STATUS_DD_NU)
  22. cls.ams.create("am", person=cls.persons.am)
  23. cls.visitor = cls.persons.dc
  24. def test_success(self):
  25. with patch.object(pmodels.Requirement, "permissions_of", return_value={"am_assign"}):
  26. client = self.make_test_client(self.visitor)
  27. response = client.get(reverse("process_assign_am", args=[self.processes.app.pk]))
  28. self.assertEqual(response.status_code, 200)
  29. self.processes.app.refresh_from_db()
  30. self.assertIsNone(self.processes.app.current_am_assignment)
  31. response = client.post(reverse("process_assign_am", args=[self.processes.app.pk]), data={"am": self.persons.am.lookup_key})
  32. self.assertRedirectMatches(response, reverse("process_req_am_ok", args=[self.processes.app.pk]))
  33. self.processes.app.refresh_from_db()
  34. assignment = self.processes.app.current_am_assignment
  35. self.assertIsNotNone(assignment)
  36. self.assertEqual(assignment.process, self.processes.app)
  37. self.assertEqual(assignment.am, self.ams.am)
  38. self.assertEqual(assignment.paused, False)
  39. self.assertEqual(assignment.assigned_by, self.visitor)
  40. self.assertIsNotNone(assignment.assigned_time)
  41. self.assertIsNone(assignment.unassigned_by)
  42. self.assertIsNone(assignment.unassigned_time)
  43. from django.core import mail
  44. self.assertEquals(len(mail.outbox), 1)
  45. self.assertEquals(mail.outbox[0].cc, [self.processes.app.archive_email])
  46. self.assertEquals(mail.outbox[0].subject, "New Member process, Debian Developer, uploading")
  47. def test_forbidden(self):
  48. with patch.object(pmodels.Requirement, "permissions_of", return_value=set()):
  49. client = self.make_test_client(self.visitor)
  50. response = client.get(reverse("process_assign_am", args=[self.processes.app.pk]))
  51. self.assertPermissionDenied(response)
  52. self.processes.app.refresh_from_db()
  53. self.assertIsNone(self.processes.app.current_am_assignment)
  54. response = client.post(reverse("process_assign_am", args=[self.processes.app.pk]), data={"am": self.persons.am.lookup_key})
  55. self.assertPermissionDenied(response)
  56. self.processes.app.refresh_from_db()
  57. self.assertIsNone(self.processes.app.current_am_assignment)
  58. class TestProcessAMUnassign(ProcessFixtureMixin, TestCase):
  59. @classmethod
  60. def setUpClass(cls):
  61. super(TestProcessAMUnassign, cls).setUpClass()
  62. cls.persons.create("app", status=const.STATUS_DC)
  63. cls.processes.create("app", person=cls.persons.app, applying_for=const.STATUS_DD_U, fd_comment="test")
  64. cls.persons.create("am", status=const.STATUS_DD_NU)
  65. cls.ams.create("am", person=cls.persons.am)
  66. cls.amassignments.create("am", process=cls.processes.app, am=cls.ams.am, assigned_by=cls.persons["fd"], assigned_time=now())
  67. cls.visitor = cls.persons.dc
  68. def test_success(self):
  69. with patch.object(pmodels.Requirement, "permissions_of", return_value={"am_unassign"}):
  70. client = self.make_test_client(self.visitor)
  71. response = client.post(reverse("process_unassign_am", args=[self.processes.app.pk]))
  72. self.assertRedirectMatches(response, reverse("process_req_am_ok", args=[self.processes.app.pk]))
  73. self.processes.app.refresh_from_db()
  74. self.assertIsNone(self.processes.app.current_am_assignment)
  75. assignment = self.amassignments.am
  76. assignment.refresh_from_db()
  77. self.assertEqual(assignment.process, self.processes.app)
  78. self.assertEqual(assignment.am, self.ams.am)
  79. self.assertEqual(assignment.paused, False)
  80. self.assertEqual(assignment.assigned_by, self.persons.fd)
  81. self.assertIsNotNone(assignment.assigned_time)
  82. self.assertEqual(assignment.unassigned_by, self.visitor)
  83. self.assertIsNotNone(assignment.unassigned_time)
  84. def test_forbidden(self):
  85. with patch.object(pmodels.Requirement, "permissions_of", return_value=set()):
  86. client = self.make_test_client(self.visitor)
  87. response = client.post(reverse("process_unassign_am", args=[self.processes.app.pk]))
  88. self.assertPermissionDenied(response)
  89. self.processes.app.refresh_from_db()
  90. self.assertIsNotNone(self.processes.app.current_am_assignment)