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

Converted test_process_req to mocking permissions

parent 75d2c6aa
...@@ -10,28 +10,35 @@ from backend import const ...@@ -10,28 +10,35 @@ from backend import const
from backend import models as bmodels from backend import models as bmodels
from backend.unittest import PersonFixtureMixin, ExpectedSets, TestSet, PageElements from backend.unittest import PersonFixtureMixin, ExpectedSets, TestSet, PageElements
import process.models as pmodels import process.models as pmodels
from mock import patch
from .common import (ProcessFixtureMixin, get_all_process_types, from .common import (ProcessFixtureMixin, get_all_process_types,
test_fingerprint1, test_fpr1_signed_valid_text, test_fingerprint1, test_fpr1_signed_valid_text,
test_fingerprint2, test_fpr2_signed_valid_text, test_fingerprint2, test_fpr2_signed_valid_text,
test_fingerprint3, test_fpr3_signed_valid_text) test_fingerprint3, test_fpr3_signed_valid_text)
class TestProcessReq(ProcessFixtureMixin, TestCase): class TestProcessReqMixin(ProcessFixtureMixin):
@classmethod req_type = None
def __add_extra_tests__(cls):
for src, tgt in get_all_process_types():
want_am = "am_ok" in pmodels.Process.objects.compute_requirements(src, tgt)
visitors = [None, "pending", "dc", "dc_ga", "dm", "dm_ga", "dd_nu", "dd_u", "dd_e", "dd_r", "activeam", "fd", "dam", "app"]
if want_am: visitors.append("am")
for visitor in visitors:
if want_am:
cls._add_method(cls._test_perms, src, tgt, visitor, am="dd_nu")
else:
cls._add_method(cls._test_perms, src, tgt, visitor)
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
super(TestProcessReq, cls).setUpClass() super(TestProcessReqMixin, cls).setUpClass()
# Create a process with all requirements
cls.persons.create("app", status=const.STATUS_DC)
cls.fingerprints.create("app", person=cls.persons.app, fpr=test_fingerprint1, is_active=True, audit_skip=True)
cls.fingerprints.create("dd_nu", person=cls.persons.dd_nu, fpr=test_fingerprint2, is_active=True, audit_skip=True)
cls.persons.create("am", status=const.STATUS_DD_NU)
cls.fingerprints.create("am", person=cls.persons.am, fpr=test_fingerprint3, is_active=True, audit_skip=True)
cls.ams.create("am", person=cls.persons.am)
cls.processes.create("app", person=cls.persons.app, applying_for=const.STATUS_DD_U, fd_comment="test")
pmodels.Statement.objects.create(requirement=cls.processes.app.requirements.get(type="intent"), fpr=cls.fingerprints.app, statement=test_fpr1_signed_valid_text, uploaded_by=cls.persons.app, uploaded_time=now())
pmodels.Statement.objects.create(requirement=cls.processes.app.requirements.get(type="sc_dmup"), fpr=cls.fingerprints.app, statement=test_fpr1_signed_valid_text, uploaded_by=cls.persons.app, uploaded_time=now())
pmodels.Statement.objects.create(requirement=cls.processes.app.requirements.get(type="advocate"), fpr=cls.fingerprints.dd_nu, statement=test_fpr2_signed_valid_text, uploaded_by=cls.persons.dd_nu, uploaded_time=now())
pmodels.Statement.objects.create(requirement=cls.processes.app.requirements.get(type="am_ok"), fpr=cls.fingerprints.am, statement=test_fpr3_signed_valid_text, uploaded_by=cls.persons.am, uploaded_time=now())
cls.visitor = cls.persons.dc
cls.page_elements = PageElements() cls.page_elements = PageElements()
cls.page_elements.add_id("log_public") cls.page_elements.add_id("log_public")
cls.page_elements.add_id("log_private") cls.page_elements.add_id("log_private")
...@@ -45,72 +52,65 @@ class TestProcessReq(ProcessFixtureMixin, TestCase): ...@@ -45,72 +52,65 @@ class TestProcessReq(ProcessFixtureMixin, TestCase):
cls.page_elements_bytype["am_ok"].add_id("am_assign") cls.page_elements_bytype["am_ok"].add_id("am_assign")
cls.page_elements_bytype["am_ok"].add_id("am_unassign") cls.page_elements_bytype["am_ok"].add_id("am_unassign")
def assertPageElements(self, response, visit_perms): cls.req = cls.processes.app.requirements.get(type=cls.req_type)
def assertPageElements(self, response):
visit_perms = self.req.permissions_of(self.visitor)
# Check page elements based on visit_perms # Check page elements based on visit_perms
wanted = [] wanted = []
if "add_log" in visit_perms: if "add_log" in visit_perms:
wanted += ["log_public", "log_private"] wanted += ["log_public", "log_private"]
for el in ("req_approve", "req_unapprove"): for el in ("req_approve", "req_unapprove"):
if el in visit_perms: wanted.append(el) if el in visit_perms: wanted.append(el)
if "edit_statements" in visit_perms: if "edit_statements" in visit_perms and self.req.type != "keycheck":
wanted.append("statement_add") wanted.append("statement_add")
wanted.append("statement_delete") wanted.append("statement_delete")
self.assertContainsElements(response, self.page_elements, *wanted) self.assertContainsElements(response, self.page_elements, *wanted)
def _test_requirement_generic(self, req, visitor): def tryVisitingWithPerms(self, perms):
client = self.make_test_client(visitor) client = self.make_test_client(self.visitor)
response = client.get(req.get_absolute_url()) with patch.object(pmodels.Requirement, "permissions_of", return_value=perms):
self.assertEqual(response.status_code, 200) response = client.get(self.req.get_absolute_url())
visit_perms = req.permissions_of(self.persons[visitor]) self.assertEqual(response.status_code, 200)
self.assertPageElements(response, visit_perms) self.assertPageElements(response)
def _test_requirement_intent(self, visitor): def test_none(self):
req = pmodels.Requirement.objects.get(process=self.processes.app, type="intent") self.tryVisitingWithPerms(set())
pmodels.Statement.objects.create(requirement=req, fpr=self.fingerprints.app, statement=test_fpr1_signed_valid_text, uploaded_by=self.persons.app, uploaded_time=now()) pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
self._test_requirement_generic(req, visitor) self.tryVisitingWithPerms(set())
def _test_requirement_sc_dmup(self, visitor): def test_add_log(self):
req = pmodels.Requirement.objects.get(process=self.processes.app, type="sc_dmup") self.tryVisitingWithPerms(set(["add_log"]))
pmodels.Statement.objects.create(requirement=req, fpr=self.fingerprints.app, statement=test_fpr1_signed_valid_text, uploaded_by=self.persons.app, uploaded_time=now()) pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
self._test_requirement_generic(req, visitor) self.tryVisitingWithPerms(set(["add_log"]))
def _test_requirement_advocate(self, visitor): def test_req_approve(self):
req = pmodels.Requirement.objects.get(process=self.processes.app, type="advocate") self.tryVisitingWithPerms(set(["req_approve"]))
pmodels.Statement.objects.create(requirement=req, fpr=self.fingerprints.dd_nu, statement=test_fpr2_signed_valid_text, uploaded_by=self.persons.dd_nu, uploaded_time=now()) pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
self._test_requirement_generic(req, visitor) self.tryVisitingWithPerms(set(["req_approve"]))
def _test_requirement_keycheck(self, visitor): def test_req_unapprove(self):
req = pmodels.Requirement.objects.get(process=self.processes.app, type="keycheck") self.tryVisitingWithPerms(set(["req_unapprove"]))
self._test_requirement_generic(req, visitor) pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
self.tryVisitingWithPerms(set(["req_unapprove"]))
def _test_requirement_am_ok(self, visitor):
req = pmodels.Requirement.objects.get(process=self.processes.app, type="am_ok") def test_edit_statements(self):
pmodels.Statement.objects.create(requirement=req, fpr=self.fingerprints.am, statement=test_fpr3_signed_valid_text, uploaded_by=self.persons.am, uploaded_time=now()) self.tryVisitingWithPerms(set(["edit_statements"]))
self._test_requirement_generic(req, visitor) pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
self.tryVisitingWithPerms(set(["edit_statements"]))
def _test_perms(self, src, tgt, visitor, am=None):
# Create process
self.persons.create("app", status=src) class TestProcessReqIntent(TestProcessReqMixin, TestCase):
self.fingerprints.create("app", person=self.persons.app, fpr=test_fingerprint1, is_active=True, audit_skip=True) req_type = "intent"
self.processes.create("app", person=self.persons.app, applying_for=tgt, fd_comment="test")
self.fingerprints.create("dd_nu", person=self.persons.dd_nu, fpr=test_fingerprint2, is_active=True, audit_skip=True) class TestProcessReqScDmup(TestProcessReqMixin, TestCase):
if am is not None: req_type = "sc_dmup"
self.persons.create("am", status=am)
self.fingerprints.create("am", person=self.persons.am, fpr=test_fingerprint3, is_active=True, audit_skip=True) class TestProcessReqAdvocate(TestProcessReqMixin, TestCase):
self.ams.create("am", person=self.persons.am) req_type = "advocate"
reqs = pmodels.Process.objects.compute_requirements(src, tgt) class TestProcessReqAmOk(TestProcessReqMixin, TestCase):
if "intent" in reqs: self._test_requirement_intent(visitor) req_type = "am_ok"
if "sc_dmup" in reqs: self._test_requirement_sc_dmup(visitor)
if "advocate" in reqs: self._test_requirement_advocate(visitor) class TestProcessReqKeycheck(TestProcessReqMixin, TestCase):
if "keycheck" in reqs: self._test_requirement_keycheck(visitor) req_type = "keycheck"
if "am_ok" in reqs: self._test_requirement_am_ok(visitor)
# Assign am and repeat visit
if am:
pmodels.AMAssignment.objects.create(process=self.processes.app, am=self.ams.am, assigned_by=self.persons["fd"], assigned_time=now())
if "intent" in reqs: self._test_requirement_intent(visitor)
if "sc_dmup" in reqs: self._test_requirement_sc_dmup(visitor)
if "advocate" in reqs: self._test_requirement_advocate(visitor)
if "keycheck" in reqs: self._test_requirement_keycheck(visitor)
if "am_ok" in reqs: self._test_requirement_am_ok(visitor)
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