Commit db396a6c authored by Enrico Zini's avatar Enrico Zini
Browse files

Started testing process_add_log with mock-based tests

parent 1bfceafa
...@@ -15,6 +15,10 @@ import uuid ...@@ -15,6 +15,10 @@ import uuid
# TODO: list log entries, check confidentiality filter # TODO: list log entries, check confidentiality filter
mock_ts = datetime.datetime(2016, 1, 1, 0, 0, 0)
def mock_now():
return mock_ts
class TestLog(ProcessFixtureMixin, TestCase): class TestLog(ProcessFixtureMixin, TestCase):
@classmethod @classmethod
...@@ -48,27 +52,11 @@ class TestLog(ProcessFixtureMixin, TestCase): ...@@ -48,27 +52,11 @@ class TestLog(ProcessFixtureMixin, TestCase):
cls.visitor = None cls.visitor = None
# if cls.am_assigned:
# pmodels.AMAssignment.objects.create(process=cls.processes.app, am=cls.ams.am, assigned_by=cls.persons["fd"], assigned_time=ts)
#else:
# cls.req_am_ok = None
# @classmethod
# def __add_extra_tests__(cls):
# visitors = [None, "pending", "dc", "dc_ga", "dm", "dm_ga", "dd_nu", "dd_u", "dd_e", "dd_r", "activeam", "fd", "dam", "app", "am"]
# for visitor in visitors:
# cls._add_method(cls._test_add_log, visitor, "log_private", "add_log")
# cls._add_method(cls._test_add_log, visitor, "log_public", "add_log")
# cls._add_method(cls._test_add_log, visitor, "req_approve", "req_approve")
# cls._add_method(cls._test_add_log, visitor, "req_unapprove", "req_unapprove")
# cls._add_method(cls._test_add_log, visitor, "proc_freeze", "proc_freeze")
# cls._add_method(cls._test_add_log, visitor, "proc_unfreeze", "proc_unfreeze")
# cls._add_method(cls._test_add_log, visitor, "proc_approve", "proc_approve")
def get_new_log(self, process, logtext): def get_new_log(self, process, logtext):
entry = pmodels.Log.objects.get(process=process, logtext=logtext) entry = pmodels.Log.objects.get(process=process, logtext=logtext)
self.assertEqual(entry.changed_by, self.visitor) self.assertEqual(entry.changed_by, self.visitor)
self.assertEqual(entry.process, self.processes.app) self.assertEqual(entry.process, self.processes.app)
self.assertEqual(entry.logdate, mock_ts)
return entry return entry
def assertFailed(self, response, logtext): def assertFailed(self, response, logtext):
...@@ -81,6 +69,7 @@ class TestLog(ProcessFixtureMixin, TestCase): ...@@ -81,6 +69,7 @@ class TestLog(ProcessFixtureMixin, TestCase):
self.assertEqual(self.processes.app.approved_time, self.orig_ts) self.assertEqual(self.processes.app.approved_time, self.orig_ts)
self.assertEqual(self.processes.app.closed, self.orig_ts) self.assertEqual(self.processes.app.closed, self.orig_ts)
@patch("django.utils.timezone.now", new_callable=mock_now)
def test_process_log_private(self): def test_process_log_private(self):
client = self.make_test_client(self.visitor) client = self.make_test_client(self.visitor)
logtext = uuid.uuid4().hex logtext = uuid.uuid4().hex
...@@ -97,6 +86,65 @@ class TestLog(ProcessFixtureMixin, TestCase): ...@@ -97,6 +86,65 @@ class TestLog(ProcessFixtureMixin, TestCase):
self.assertFalse(entry.is_public) self.assertFalse(entry.is_public)
self.assertEqual(entry.action, "") self.assertEqual(entry.action, "")
@patch("django.utils.timezone.now", new_callable=mock_now)
def test_process_log_public(self):
client = self.make_test_client(self.visitor)
logtext = uuid.uuid4().hex
with patch.object(pmodels.Process, "permissions_of", return_value=set()):
response = client.post(self.url, data={"logtext": logtext, "add_action": "log_public"})
self.assertFailed(response, logtext)
with patch.object(pmodels.Process, "permissions_of", return_value=set(["add_log"])):
response = client.post(self.url, data={"logtext": logtext, "add_action": "log_public"})
self.assertRedirectMatches(response, self.processes.app.get_absolute_url())
entry = self.get_new_log(self.processes.app, logtext)
self.assertIsNone(entry.requirement)
self.assertTrue(entry.is_public)
self.assertEqual(entry.action, "")
@patch("django.utils.timezone.now", new_callable=mock_now)
def test_process_proc_freeze(self):
client = self.make_test_client(self.visitor)
logtext = uuid.uuid4().hex
with patch.object(pmodels.Process, "permissions_of", return_value=set()):
response = client.post(self.url, data={"logtext": logtext, "add_action": "proc_freeze"})
self.assertFailed(response, logtext)
with patch.object(pmodels.Process, "permissions_of", return_value=set(["proc_freeze"])):
response = client.post(self.url, data={"logtext": logtext, "add_action": "proc_freeze"})
self.assertRedirectMatches(response, self.processes.app.get_absolute_url())
entry = self.get_new_log(self.processes.app, logtext)
self.assertIsNone(entry.requirement)
self.assertTrue(entry.is_public)
self.assertEqual(entry.action, "proc_freeze")
self.process.app.refresh_from_db()
self.assertEqual(self.processes.app.frozen_by, self.visitor)
self.assertEqual(self.processes.app.frozen_time, self.orig_ts)
self.assertEqual(self.processes.app.approved_by, self.persons.fd)
self.assertEqual(self.processes.app.approved_time, self.orig_ts)
self.assertEqual(self.processes.app.closed, self.orig_ts)
# if cls.am_assigned:
# pmodels.AMAssignment.objects.create(process=cls.processes.app, am=cls.ams.am, assigned_by=cls.persons["fd"], assigned_time=ts)
#else:
# cls.req_am_ok = None
# @classmethod
# def __add_extra_tests__(cls):
# visitors = [None, "pending", "dc", "dc_ga", "dm", "dm_ga", "dd_nu", "dd_u", "dd_e", "dd_r", "activeam", "fd", "dam", "app", "am"]
# for visitor in visitors:
# cls._add_method(cls._test_add_log, visitor, "log_private", "add_log")
# cls._add_method(cls._test_add_log, visitor, "log_public", "add_log")
# cls._add_method(cls._test_add_log, visitor, "req_approve", "req_approve")
# cls._add_method(cls._test_add_log, visitor, "req_unapprove", "req_unapprove")
# cls._add_method(cls._test_add_log, visitor, "proc_freeze", "proc_freeze")
# cls._add_method(cls._test_add_log, visitor, "proc_unfreeze", "proc_unfreeze")
# cls._add_method(cls._test_add_log, visitor, "proc_approve", "proc_approve")
# def _test_add_log(self, visitor, action, perm): # def _test_add_log(self, visitor, action, perm):
# if visitor == "am" and not self.has_am: return # if visitor == "am" and not self.has_am: return
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment